Powershell DMTF Datumsformat konvertieren
Ich versuche "TimeGenerated" vom Dmtf Format in ein lesbares YYYY-MM-DD HH:MM:SS umzuwandeln.
Der jetzige Code sieht so aus:
$objEvents = Get-Wmiobject -class Win32_NTLogEvent -computername $strMachine `
-filter "$strEventCode $strEventType TimeGenerated >= '$strDmtfDate'" |
Select-Object TimeGenerated, LogFile, SourceName, EventType, EventCode, Message
Sort-Object -property @{Expression={$_.TimeGenerated}; Ascending=$false}
if ($objEvents)
{
$objEvents | ConvertTo-Csv -NoTypeInformation -Delimiter ";" |
Out-File "$strCsvFile" -Append -Encoding Default
$objEvents | ConvertTo-HTML -title "EventlogReport $strLogDate" `
-body "<H4> $strOutput </H4>" `
-head $style `
-as Table |
Out-File "$strHtmlFile" -Append
}
##
Nach viel probieren sieht mein Testskript Ausgabe in der Konsole brauchbar aus, aber der Export übernimmt nicht alle Informationen?!...:
$time = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime((Get-Date).AddHours(-400))
$objEvents = Get-Wmiobject -class Win32_NTLogEvent -filter "EventType=1 and TimeGenerated>='$time'" |
select TimeGenerated, LogFile, SourceName, EventType, EventCode, Message |
Sort-Object -property @{Expression={$_.TimeGenerated}; Ascending=$false}
$konvtime=$objevents |select -expandproperty TimeGenerated | %{[System.Management.ManagementDateTimeconverter]::ToDateTime("$_")}
[int]$i="-1"
$Konvertiert=$konvtime |%{
$i=$i+1
$konvtime[$i]
$objEvents[$i].logfile
$objEvents[$i].sourcename
$objEvents[$i].eventtype
$objEvents[$i].eventcode
$objEvents[$i].message
}
$Konvertiert | ConvertTo-Csv -NoTypeInformation -Delimiter ";" |
Out-File "D:\test\out.csv" -Append -Force -Encoding Default
$Konvertiert | ConvertTo-HTML -title "EventlogReport $strLogDate" `
-body "<H4> $strOutput </H4>" `
-head $style `
-as Table |
Out-File "D:\test\out.html" -Append -Force
Der jetzige Code sieht so aus:
$objEvents = Get-Wmiobject -class Win32_NTLogEvent -computername $strMachine `
-filter "$strEventCode $strEventType TimeGenerated >= '$strDmtfDate'" |
Select-Object TimeGenerated, LogFile, SourceName, EventType, EventCode, Message
Sort-Object -property @{Expression={$_.TimeGenerated}; Ascending=$false}
if ($objEvents)
{
$objEvents | ConvertTo-Csv -NoTypeInformation -Delimiter ";" |
Out-File "$strCsvFile" -Append -Encoding Default
$objEvents | ConvertTo-HTML -title "EventlogReport $strLogDate" `
-body "<H4> $strOutput </H4>" `
-head $style `
-as Table |
Out-File "$strHtmlFile" -Append
}
##
Nach viel probieren sieht mein Testskript Ausgabe in der Konsole brauchbar aus, aber der Export übernimmt nicht alle Informationen?!...:
$time = [System.Management.ManagementDateTimeConverter]::ToDmtfDateTime((Get-Date).AddHours(-400))
$objEvents = Get-Wmiobject -class Win32_NTLogEvent -filter "EventType=1 and TimeGenerated>='$time'" |
select TimeGenerated, LogFile, SourceName, EventType, EventCode, Message |
Sort-Object -property @{Expression={$_.TimeGenerated}; Ascending=$false}
$konvtime=$objevents |select -expandproperty TimeGenerated | %{[System.Management.ManagementDateTimeconverter]::ToDateTime("$_")}
[int]$i="-1"
$Konvertiert=$konvtime |%{
$i=$i+1
$konvtime[$i]
$objEvents[$i].logfile
$objEvents[$i].sourcename
$objEvents[$i].eventtype
$objEvents[$i].eventcode
$objEvents[$i].message
}
$Konvertiert | ConvertTo-Csv -NoTypeInformation -Delimiter ";" |
Out-File "D:\test\out.csv" -Append -Force -Encoding Default
$Konvertiert | ConvertTo-HTML -title "EventlogReport $strLogDate" `
-body "<H4> $strOutput </H4>" `
-head $style `
-as Table |
Out-File "D:\test\out.html" -Append -Force
Please also mark the comments that contributed to the solution of the article
Content-Key: 255812
Url: https://administrator.de/contentid/255812
Printed on: April 19, 2024 at 19:04 o'clock
2 Comments
Latest comment
Moin,
dafür gibt es im WMI-Namespace eine Methode die du dafür nutzen kannst
Für deinen Code sähe das so aus:
aber warum nutzt du nicht die CMDLets Get-WinEvent oder Get-Eventlog ? Bei denen musst du das Datum nicht erst umwandeln und diese unterstützen ebenfalls das Auslesen von anderem Computern mit dem Parameter -Computername
Grüße Uwe
p.s irgendwie haben sich da ziemlich viele Leerzeilen am Ende deines Thread verlaufen
p.s.2 wäre auch schön wenn du deinen älteren Fragen mal Aufmerksamkeit schenken könntest, oder sie zumindest als gelöst markierst.
dafür gibt es im WMI-Namespace eine Methode die du dafür nutzen kannst
# Referenz zu einem WMI Object erzeugen (die Klasse ist egal)
$wmi = gwmi WIn32_Computersystem
# Beispiel um ein Datum umzuwandeln
get-date $wmi.ConvertToDateTime((gwmi Win32_NTLogEvent | select -First 1).TimeGenerated) -Format "yyyy-MM-dd HH:mm:ss"
Für deinen Code sähe das so aus:
$objEvents = Get-Wmiobject -class Win32_NTLogEvent -computername $strMachine -filter "$strEventCode $strEventType TimeGenerated >= '$strDmtfDate'" | Select-Object @{n="TimeGenerated";e={get-date (gwmi Win32_Computersystem).ConvertToDateTime($_.TimeGenerated) -Format "yyyy-MM-dd HH:mm:ss"}}, LogFile, SourceName, EventType, EventCode, Message | Sort-Object TimeGenerated -Descending
Grüße Uwe
p.s irgendwie haben sich da ziemlich viele Leerzeilen am Ende deines Thread verlaufen
p.s.2 wäre auch schön wenn du deinen älteren Fragen mal Aufmerksamkeit schenken könntest, oder sie zumindest als gelöst markierst.