Freigeben über


WMI-Aufgaben: Datums- und Uhrzeitangaben

Es gibt mehrere WMI-Klassen und ein Skriptobjekt zum Analysieren oder Konvertieren des CIM-Datetime-Formats. Weitere Beispiele finden Sie im TechNet ScriptCenter unter https://www.microsoft.com/technet.

Die in diesem Thema gezeigten Skriptbeispiele erhalten Daten ausschließlich vom lokalen Computer. Weitere Informationen zur Verwendung des Skripts zum Abrufen von Daten auf Remotecomputern finden Sie unter Herstellen einer Verbindung mit WMI auf einem Remotecomputer.

So führen Sie ein Skript aus

Im Folgenden wird die Ausführung eines Skripts beschrieben.

  1. Kopieren Sie den Code, und speichern Sie ihn in einer Datei mit der Erweiterung .vbs, z. B. filename.vbs. Achten Sie darauf, dass der Text-Editor der Datei nicht die Erweiterung .txt hinzufügt.
  2. Öffnen Sie ein Eingabeaufforderungsfenster, und navigieren Sie zu dem Verzeichnis, in dem Sie die Datei gespeichert haben.
  3. Geben Sie an der Eingabeaufforderung cscript filename.vbs ein.
  4. Wenn Sie nicht auf ein Ereignisprotokoll zugreifen können, überprüfen Sie, ob Sie dies über eine Eingabeaufforderung mit erhöhten Rechten ausführen. Einige Ereignisprotokolle, z. B. das Sicherheitsereignisprotokoll, werden möglicherweise durch Benutzerzugriffssteuerungen (UAC) geschützt.

Hinweis

In cscript wird die Ausgabe eines Skripts standardmäßig im Eingabeaufforderungsfenster angezeigt. Da WMI-Skripts umfangreiche Ausgaben erzeugen können, sollten Sie die Ausgabe an eine Datei umleiten. Geben Sie an der Eingabeaufforderung cscript filename.vbs > outfile.txt ein, um die Ausgabe des Skripts filename.vbs an outfile.txt umzuleiten.

In der folgenden Tabelle werden Skriptbeispiele aufgelistet, die zum Abrufen verschiedener Arten von Daten vom lokalen Computer verwendet werden können.

Vorgehensweisen WMI-Klassen oder -Methoden
... konvertiert WMI-Daten in standardmäßige Datums- und Uhrzeitangaben?
Verwenden Sie das Objekt SWbemDateTime, um diese in reguläre Datums- und Uhrzeitangaben zu konvertieren.
VB
Set dtmInstallDate = CreateObject("WbemScripting.SWbemDateTime")
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set objOS = objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For Each strOS in objOS
    dtmInstallDate.Value = strOS.InstallDate
    Wscript.Echo dtmInstallDate.GetVarDate
Next

Sie können auch festlegen, dass der Code die Aufgabe manuell (ohne Verwendung des Objekts) ausführt.

VB
Function WMIDateStringToDate(dtmInstallDate) 
    WMIDateStringToDate = CDate(Mid(dtmInstallDate, 5, 2) & "/" & Mid(dtmInstallDate, 7, 2) _
                        & "/" & Left(dtmInstallDate, 4) & " " & Mid (dtmInstallDate, 9, 2) & ":" _
                        & Mid(dtmInstallDate, 11, 2) & ":" & Mid(dtmInstallDate,13, 2)) 
End Function 

... die aktuell auf einem Computer konfigurierte Zeit ermitteln?

Verwenden Sie die Klasse Win32_LocalTime.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_LocalTime")
For Each objItem in colItems
    Wscript.Echo "Day:           " & objItem.Day & VBNewLine _
               & "Day Of Week:   " & objItem.DayOfWeek & VBNewLine _
               & "Hour:          " & objItem.Hour & VBNewLine _
               & "Minute:        " & objItem.Minute & VBNewLine _
               & "Month:         " & objItem.Month & VBNewLine _
               & "Quarter:       " & objItem.Quarter & VBNewLine _
               & "Second:        " & objItem.Second & VBNewLine _
               & "Week In Month: " & objItem.WeekInMonth & VBNewLine _
               & "Year:          " & objItem.Year 
Next

PowerShell
# Gibt den Computer an und ruft lokale Zeit ab $Computer = "." $times = Get-WmiObject Win32_LocalTime -computer $computer 

<# Jetzt Ergebnis anzeigen #>

Foreach ($time in $times) { "Day : {0}" -f $Time.Day "Day Of Week : {0}" -f $Time.DayOfWeek "Hour : {0}" -f $Time.Hour "Minute : {0}" -f $Time.Minute "Month : {0}" -f $Time.Month "Quarter : {0}" -f $Time.Quarter "Second : {0}" -f $time.Second "Week In Month: {0}" -f $Time.WeekInMonth "Year : {0}" -f $Time.Year }

... den Namen der Zeitzone ermitteln, in der ein Computer ausgeführt wird?

Verwenden Sie die Klasse Win32_TimeZone, und überprüfen Sie den Wert der Eigenschaft Description.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_TimeZone")
For Each objItem in colItems
    Wscript.Echo "Description:   " & objItem.Description
    Wscript.Echo "Daylight Name: " & objItem.DaylightName
    Wscript.Echo "Standard Name: " & objItem.StandardName
    Wscript.Echo
Next
PowerShell
$Computer = "."  
$timezone = Get-WMIObject -class Win32_TimeZone -ComputerName $computer  
  
<# Display details  #>
if ($computer -eq ".") {$computer = Hostname}  
"Time zone information on computer `"{0}`"" -f $computer  
"Time Zone Description   : {0}" -f $timezone.Description  
"Daylight Name           : {0}" -f $timezone.DaylightName  
"Standard Name           : {0}" -f $timezone.StandardName  

... sicherstellen, dass „10/02/2000“ als 2. Oktober 2000 und nicht als 10. Februar 2000 interpretiert wird?

Verwalten Sie Datumsangaben im Format CIM DATETIME, und verwenden Sie SWbemDateTime-Methoden, z. B. GetVarDate, um sie zwischen den Formaten FILETIME oder VT_Date zu konvertieren. Da das DATETIME-Format unabhängig vom Gebietsschema ist, können Sie ein Skript schreiben, das auf beliebigen Computern ausgeführt werden kann. Verwenden Sie das Objekt SWbemDateTime, um diese in reguläre Datums- und Uhrzeitangaben zu konvertieren. Weitere Informationen zum Konvertieren von Datums- und Uhrzeitangaben finden Sie unter Datums- und Uhrzeitformat.

... einen WMI-datetime-Wert in einen .NET-DateTime-Wert konvertieren?

Analysieren Sie die Zeichenfolge manuell, und fügen Sie dann die abgerufenen Werte in das Objekt DateTime ein.

PowerShell
function WMIDateStringToDateTime( [String] $strWmiDate ) 
{ 
    $strWmiDate.Trim() > $null 
    $iYear   = [Int32]::Parse($strWmiDate.SubString( 0, 4)) 
    $iMonth  = [Int32]::Parse($strWmiDate.SubString( 4, 2)) 
    $iDay    = [Int32]::Parse($strWmiDate.SubString( 6, 2)) 
    $iHour   = [Int32]::Parse($strWmiDate.SubString( 8, 2)) 
    $iMinute = [Int32]::Parse($strWmiDate.SubString(10, 2)) 
    $iSecond = [Int32]::Parse($strWmiDate.SubString(12, 2)) 
<# decimal point is at $strWmiDate.Substring(14, 1) #> 
    $iMicroseconds = [Int32]::Parse($strWmiDate.Substring(15, 6)) 
    $iMilliseconds = $iMicroseconds / 1000 
    $iUtcOffsetMinutes = [Int32]::Parse($strWmiDate.Substring(21, 4)) 
    if ( $iUtcOffsetMinutes -ne 0 ) 
    { 
        $dtkind = [DateTimeKind]::Local 
    } 
    else 
    { 
        $dtkind = [DateTimeKind]::Utc 
    } 
    return New-Object -TypeName DateTime ` 
                      -ArgumentList $iYear, $iMonth, $iDay, ` 
                                    $iHour, $iMinute, $iSecond, ` 
                                    $iMilliseconds, $dtkind 
} 

WMI-Aufgaben für Skripts und Anwendungen

WMI-C++-Anwendungsbeispiele

Datum- und Zeit format

TechNet ScriptCenter

`