我使用 PS 脚本来控制远程机器上的服务。这基本上有效。
真正让我感到困惑的是,有时脚本块中第二条Write-Host
语句的输出会在日志中丢失。日志看起来好像它没有被执行。脚本块的以下语句将按应有的方式执行。
我怀疑正是这种情况让我最终陷入了catch
通话障碍,因为我没有任何其他错误指示。
你能帮我理解为什么我在脚本块中看不到第二条Write-Host
语句的输出吗?
我怀疑该Stop-Service
语句失败,尽管我在控制台输出中没有看到问题。
导致语句失败的原因可能是什么,Invoke-Script
所以我最终进入了catch
块,尽管它一直执行到最后一条语句?
- 谢谢!
$scriptblock = {
[...]
$service=Get-Service -Name $Using:CoreServerServiceName -ErrorAction Ignore
Write-Host "INFO: Stopping $($service.DisplayName), status $($service.Status) ..."
Stop-Service $service
Write-Host "INFO: Service $($service.DisplayName) is now $($service.Status)." # SKIPPED?
Write-Host "INFO: Sleeping 5 s before checking process..."
[...]
Write-Host "INFO: Starting $($service.DisplayName) ..."
Start-Service $service
Write-Host "INFO: Service $($service.DisplayName) is now $($service.Status)."
}
try {
Write-Host "INFO: Invoking preparation script on remote machine... --------------------------------"
$result = Invoke-Command -ComputerName $vm.Guest.IPAddress[0] -Credential $cred -ErrorAction Stop -ScriptBlock $scriptblock
Write-Host "INFO: result: $result"
Write-Host "INFO: Preparation script succeeded on remote machine. ---------------------------------"
} catch {
Write-Host "WARNING: result: $result"
Write-Error "ERROR: Preparation script failed on remote machine. ----------------------------------"
exit 1
}
正常时输出:
08:45:25 INFO: Stopping DisplayName ...
08:45:27 WARNING: Waiting for service 'DisplayName (ServiceName)' to stop...
08:45:29 WARNING: Waiting for service 'DisplayName (ServiceName)' to stop...
08:45:31 WARNING: Waiting for service 'DisplayName (ServiceName)' to stop...
08:45:34 WARNING: Waiting for service 'DisplayName (ServiceName)' to stop...
08:45:36 WARNING: Waiting for service 'DisplayName (ServiceName)' to stop...
08:45:36 INFO: Service DisplayName is now Stopped.
08:45:36 INFO: Sleeping 5 s before checking process...
[...]
08:46:47 INFO: Starting DisplayName ...
08:46:54 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:46:57 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:46:59 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:47:01 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:47:03 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:47:05 INFO: Service DisplayName is now Running.
08:47:05 INFO: result:
08:47:05 INFO: Preparation script succeeded on remote machine. ---------------------------------
如果 NOK 则输出:
08:55:04 INFO: Stopping DisplayName ...
08:55:07 WARNING: Waiting for service 'DisplayName (ServiceName)' to stop...
08:55:09 INFO: Sleeping 5 s before checking process...
[...]
08:56:31 INFO: Starting DisplayName ...
08:56:34 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:56:36 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:56:38 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:56:40 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:56:42 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:56:44 WARNING: Waiting for service 'DisplayName (ServiceName)' to start...
08:56:45 INFO: Service DisplayName is now Running.
08:56:45 WARNING: result:
08:56:46 Prepare-TestVM : ERROR: Preparation script failed on remote machine. ----------------------------------