Há várias classes WMI e um objeto de script para analisar ou converter o formato datetime do CIM. Para obter outros exemplos, consulte o TechNet ScriptCenter em https://www.microsoft.com/technet.
Os exemplos de script mostrados neste tópico obtêm dados somente do computador local. Para obter mais informações sobre como usar o script para obter dados de computadores remotos, consulte Conectando-se ao WMI em um computador remoto.
Para executar um script
O procedimento a seguir descreve como executar um script.
- Copie o código e salve-o em um arquivo com uma extensão .vbs, como filename.vbs. Certifique-se de que o editor de texto não adiciona uma extensão .txt ao arquivo.
- Abra uma janela de prompt de comando e navegue até o diretório onde você salvou o arquivo.
- Digite cscript filename.vbs no prompt de comando.
- Se não conseguir aceder a um registo de eventos, verifique se está a executar a partir de uma linha de comandos Elevados. Alguns Logs de Eventos, como o Log de Eventos de Segurança, podem estar protegidos por Controles de Acesso de Usuário (UAC).
Observação
Por padrão, o cscript exibe a saída de um script na janela do prompt de comando. Como os scripts WMI podem produzir grandes quantidades de saída, convém redirecionar a saída para um arquivo. Digite cscript filename.vbs > outfile.txt no prompt de comando para redirecionar a saída do script filename.vbs para outfile.txt.
A tabela a seguir lista exemplos de script que podem ser usados para obter vários tipos de dados do computador local.
... converter datas WMI em datas e horas padrão?
|
Use o objeto SWbemDateTime para convertê-los em datas e horas regulares.
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
|
Ou peça ao seu código que faça a tarefa manualmente.
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
|
|
... determinar o tempo atualmente configurado em um computador? |
Use a classe 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
|
# Especifique o computador e obtenha a Hora Local $Computer = "." $times = Get-WmiObject Win32_LocalTime -computer $computer
<# Agora exiba o resultado #>
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
}
|
|
... Determinar o nome do fuso horário em que um computador está sendo executado? |
Use a classe Win32_TimeZone e verifique o valor da propriedade 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
|
|
... garantir que "10/02/2000" seja interpretado como 2 de outubro de 2000, e não como "10 de fevereiro de 2000"? |
Gerencie datas no formato deCIM DATETIME e use métodos de SWbemDateTime, como GetVarDate para convertê-las de e para formatos FILETIME ou VT_Date. Como o formato DATETIME é independente de localidade, você pode escrever um script que é executado em qualquer máquina. Use o objeto SWbemDateTime para convertê-los em datas e horas regulares. Consulte Formato de data e hora para obter mais informações sobre a conversão de datas e horas. |
... converter um datetime WMI em um valor .NET DateTime? |
Analise manualmente a cadeia de caracteres e, em seguida, coloque os valores recuperados em um objeto 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
}
|
|
-
tarefas WMI para scripts e aplicativos
-
Exemplos de aplicativos WMI C++
-
Formato de data e hora
-
TechNet ScriptCenter
`