我有一个包含计算机列表的文件,我需要遍历该列表并报告是否有空。
$list = get-content "pathtofile.txt"
foreach ($computer in $list) {
try {
quser /server:$computer
} catch [System.Management.Automation.RemoteException] {
Write-Host "$computer is free"
}
}
现在它可以工作了,但是我希望捕获错误消息并将其更改为混乱的计算机名称是免费的。
目前它仍在返回
quser:*没有用户存在
在线:5字符:5
+ quser / server:$计算机
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:未指定:(不存在*:String用户)[],RemoteException
+ FullyQualifiedErrorId:NativeCommandError
对于免费的计算机。
通过在我知道是免费的计算机上运行
System.Management.Automation.RemoteException
命令,然后运行quser
,我能够获得$Error[0] | fl * -Force
:writeErrorStream:True
PSMessageDetails:
异常:System.Management.Automation.RemoteException:没有用于*的用户
TargetObject:*没有用户
CategoryInfo:未指定:(没有用户可用于*:String)[],RemoteException
FullyQualifiedErrorId:NativeCommandError
错误详情 :
InvocationInfo:System.Management.Automation.InvocationInfo
ScriptStackTrace:at,:第1行
PipelineIterationInfo:{0,0}
这给了我异常代码。
现在,我确实查看了Foreach error handling in Powershell,它显示了我的代码应该正确,因此不确定为什么捕获不起作用。
最佳答案
try {
$savePreference = $ErrorActionPreference
$ErrorActionPreference = 'Stop'
quser /server:$computer 2>&1
}
catch [System.Management.Automation.RemoteException] {
Write-Host "$computer is free"
}
finally
{
$ErrorActionPreference = $savePreference
}