PowerShell 2中sc start ...和Start-Service ...之间的区别

时间:2012-09-08 16:12:01

标签: service powershell-v2.0 windows-server-2003

我在同一台机器上安装了一些不同的服务。我正在编写PowerShell 2脚本来启动和停止它们。

对于某些服务,我可以使用Start-Service -displayname "the service"成功启动它。在其他情况下,使用Start-Service cmdlet会导致错误,并且无法在计算机上启动服务...'"。

如果我使用Start-Service cmdlet收到错误,sc start "the service"总是成功。

反之亦然(尽管sc start没有返回任何错误 - 它根本不会启动服务。)

这些命令之间有什么区别吗?是否有我应该使用的替代命令?最后,我可以抓住'来自cmdlet的任何错误,只包含两个命令以涵盖所有基础?

即使我卸载并重新安装该服务,此问题也是可重复的。

谢谢!

3 个答案:

答案 0 :(得分:4)

我不确定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 :(得分:3)

在powershell中scSet-Content。与help sc一起查看,与您在sccmd.exe运行时的情况不同。

您可能希望查看Start-ServiceRestart-ServiceStop-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

答案 2 :(得分:1)

这可能与sc start在某些情况下无效的原因有关: http://www.windowsitpro.com/article/powershell-faqs/q-do-normal-windows-commands-run-in-powershell

也许我需要这样称呼它: & "sc start 'the service'"