2012-09-08 82 views
2

我在同一臺機器上安裝了幾個不同的服務。我正在編寫一個PowerShell 2腳本來啓動和停止它們。sc start和啓動服務之間的區別...在PowerShell 2中

對於某些服務,我可以使用Start-Service -displayname "the service"成功啓動它。在其他情況下,使用Start-Service cmdlet會導致「無法在計算機上啓動服務......」這一行發生錯誤。「」。

在使用Start-Service cmdlet得到錯誤的情況下,sc start "the service"總會成功。

反之也是如此(雖然sc start不返回任何錯誤 - 它只是沒有在所有啓動服務)

是否有這些命令有什麼區別?有沒有其他命令我應該使用?最後,我可以從cmdlet中「捕捉」任何錯誤,並只包含兩個命令來覆蓋所有基礎?

即使我卸載並重新安裝服務,此問題對我來說也是可重複的。

謝謝!

回答

3

我不確定sc startstart-service之間的差異,但您可以使用wmi來做你想做的事情。

要啓動服務:

(get-wmiobject win32_service -filter "name='the service'").startService() 

要停止服務:

(get-wmiobject win32_service -filter "name='the service'").stopService() 

要檢查服務的狀態,你可以使用:

get-wmiobject win32_service -filter "name='the service'" 

它會顯示你的狀態和啓動模式。如果您想自動執行此操作,您可以使用以下內容。

要停止服務:

if ((get-wmiobject win32_service -filter "name='the service'").state -eq "Running") { 
    (get-wmiobject win32_service -filter "name='the service'").stopService() 
} # Stops the service if it is running 

要啓動服務:

if ((get-wmiobject win32_service -filter "name='the service'").state -eq "Stopped") { 
    (get-wmiobject win32_service -filter "name='the service'").startService() 
} # starts the service if it is stopped 

我敢肯定,你可以修改那些滿足您的需求。

我喜歡使用wmi的原因是能夠指定-computername-credentials。它使得它可以訪問遠程系統,並在您擁有非域系統時進行身份驗證。希望有所幫助。祝你有美好的一天!

1

在PowerShell中scSet-Content。見help sc,與sccmd.exe不同。

你可能想看看Start-Service,Restart-Service,Stop-Service。 使用Get-Command幫助你找到你需要的命令行:

PS C:\> Get-Command | findstr Service 
Cmdlet Get-Service   Microsoft.PowerShell.Management 
Cmdlet New-Service   Microsoft.PowerShell.Management 
Cmdlet New-WebServiceProxy Microsoft.PowerShell.Management 
Cmdlet Restart-Service  Microsoft.PowerShell.Management 
Cmdlet Resume-Service  Microsoft.PowerShell.Management 
Cmdlet Set-Service   Microsoft.PowerShell.Management 
Cmdlet Start-Service   Microsoft.PowerShell.Management 
Cmdlet Stop-Service   Microsoft.PowerShell.Management 
Cmdlet Suspend-Service  Microsoft.PowerShell.Management 
相關問題