我有一台 Windows 2008 R2 服务器作为打印服务器。
该服务器上出现的几乎所有问题都可以通过重新启动后台打印程序服务来解决。
我想出了一个每天晚上自动重启服务的计划,结果发现了这个命令:
Powershell.exe -ExecutionPolicy Bypass -Command { 重新启动服务 -Name spooler }
问题是我的假脱机程序有三个依赖它的服务,所以这个命令不起作用。在“spooler”后面添加 -force 命令是否安全,或者还有其他方法吗?
重新启动具有依赖项的服务需要先停止依赖的服务。有一篇包含示例代码的戴尔知识库文章。如果链接失效,稍微调整一下的版本就像这样,
# Service to be restarted
$restartedService = "FooBar"
# Get service dependencies
$dependents = (get-service $restartedService).dependentservices
# information about dependent services
$dependentservices = gwmi Win32_Service | Select-object name,state,startmode | ? {$dependents.name -contains $_.name}
# Stop dependencies
Write-Host "Stopping Services" -f Yellow
foreach ($service in $dependentservices){
Write-Host "`r`nAnalyzing $($service.name)" -f Yellow
if($service.startmode -eq "auto" -or $service.status -eq "Running"){
Write-Host "Stopping $($service.name)"
stop-service $service.name
} else{
"$($service.name) is $($service.state) with the startmode: $($service.startmode)"
}
}
# Stop the service
stop-service $restartedService -force
Write-Host "Starting Services" -f Yellow
# start dependencies
foreach ($service in $dependentservices){
Write-Host "`r`nAnalyzing $($service.name)" -f Yellow
if($service.startmode -eq "auto"){
"Starting $($service.name)"
start-service $service.name
} else{
"$($service.name) is $($service.state) with the startmode: $($service.startmode)"
}
}
# start service
start-service $restartedService
要重新启动具有依赖项的服务,在最新版本的 PowerShell(v5 及以上版本)中,您只需包含
-Force
标志。
如下例所示,带/不带标志:
PS C:\Temp> Restart-Service -Name "nlasvc"
Restart-Service : Cannot stop service 'Network Location Awareness (nlasvc)' because it has dependent services.
It can only be stopped if the Force flag is set.
At line:1 char:1
+ Restart-Service -Name "nlasvc"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (System.ServiceProcess.ServiceController:ServiceController) [Restart-Service], ServiceCommandException
+ FullyQualifiedErrorId : ServiceHasDependentServices,Microsoft.PowerShell.Commands.RestartServiceCommand
PS C:\Temp> Restart-Service -Name "nlasvc" -Force
PS C:\Temp>
并根据 PowerShell 参考中的 Stop-Service 和 Restart-Service。
我认为我们可以结合上面其他答案的提示,(powershell 5.1)
powershell -ExecutionPolicy Bypass -Command "Restart-Service -Name spooler -Force -include (get-service spooler).dependentservices"
您可以检查之前和之后的依赖服务状态
powershell -ExecutionPolicy Bypass -Command "(get-service spooler).dependentservices"