Aracılığıyla paylaş


WMI Görevleri: Masaüstü Yönetimi

Masaüstü yönetimine yönelik WMI görevleri, uzak masaüstünden veya yerel bir bilgisayardan denetim gerçekleştirebilir ve veri alabilir. Örneğin, yerel bilgisayardaki ekran koruyucunun parola gerekip gerekmediğini belirleyebilirsiniz. WMI ayrıca uzak bir bilgisayarı kapatmanızı sağlar. Diğer örnekler için, https://www.microsoft.com/technetkonumundaki TechNet ScriptCenter'ne bakın.

Bu konuda gösterilen betik örnekleri yalnızca yerel bilgisayardan veri alır. Betiği uzak bilgisayarlardan veri almak için kullanma hakkında daha fazla bilgi için bkz. Uzak Bilgisayarda WMI'ye Bağlanma.

Aşağıdaki yordamda betiğin nasıl çalıştırıldığı açıklanmaktadır.

Betik çalıştırmak için

  1. Kodu kopyalayın ve filename.vbsgibi .vbs uzantısına sahip bir dosyaya kaydedin. Metin düzenleyicinizin dosyaya .txt uzantısı eklemediğinden emin olun.
  2. Bir komut istemi penceresi açın ve dosyayı kaydettiğiniz dizine gidin.
  3. Komut istemine cscript filename.vbs yazın.
  4. Olay günlüğüne erişemiyorsanız Yükseltilmiş komut isteminden çalıştırılıp çalıştıramadığınızı denetleyin. Güvenlik Olay Günlüğü gibi bazı Olay Günlüğü, Kullanıcı Erişim Denetimleri (UAC) tarafından korunabilir.

Not

Varsayılan olarak, cscript komut istemi penceresinde bir betiğin çıkışını görüntüler. WMI betikleri büyük miktarda çıkış üretebileceğinden, çıkışı bir dosyaya yeniden yönlendirmek isteyebilirsiniz. filename.vbs betiğinin çıktısını outfile.txtyönlendirmek için komut istemine cscript filename.vbs > outfile.txt yazın.

Aşağıdaki tabloda, yerel bilgisayardan çeşitli veri türlerini almak için kullanılabilecek betik örnekleri listelenmiştir.

Nasıl... WMI sınıfları veya yöntemleri
... Uzak bilgisayarın Ağ durumuyla Güvenli Modda önyüklenip önyüklenmediğini belirlemek için Win32_ComputerSystem sınıfını kullanın ve PrimaryOwnerName özelliğinin değerini denetleyin.
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
}
... bir bilgisayar ekran koruyucus un parola gerektip gerektirmediğini belirlemek için

Win32_Desktop sınıfını kullanın ve ScreenSaverSecure özelliğinin değerini denetleyin.

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
     ""
}
... bilgisayar ekranının 800 piksel x 600 piksel olarak ayarlandığını doğrulayın.

Win32_DesktopMonitor sınıfını kullanın ve ScreenHeight ve ScreenWidth özelliklerin değerlerini denetleyin.

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
              
              <# Get desktop information #>
$computer = "." $desktops = Get-WmiObject -Class Win32_DesktopMonitor $hostname = ana bilgisayar adı 

<# Masaüstü ayrıntılarını görüntüle #> "{1} üzerinde {0} Masaüstü vardır:" -f $desktops. Say, $hostname "" $i=1 # bu sistemdeki masaüstlerinin sayısı

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

... bir bilgisayarın ne kadar süredir çalıştığını belirlemek mi?

Win32_OperatingSystem sınıfını ve LastBootUpTime özelliğini kullanın. Sistemin çalışma süresini almak için bu değeri geçerli saatten çıkarın.

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
              
              işlevi WMIDateStringToDate($Bootup) { [System.Management.ManagementDateTimeconverter]::ToDateTime($Bootup) } 

<# Ana betik #> $Computer = "." # gerektiği gibi ayarlayın $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 }

... uzak bilgisayarı yeniden başlatma veya kapatma

Win32_OperatingSystem sınıfını ve Win32Shutdown yöntemini kullanın. WMI'ye bağlanırken RemoteShutdown ayrıcalığını eklemeniz gerekir. Daha fazla bilgi için bkz. VBScript kullanarak Ayrıcalıklı İşlemleri Yürütme. Win32_OperatingSystemüzerindeki Shutdown yönteminin aksine, Win32Shutdown yöntemi, kapatma davranışını denetlemek için bayraklar ayarlamanıza olanak tanır.

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()
}
... Windows'u her başlatışımda hangi uygulamaların otomatik olarak çalıştırılır?

Win32_StartupCommand sınıfını kullanın.

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
}

Betikler ve Uygulamalar için WMI Görevlerini

WMI C++ Uygulama Örnekleri

TechNet ScriptCenter