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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 255812
Url: https://administrator.de/forum/powershell-dmtf-datumsformat-konvertieren-255812.html
Ausgedruckt am: 03.04.2025 um 05:04 Uhr
2 Kommentare
Neuester Kommentar
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.