Istnieje kilka klas WMI i obiekt skryptowy do analizowania lub konwertowania format daty/godziny modelu CIM. Inne przykłady można znaleźć w witrynie TechNet ScriptCenter pod adresem https://www.microsoft.com/technet.
Przykłady skryptów pokazane w tym temacie uzyskują dane tylko z komputera lokalnego. Aby uzyskać więcej informacji o sposobie uzyskiwania danych z komputerów zdalnych za pomocą skryptu, zobacz Connecting to WMI on a Remote Computer.
Aby uruchomić skrypt
Poniższa procedura opisuje sposób uruchamiania skryptu.
- Skopiuj kod i zapisz go w pliku z rozszerzeniem vbs, takim jak nazwa pliku.vbs. Upewnij się, że edytor tekstów nie dodaje rozszerzenia .txt do pliku.
- Otwórz okno wiersza polecenia i przejdź do katalogu, w którym zapisano plik.
- Wpisz cscript nazwa pliku.vbs w wierszu polecenia.
- Jeśli nie możesz uzyskać dostępu do dziennika zdarzeń, sprawdź, czy korzystasz z wiersza polecenia z podwyższonym poziomem uprawnień. Niektóre dzienniki zdarzeń, takie jak dziennik zdarzeń zabezpieczeń, mogą być chronione przez kontrolę dostępu użytkowników (UAC).
Nuta
Domyślnie skrypt cscript wyświetla dane wyjściowe skryptu w oknie wiersza polecenia. Ponieważ skrypty usługi WMI mogą generować duże ilości danych wyjściowych, może być konieczne przekierowanie danych wyjściowych do pliku. Wpisz cscript filename.vbs > outfile.txt w wierszu polecenia, aby przekierować dane wyjściowe pliku pliku.vbs skryptu, aby outfile.txt.
W poniższej tabeli wymieniono przykłady skryptów, których można użyć do uzyskania różnych typów danych z komputera lokalnego.
... przekonwertować daty usługi WMI na standardowe daty i godziny?
|
Użyj obiektu SWbemDateTime, aby przekonwertować je na regularne daty i godziny.
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
|
Możesz też ręcznie wykonać zadanie.
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
|
|
... określić czas aktualnie skonfigurowany na komputerze? |
Użyj klasy Win32_LocalTime.
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
|
# Określ komputer i pobierz $Computer czasu lokalnego = "." $times = Get-WmiObject Win32_LocalTime -computer $computer
<# Teraz wyświetl wynik #>
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
}
|
|
... określić nazwę strefy czasowej, w której jest uruchomiony komputer? |
Użyj klasy Win32_TimeZone i sprawdź wartość właściwości Description.
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
|
$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
|
|
... czy "10/02/2000" jest interpretowany jako 2 października 2000 r., a nie "10 lutego, 2000"? |
Zarządzaj datami w formacie CIMDATETIME i użyj metod SWbemDateTime, takich jak GetVarDate przekonwertować na FILETIME lub VT_Date formaty. Ponieważ format DATETIME jest niezależny od ustawień regionalnych, możesz napisać skrypt uruchamiany na dowolnej maszynie. Użyj obiektu SWbemDateTime, aby przekonwertować je na regularne daty i godziny. Aby uzyskać więcej informacji na temat konwertowania dat i godzin, zobacz Format daty i godziny. |
... przekonwertować wartość daty/godziny usługi WMI na wartość data/godzina platformy .NET? |
Ręcznie przeanalizuj ciąg, a następnie umieść pobrane wartości w obiekcie DateTime.
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
}
|
|
-
zadania usługi WMI dla skryptów i aplikacji
-
przykłady aplikacji WMI C++
-
format daty i godziny
-
TechNet ScriptCenter
`