Compartir a través de


Tareas WMI: Fechas y horas

Hay varias clases WMI y un objeto de script para analizar o convertir el formato de fecha y hora CIM. Para otros ejemplos, véase el TechNet ScriptCenter en https://www.microsoft.com/technet.

Los ejemplos de script mostrados en este tema obtienen datos sólo del ordenador local. Para obtener más información sobre cómo utilizar el script para obtener datos de ordenadores remotos, consulte Conexión a WMI en un ordenador remoto.

Para ejecutar un script

El siguiente procedimiento describe cómo ejecutar un script.

  1. Copie el código y guárdelo en un archivo con extensión .vbs, por ejemplo filename.vbs. Asegúrese de que su editor de texto no añade la extensión .txt al archivo.
  2. Abra una ventana de símbolo del sistema y vaya al directorio donde guardó el archivo.
  3. Escriba cscript filename.vbs en el símbolo del sistema.
  4. Si no puede acceder a un registro de eventos, compruebe si está ejecutando desde un símbolo del sistema elevado. Algunos Registros de Eventos, como el Registro de Eventos de Seguridad, pueden estar protegidos por Controles de Acceso de Usuario (UAC).

Nota:

Por defecto, cscript muestra la salida de un script en la ventana de símbolo del sistema. Debido a que los scripts WMI pueden producir grandes cantidades de salida, es posible que desee redirigir la salida a un archivo. Escriba cscript filename.vbs > outfile.txt en el símbolo del sistema para redirigir la salida del comando filename.vbs script a outfile.txt.

La siguiente tabla enumera ejemplos de scripts que pueden utilizarse para obtener diversos tipos de datos del ordenador local.

Cómo... Clases o métodos WMI
...¿convertir fechas WMI a fechas y horas estándar?
Use el SWbemDateTime objeto para convertir estos a fechas y horas regulares.
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

O haga que su código realice la tarea manualmente.

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 

...¿determinar la hora configurada actualmente en un ordenador?

Use el Win32_LocalTime clase.

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
# Especifique ordenador y poner hora local $Computer = "." $times = Get-WmiObject Win32_LocalTime -computer $computer 

<# Ahora muestre el 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 el nombre de la zona horaria en la que funciona un ordenador?

Use el Win32_TimeZone clase y compruebe el valor de la Descripción propiedad.

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  

...¿asegurar que "10/02/2000" es interpretado como 2 Oct. 2, 2000, no "10 Feb, 2000"?

Gestionar fechas en CIM DATETIME formato y use SWbemDateTime métodos, tales como GetVarDate para convertirlos enr FILETIME or VT_Date formatos. Como el formato DATETIME es independiente de la localización, puede escribir una secuencia de comandos que se ejecute en cualquier máquina. Use el SWbemDateTime objeto para convertir estos a fechas y horas regulares. Véase formato de fecha y hora para más información sobre la conversión de fechas y horas.

...¿convertir un datetime WMI a un valor DateTime .NET?

Analiza manualmente la cadena y, a continuación, coloca los valores recuperados en un archivo DateTime objecto.

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 
} 

Tareas para scripts WMI y aplicaciones

WMI C++ Ejemplos de aplicación

Formato de fecha y hora

TechNet ScriptCenter

`