Hizmetlere yönelik WMI görevleri, bağımlı veya öncül hizmetler de dahil olmak üzere hizmetler hakkında bilgi alır. 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
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.
Bir komut istemi penceresi açın ve dosyayı kaydettiğiniz dizine gidin.
Komut istemine cscript filename.vbs yazın.
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
... hangi hizmetlerin çalıştığını ve hangilerinin çalışmadığını belirler mi?
Tüm hizmetlerin durumunu denetlemek için Win32_Service sınıfını kullanın. state özelliği, bir hizmetin durdurulup durdurulmadığını veya çalıştırılıp çalıştırılamadığını size bildirir.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Service",,48)
For Each objItem in colItems
Wscript.Echo "Service Name: " & objItem.Name & VBNewLine & "State: " & objItem.State
Next
... Power Users'ın belirli hizmetleri başlatması durdurulsun mu?
StartMode özelliğini Devre Dışı olarak ayarlamak için Win32_Service sınıfını ve ChangeStartMode yöntemini kullanın. Devre dışı bırakılan hizmetler başlatılamaz ve Power Users varsayılan olarak bir hizmetin başlangıç modunu değiştiremez.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service where StartMode = 'Manual'")
For Each objService in colServiceList
errReturnCode = objService.Change( , , , , "Disabled")
WScript.Echo "Changed manual service to disabled: " & objService.Name
Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery ("Select * from Win32_Service Where Name ='Alerter'")
For Each objService in colListOfServices
objService.StartService()
Wscript.Echo "Started Alerter service"
Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery ("Select * from Win32_Service")
For Each objservice in colServiceList
If objService.StartName = ".\netsvc" Then
errReturn = objService.Change( , , , , , , , "password")
End If
Next
.. hangi hizmetleri durdurabilirim?
Win32_Service sınıfını kullanın ve AcceptStop özelliğinin değerini denetleyin.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service Where AcceptStop = True")
For Each objService in colServices
Wscript.Echo objService.DisplayName
Next
... DHCP hizmetini başlatmadan önce çalışması gereken hizmetleri bulma
Win32_DependentService sınıfında yer alan ve Rol özelliğinde "Bağımlı" olan "DHCP" adlı Win32_Service sınıfını ASSOCIATORS sorgusu.
Rol, DHCP hizmetinin rolü anlamına gelir: bu durumda, başlatılmakta olan diğer hizmetlere bağımlıdır.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServiceList = objWMIService.ExecQuery("Associators Of " _
& "{Win32_Service.Name='dhcp'} Where " _
& "AssocClass=Win32_DependentService " _
& "Role=Dependent")
For Each objService in colServiceList
Wscript.Echo objService.DisplayName
Next
PowerShell
$query = "Associators Of {Win32_Service.Name='dhcp'} Where AssocClass=Win32_DependentService Role=Dependent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list DisplayName
... WMI hizmeti (Winmgmt) hizmetinin başlatılmadan önce çalıştırılmasını gerektiren hizmetleri bulun.
Win32_DependentService sınıfında yer alan ve Rol özelliğinde "Antecendent" bulunan "DHCP" adlı Win32_Service sınıfını ASSOCIATORS sorgusu.
Rol, rasman hizmetinin rolü anlamına gelir: bu durumda, bağımlı hizmetlerden önce başlatılması gereken bir öncüldür.
VB
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\ & strComputer & "\root\cimv2")
Set colServiceList = _
objWMIService.ExecQuery("Associators of " _
& "{Win32_Service.Name='winmgmt'} Where " _
& "AssocClass=Win32_DependentService " _
& "Role=Antecedent" )
For Each objService in colServiceList
Wscript.Echo "Name: " & objService.Name & VBTab & "Display Name: " & objService.DisplayName
Next
PowerShell
$query = "Associators of {Win32_Service.Name='winmgmt'} Where AssocClass=Win32_DependentService Role=Antecedent"
Get-WmiObject -Query $query -Namespace "root\cimv2" | format-list Name, DisplayName