【问题标题】:PowerShell script - check for exit codePowerShell 脚本 - 检查退出代码
【发布时间】:2018-03-21 00:18:00
【问题描述】:

我有以下脚本:

foreach ($server in $ProductList.$SelectedServer) {
    Invoke-Command -ComputerName $server -Credential domain\user -ScriptBlock {
        Import-Module WebAdministration
        echo "restarting AppPool $args[0] ... on $args[1]"
        Restart-WebAppPool -Name $args[0] -ErrorAction Stop
        echo "Restarted WebApp $args[0] on $args[1]"
    }
} -ArgumentList $SelectedAppPool, $Server

我想检查Restart-WebAppPool 命令是否成功执行。如果是,我会回显“它有效”,否则会回显“它不起作用”。

目标是提供简单明了的英文消息,而不是典型的未处理异常。

【问题讨论】:

  • 您发布的代码不可能工作。 foreach 循环没有参数 -ArgumentList
  • @AnsgarWiechers 是的,必须将其移至 Invoke-Command 部分。谢谢你

标签: powershell if-statement iis powershell-remoting


【解决方案1】:

理论上,您已经完成了大部分工作,我不知道在什么情况下 Restart-WebAppPool 会引发终止错误,但要对它们执行任何操作,您需要尝试/catch 块:

try {
    Restart-WebAppPool -Name $args[0] -ErrorAction stop
    Write-Host "It worked"
} catch {
    Write-Host "It did not work"
    # Error handling goes here.
}

只有在Restart-WebAppPool 没有抛出终止错误时才会显示“它工作”输出

【讨论】:

  • 除此之外,@Joe,您可能希望发送一个 PSCredential 对象,而不仅仅是一个用户名作为 -Credential 的参数。否则,在 for 循环中,您将不得不在迭代时多次输入密码。
  • 感谢@Windos。那成功了。只是为了澄清。 try/catch 是否真的执行了 try 部分中的代码块?还是只是简单地尝试一下 /dry run ?
  • @joebegborg07 它实际上会执行它,但是一旦遇到终止错误就会停止并直接跳转到 catch 块(因此,如果有错误。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多