Bagikan melalui


Tugas WMI: Manajemen Desktop

Tugas WMI untuk manajemen desktop dapat mengerahkan kontrol dan mendapatkan data dari desktop jarak jauh atau komputer lokal. Misalnya, Anda dapat menentukan apakah screensaver di komputer lokal memerlukan kata sandi. WMI juga memberi Anda kemampuan mematikan komputer jarak jauh. Untuk contoh lain, lihat TechNet ScriptCenter di https://www.microsoft.com/technet.

Contoh skrip yang ditampilkan dalam topik ini hanya mendapatkan data dari komputer lokal. Untuk informasi selengkapnya tentang cara menggunakan skrip untuk mendapatkan data dari komputer jarak jauh, lihat Menyambungkan ke WMI di Komputer Jarak Jauh.

Prosedur berikut menjelaskan cara menjalankan skrip.

Untuk menjalankan skrip

  1. Salin kode dan simpan dalam file dengan ekstensi .vbs, seperti filename.vbs. Pastikan editor teks Anda tidak menambahkan ekstensi .txt ke file.
  2. Buka jendela prompt perintah dan navigasikan ke direktori tempat Anda menyimpan file.
  3. Ketik filename.vbscscript pada prompt perintah.
  4. Jika Anda tidak dapat mengakses log peristiwa, periksa untuk melihat apakah Anda menjalankan dari prompt perintah Yang ditingkatkan. Beberapa Log Peristiwa, seperti Log Peristiwa Keamanan, dapat dilindungi oleh Kontrol Akses Pengguna (UAC).

Catatan

Secara default, cscript menampilkan output skrip di jendela prompt perintah. Karena skrip WMI dapat menghasilkan output dalam jumlah besar, Anda mungkin ingin mengalihkan output ke file. Ketik filename.vbs cscript > outfile.txt pada prompt perintah untuk mengalihkan output skrip filename.vbs ke outfile.txt.

Tabel berikut ini mencantumkan contoh skrip yang dapat digunakan untuk mendapatkan berbagai jenis data dari komputer lokal.

Bagaimana Caranya... Kelas atau metode WMI
... menentukan apakah komputer jarak jauh telah di-boot dalam Mode Aman dengan status Jaringan? Gunakan kelas Win32_ComputerSystem dan periksa nilai properti PrimaryOwnerName .
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSettings = objWMIService.ExecQuery ("Select * from Win32_ComputerSystem")
For Each objComputer in colSettings 
    Wscript.Echo "System Name: " & objComputer.Name
    Wscript.Echo "Registered owner: " & objComputer.PrimaryOwnerName
Next
PowerShell
$colSettings = Get-WmiObject -Class Win32_ComputerSystem
foreach ($objComputer in $colSettings)
{
    "System Name: " + $objComputer.Name
    "Registered owner: " + $objComputer.PrimaryOwnerName
}
... menentukan apakah screensaver komputer memerlukan kata sandi?

Gunakan kelas Win32_Desktop dan periksa nilai properti ScreenSaverSecure .

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Desktop")
For Each objItem in colItems
    Wscript.Echo "Screen Saver Secure: " & objItem.ScreenSaverSecure
Next
PowerShell
$Computer = "."
$Desktops = Get-WMIObject -class Win32_Desktop -ComputerName $computer
"{0} desktops found as follows" -f $desktops.count
foreach ($desktop in $desktops) {
     "Desktop      : {0}"  -f $Desktop.Name
     "Screen Saver : {0}"  -f $desktop.ScreensaverExecutable
     "Secure       : {0} " -f $desktop.ScreenSaverSecure
     ""
}
... verifikasi bahwa layar komputer telah diatur untuk 800 piksel sebesar 600 piksel?

Gunakan kelas Win32_DesktopMonitor dan periksa nilai properti ScreenHeight dan ScreenWidth.

VB
strComputer = "."
Set objWMIService = GetObject(_
    "winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_DesktopMonitor")
For Each objItem in colItems
    Wscript.Echo "Screen Height: " & objItem.ScreenHeight
    Wscript.Echo "Screen Width: " & objItem.ScreenWidth
Next

PowerShell
              
              <# Dapatkan informasi desktop #>
$computer = "." $desktops = Get-WmiObject -Class Win32_DesktopMonitor $hostname = nama host

<# Tampilkan detail desktop #> "Ada {0} Desktop aktif {1} sebagai berikut:" -f $desktops. Count, $hostname "" $i=1 # jumlah desktop pada sistem ini

foreach ($desktop in $desktops) { "Desktop {0}: {1}" -f $i++, $Desktop.Caption "Screen Height : {0}" -f $desktop.ScreenHeight "Screen Width : {0}" -f $desktop.ScreenWidth "" }

... menentukan berapa lama komputer telah berjalan?

Gunakan kelas Win32_OperatingSystem dan properti LastBootUpTime . Kurangi nilai tersebut dari waktu saat ini untuk mendapatkan waktu aktif sistem.

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
 
For Each objOS in colOperatingSystems
    dtmBootup = objOS.LastBootUpTime
    dtmLastBootUpTime = WMIDateStringToDate(dtmBootup)
    dtmSystemUptime = DateDiff("h", dtmLastBootUpTime, Now)
    Wscript.Echo dtmSystemUptime 
Next
 
Function WMIDateStringToDate(dtmBootup)
    WMIDateStringToDate =  CDate(Mid(dtmBootup, 5, 2) & "/" & _
        Mid(dtmBootup, 7, 2) & "/" & Left(dtmBootup, 4) & " " & Mid (dtmBootup, 9, 2) & ":" & _
        Mid(dtmBootup, 11, 2) & ":" & Mid(dtmBootup, 13, 2))
End Function

PowerShell
              
              fungsi WMIDateStringToDate($Bootup) { [System.Management.ManagementDateTimeconverter]::ToDateTime($Bootup) }

<# Skrip utama #> $Computer = "." # sesuaikan sesuai kebutuhan $computers = Get-WMIObject -class Win32_OperatingSystem -computer $computer

foreach ($system in $computers) { $Bootup = $system.LastBootUpTime $LastBootUpTime = WMIDateStringToDate($Bootup) $now = Get-Date $Uptime = $now-$lastBootUpTime "System Up for: {0}" -f $UpTime }

... reboot atau matikan komputer jarak jauh?

Gunakan kelas Win32_OperatingSystem dan metode Win32Shutdown . Anda harus menyertakan hak istimewa RemoteShutdown saat menyambungkan ke WMI. Untuk informasi selengkapnya, lihat Menjalankan Operasi Istimewa Menggunakan VBScript. Tidak seperti metode Matikan pada Win32_OperatingSystem, metode Win32Shutdown memungkinkan Anda mengatur bendera untuk mengontrol perilaku matikan.

VB
strComputer = "atl-dc-01"
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate,(Shutdown)}!\\" & strComputer & "\root\cimv2")
Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
    ObjOperatingSystem.Shutdown(1)
Next
PowerShell
strComputer = "atl-dc-01"
$colOperatingSystem = Get-WmiObject -Class Win32_OperatingSystem -ComputerName $strComputer -Namespace "wmi\cimv2"
foreach ($objOperatingSystem in $colOperatingSystem)
{
    [void]$objOperatingSystem.Shutdown()
}
... menentukan aplikasi apa yang berjalan secara otomatis setiap kali saya memulai Windows?

Gunakan kelas Win32_StartupCommand .

VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
Set colStartupCommands = objWMIService.ExecQuery _
    ("Select * from Win32_StartupCommand")
For Each objStartupCommand in colStartupCommands
    Wscript.Echo "Command: " & objStartupCommand.Command & VBNewLine _
    & "Description: " & objStartupCommand.Description & VBNewLine _
    & "Location: " & objStartupCommand.Location & VBNewLine _
    & "Name: " & objStartupCommand.Name & VBNewLine _
    & "SettingID: " & objStartupCommand.SettingID & VBNewLine _
    & "User: " & objStartupCommand.User
Next
PowerShell
$strComputer = "."
$colItems = Get-WmiObject -Class Win32_StartupCommand -ComputerName $strComputer
foreach ($objStartupCommand in $colItems) 
{ 
    "Command: " + $objStartupCommand.Command
    "Description: " + $objStartupCommand.Description 
    "Location: " + $objStartupCommand.Location 
    "Name: " + $objStartupCommand.Name 
    "SettingID: " + $objStartupCommand.SettingID 
    "User: " + $objStartupCommand.User
}

Tugas WMI untuk Skrip dan Aplikasi

Contoh Aplikasi WMI C++

TechNet ScriptCenter