使用 Powershell 在多台计算机上重新启动任务和程序

问题描述 投票:0回答:1

我希望终止并重新启动特定任务(如果它不是在不使用 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"
  }
}
arrays powershell restart taskkill
1个回答
0
投票
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
是否会等待该操作的结果。如果没有,您可能还想在开始后和请求新状态之前添加一点延迟......

© www.soinside.com 2019 - 2024. All rights reserved.