4

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

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

在我使用Start-Servicecmdlet 出错的情况下,sc start "the service"总是成功。

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

这些命令之间有什么区别吗?我应该使用其他命令吗?最后,我可以从 cmdlet 中“捕获”任何错误,并且只包含两个命令以涵盖所有基础吗?

这个问题对我来说是可重复的,即使我卸载并重新安装该服务。

谢谢!

4

3 回答 3

5

我不确定 和 之间的区别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. 它使您可以访问远程系统并在您拥有非域系统时对其进行身份验证。希望有帮助。祝你有美好的一天!

于 2012-09-09T08:51:40.330 回答
3

在 powershellsc中是Set-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
于 2014-10-17T20:24:32.810 回答
1

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

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

于 2012-09-09T20:02:50.010 回答