【发布时间】:2021-11-12 16:51:56
【问题描述】:
使用 PS 5 的 Powershell 脚本:
运行脚本循环遍历 AD 中的所有服务器,如果指定用户在该服务器上有登录会话,则获取 sessionID。我正在使用 quser 这样做:
$sessionID = ((quser /server:$server | ? { $_ -match $username } ) -split ' +')[2]
有一些服务器正在返回:
Error 0x000006BA enumerating sessionnames
Error [1722]:The RPC server is unavailable.
我不担心这个错误的原因(这是一个帐户权限问题——不是这个问题的主题)
我要做的是在这种情况发生时捕捉;但是,即使使用 -ErrorAction Stop,它也不会被 try/catch 捕获,如果我检查 $? 它会返回 True。我试过测试 $?并将 -ErrorAction Stop 放置在管道的各个点,甚至将其减少为仅 /quser 查询,而无需尝试去除 sessionID:$sessionID = quser /server:$server -ErrorAction Stop
该错误输出也没有存储在 $SessionID 中,因此我无法在那里检查它。
如何捕获此错误输出,以便将其放置在脚本其他位置创建的状态/日志记录输出文件中?
【问题讨论】:
-
类似:
$quser = quser /server:$server 2>&1 | Out-File -FilePath C:\MyPath\here.txt? -
Quser 不是 powershell 命令,因此无法识别 -ErrorAction。尝试在 try/catch 之前设置 $erroractionpreference = ‘Stop’