Service sc和start之间的差异。。。并启动服务。。。在PowerShell 2中

Service sc和start之间的差异。。。并启动服务。。。在PowerShell 2中,service,powershell-2.0,windows-server-2003,Service,Powershell 2.0,Windows Server 2003,我在同一台机器上安装了一些不同的服务。我正在编写一个PowerShell 2脚本来启动和停止它们 对于某些服务,我可以使用Start Service-displayname“the Service”成功启动它。在其他情况下,使用Start Servicecmdlet会导致“无法在计算机上启动服务…”这样的错误 如果我使用Start Servicecmdlet收到错误,sc启动“服务”始终成功 反之亦然(尽管sc start不会返回任何错误,只是根本不会启动服务。) 这些命令之间有什么区别吗?我是

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

对于某些服务,我可以使用
Start Service-displayname“the Service”
成功启动它。在其他情况下,使用
Start Service
cmdlet会导致“无法在计算机上启动服务…”这样的错误

如果我使用
Start Service
cmdlet收到错误,
sc启动“服务”
始终成功

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

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

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


谢谢

我不确定
sc start
start service
之间的区别,但是您可以使用wmi来做您想做的事情

要启动服务,请执行以下操作:

(get-wmiobject win32_service -filter "name='the service'").startService()
(get-wmiobject win32_service -filter "name='the service'").stopService()
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
要停止服务,请执行以下操作:

(get-wmiobject win32_service -filter "name='the service'").startService()
(get-wmiobject win32_service -filter "name='the service'").stopService()
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
要检查服务的状态,可以使用:

get-wmiobject win32_service -filter "name='the service'"
它将向您显示状态和启动模式。如果您想自动执行此操作,可以使用以下命令

要停止服务,请执行以下操作:

(get-wmiobject win32_service -filter "name='the service'").startService()
(get-wmiobject win32_service -filter "name='the service'").stopService()
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
要启动服务,请执行以下操作:

(get-wmiobject win32_service -filter "name='the service'").startService()
(get-wmiobject win32_service -filter "name='the service'").stopService()
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
。它使您能够访问远程系统,并在拥有非域系统时对其进行身份验证。希望这有帮助。祝你今天愉快

这可能与
sc start
在某些情况下不起作用的原因有关:

也许我需要这样称呼它:
和“sc启动‘服务’”

在powershell
sc
中是
设置内容
。请参见
help sc
,它与在
cmd.exe
中运行
sc
时不同

您可能需要查看
启动服务
重新启动服务
停止服务
。 使用
Get命令
帮助您找到所需的commandlet:

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
PS>cmd--%/c sc query wsearch
--%=绕过解析器,将其附加到cmd解析为的任何内容,然后运行命令并退出