首页 > 解决方案 > Powershell 似乎跳过语句

问题描述

我使用 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. ----------------------------------

标签: powershellwindows-servicesinvoke-commandwrite-host

解决方案


推荐阅读