【发布时间】:2019-01-18 04:22:25
【问题描述】:
这是我的脚本,基本上它会刷新服务,一切正常,直到Start-Sleep 25 之后的最后一次状态检查。它不断提取它收到的第一个状态(我在这个脚本中有几个检查状态,它使用第一个状态而不是重新检查它)。
例如,如果服务处于离线状态,它将使用第一次检查时获取的第一个离线状态,并在服务开启后显示。有什么方法可以让脚本重新检查状态并显示它而不是使用第一个?
$services = "RTCRGS"
$SvrName = 'CORPxxxx.xxxx.xxxx'
Get-Service -ComputerName $SvrName -Name $services | % {
Write-host "$($_.Name) on $SvrName is $($_.Status)"
if ($_.Status -eq 'stopped') {
Write-Host "Starting $($_.Name) in 5 sec..."
Start-Sleep 5
Write-Host "$($_.Name) is Starting, please wait..."
$_.Start()
Write-Host "Checking status of service, please wait for 25 sec..."
Start-Sleep 20
Write-Host "$($_.Name) on $SvrName is $($_.Status)"
} elseif ($_.Status -eq 'running') {
Write-Host "Restaring $($_.Name) in 5 sec..."
Start-Sleep 5
$_.Stop()
Start-Sleep 5
Write-Host "$($_.Name) is Starting, please wait..."
$_.Start()
Write-Host "Checking status of service, please wait for 25 sec..."
Start-Sleep 25
Write-Host "$($_.Name) on $SvrName is $($_.Status)"
}
}
【问题讨论】:
-
状态不会动态更新。它显示查询时的状态。您需要重新查询才能获得更新的状态。
-
@Ansgar Wiechers 有什么建议吗?任何例子将不胜感激
-
重新运行
Get-Service,当然,例如Get-Service -ComputerName ... | Select-Object -Expand Status -
你需要在任何你想输出更新状态的地方运行它。
-
我发现在这种情况下定义命令然后在需要时调用它最简单:在脚本开头定义它 $RetrieveServiceStatus = { (get-service -computername $SvrName -name $_. name).status} 然后每次你需要检查 If..Then..Else 结构中的状态时,你可以使用 Invoke-Command $RetrieveServiceStatus
标签: powershell scripting powershell-remoting