我在管理员模式下从PowerShell远程运行以下命令。这将从远程计算机获取App Pool(在IIS中)的状态。
$result = Invoke-Command -ComputerName $servername -ScriptBlock {
param($appPoolName)
Get-WebAppPoolState -Name $appPoolName
} -ArgumentList $appPoolName | select value
如果我传递正确的值,我会在$result
中获取正确的数据,但如果我传递的服务器名称无效,则会收到以下错误。
"连接到远程服务器失败,并显示以下错误消息:WinRM无法处理请求。"
问题是我在$result
中没有得到任何内容,即使这不是Catch块。无法确定命令是否成功运行。
请提供有关如何在$ result中获取命令输出的任何指示。
注意:我是远程计算机上的管理员,并且已启用WinRM。
答案 0 :(得分:1)
为了捕获错误,它需要终止。您可以使用-ErrorAction Stop
强制执行此操作。
try {
$result = Invoke-Command -ComputerName $servername -ScriptBlock {
param($appPoolName)
Get-WebAppPoolState -Name $appPoolName
} -ArgumentList $appPoolName -ErrorAction Stop | select value
}
catch {
$result = [pscustomobject]@{"value"="Not Found"}
}
答案 1 :(得分:1)
添加-ErrorAction Stop
并尝试使用try / catch捕获错误,并使用$error[0]
显示上一个错误
Try{
$result = Invoke-Command -ComputerName $servername -ErrorAction Stop -ScriptBlock {
param($appPoolName)
Get-WebAppPoolState -Name $appPoolName
} -ArgumentList $appPoolName | Select-Object value
}
Catch{
$result = $error[0]
}