我希望终止并重新启动特定任务(如果它不是在不使用 WinRM 或 pskill 的情况下在多台远程计算机上运行)。我想出了以下代码。当任务在所有机器上运行时,我会得到computer1 Service is running、computer2 Service is Running等。当服务未运行时(陷入挂起状态似乎是最大的罪魁祸首),脚本将出错。如果通过 #'ing 排除所有其他机器来单一瞄准一台机器,它会工作得很好。我有另一个脚本告诉我哪些机器正在运行以及哪些机器没有/待处理。
$ComputerName =
'computer1'
'computer2',
'computer3',
'computer4',
'computer5',
'computer6',
'computer7',
'computer8'
Foreach ($Computer in $ComputerName)
{
$ServiceName = 'name'
$ServiceInfo = Get-Service -Name $ServiceName -ComputerName $ComputerName
if ($ServiceInfo.status -eq 'Running') {
Write-Host $Computer 'Service is Running'
}
While ($ServiceInfo.status -ne 'Running') {
taskkill /s $ComputerName /IM 'ApacheWebServices.exe' /F
Write-Host $ServiceInfo.Status
$ServiceInfo | Set-Service -status Running
Write-Host "Service starting"
}
}
While ($ServiceInfo.status -ne 'Running') {
taskkill /s $ComputerName /IM 'ApacheWebServices.exe' /F
Write-Host $ServiceInfo.Status
$ServiceInfo | Set-Service -status Running
Write-Host "Service starting"
}
将陷入终止并启动服务的无限循环,因为您从未更新
$ServiceInfo
,因此 $ServiceInfo.status
将卡在初始读数中。
在此循环中您需要添加的最少内容是
While ($ServiceInfo.status -ne 'Running') {
taskkill /s $ComputerName /IM 'ApacheWebServices.exe' /F
Write-Host $ServiceInfo.Status
$ServiceInfo | Set-Service -status Running
Write-Host "Service starting"
# Request a new service status
$ServiceInfo = Get-Service -Name $ServiceName -ComputerName $ComputerName
}
此外,我不确定
Set-Service
是否会等待该操作的结果。如果没有,您可能还想在开始后和请求新状态之前添加一点延迟......