Megosztás a következőn keresztül:


WMI-feladatok: Dátumok és időpontok

Több WMI-osztály és egy szkriptobjektum is létezik a CIM datetime formátumának elemzéséhez vagy konvertálásához. További példákért tekintse meg a TechNet ScriptCentert https://www.microsoft.com/technet.

Az ebben a témakörben bemutatott példaszkriptek csak a helyi számítógépről szereznek be adatokat. A parancsfájl távoli számítógépekről történő lekéréséről további információt a Csatlakozás a WMI-hez távoli számítógépencímű témakörben talál.

Szkript futtatása

Az alábbi eljárás egy szkript futtatását ismerteti.

  1. Másolja ki a kódot, és mentse egy .vbs kiterjesztésű fájlba, például filename.vbs. Győződjön meg arról, hogy a szövegszerkesztő nem ad hozzá .txt kiterjesztést a fájlhoz.
  2. Nyisson meg egy parancssori ablakot, és keresse meg azt a könyvtárat, ahová a fájlt mentette.
  3. Írja be cscript filename.vbs a parancssorba.
  4. Ha nem tud hozzáférni egy eseménynaplóhoz, ellenőrizze, hogy rendszergazda jogú parancssorból fut-e. Egyes eseménynaplók, például a biztonsági eseménynaplók felhasználói hozzáférés-vezérléssel (UAC) védhetők.

Jegyzet

Alapértelmezés szerint a cscript megjeleníti egy szkript kimenetét a parancssori ablakban. Mivel a WMI-szkriptek nagy mennyiségű kimenetet képesek előállítani, érdemes lehet átirányítani a kimenetet egy fájlba. Írja be cscript filename.vbs > outfile.txt parancssorba a filename.vbs szkript kimenetének átirányításához outfile.txt.

Az alábbi táblázat olyan példaszkripteket sorol fel, amelyekkel különböző típusú adatokat szerezhet be a helyi számítógépről.

Hogyan... WMI-osztályok vagy metódusok
... WMI-dátumok konvertálása szabványos dátumokra és időpontokra?
A SWbemDateTime objektummal ezeket normál dátumokká és időpontokra konvertálhatja.
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

Vagy manuálisan végezze el a feladatot a kóddal.

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 

... határozza meg a számítógépen jelenleg konfigurált időt?

Használja a Win32_LocalTime osztályt.

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
              
              # Számítógép megadása és helyi idő lekérése $Computer = "." $times = Get-WmiObject Win32_LocalTime -computer $computer 

<# Most jelenítse meg az eredményt #>

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 }

... határozza meg annak az időzónának a nevét, amelyben a számítógép fut?

Használja a Win32_TimeZone osztályt, és ellenőrizze a Description tulajdonság értékét.

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  

... győződjön meg arról, hogy a "2000.02.10"-t 2000. október 2-ként értelmezik, nem pedig "2000. február 10-én"?

Dátumok kezelése CIM-DATETIME formátumban, és SWbemDateTime metódusokkal( például GetVarDate) konvertálhatja őket FILETIME vagy VT_Date formátumba. Mivel a DATETIME formátum területi beállításfüggetlen, bármilyen gépen futtatható szkriptet írhat. Az SWbemDateTime objektummal ezeket normál dátumok és időpontokká alakíthatja. A dátumok és időpontok konvertálásáról további információt dátum- és időformátum.

... WMI datetime konvertálása .NET DateTime értékre?

Manuálisan elemezze a sztringet, majd helyezze a beolvasott értékeket egy DateTime objektumba.

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-feladatok szkriptekhez és alkalmazásokhoz

WMI C++ alkalmazás példák

Dátum- és időformátum

TechNet ScriptCenter

`