You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell的Try/Catch块中捕获无法翻译的SID值?

解决PowerShell中无法显示未翻译SID的问题

你可以通过在catch块中保留当前处理的SID来显示无法翻译的条目,不需要依赖$_.Exception.TargetObject(这个属性在这里确实为空)。只需要在循环时先把SID存到变量里,捕获异常时直接输出该变量即可。

修改后的脚本如下:

$currentUser = [System.Security.Principal.WindowsIdentity]::GetCurrent() | Select-Object Name, @{n='Groups';e={
    $_.Groups | Foreach-Object {
        # 先保存当前SID,避免异常后无法获取
        $currentSid = $_.Value
        try {
            # 成功翻译时,输出名称+SID
            "$($_.Translate([System.Security.Principal.NTAccount]).Value) ($currentSid)"
        }
        catch {
            # 翻译失败时,明确提示并输出SID
            "无法翻译的SID: $currentSid"
        }
    }
}} | ConvertTo-Html -As List -Fragment

关键改动说明

  • 在循环每个组对象时,先将SID存入$currentSid变量,确保即使Translate抛出异常,也能访问到对应的SID。
  • 移除Out-Null,改为在catch中返回包含SID的提示文本,这样生成的HTML片段会显示出所有组,包括无法翻译的SID条目。

关于用if/else替代try/catch:实际上没有直接的API可以提前判断一个SID是否能被翻译成NTAccount,所以try/catch是最简洁高效的处理方式。如果非要用条件判断,本质还是需要尝试翻译并捕获结果,反而不如直接用try/catch清晰。

内容的提问来源于stack exchange,提问作者Qwerty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:52:09