PowerShell中捕获GAM whatis命令输出异常问题求助
解决PowerShell中GAM whatis命令身份信息无法捕获的问题
GAM输出的那部分身份判断信息,大概率是直接输出到PowerShell的**控制台宿主(Host)**而非标准输出(stdout)或标准错误(stderr),所以常规的变量赋值、重定向都抓不到。试试下面几种实用方法:
方法1:用转录命令捕获所有控制台输出
PowerShell的Start-Transcript会记录所有控制台显示的内容,包括直接写给Host的信息,步骤如下:
# 启动转录,指定输出文件(存在则覆盖) Start-Transcript -Path "C:\temp\gam_capture.txt" -Force # 执行GAM whatis命令 gam whatis target@yourdomain.com # 停止转录 Stop-Transcript # 把转录内容读入变量 $gamFullOutput = Get-Content "C:\temp\gam_capture.txt" -Raw # 提取身份信息示例(比如匹配开头的User/Alias/Group行) $identityInfo = $gamFullOutput | Select-String -Pattern "^(User|Alias|Group):" -List | ForEach-Object { $_.Line }
这个方法能完整捕获所有控制台显示的内容,包括你之前抓不到的身份判断行。
方法2:尝试调整GAM命令参数
部分GAM版本支持通过参数,把原本输出到控制台的信息切换到标准输出。可以试试加--verbose或--stdout参数(不同版本参数可能有差异):
$gamOutput = gam whatis target@yourdomain.com --verbose 2>&1
如果参数生效,原本的身份信息会被重定向到stdout/stderr,就能被变量捕获了。
方法3:用Start-Process强制重定向输出
如果前两种方法都不行,试试用系统级的进程重定向,能捕获更多直接调用Win32 API输出的内容:
Start-Process -FilePath "gam.exe" -ArgumentList "whatis target@yourdomain.com" -NoNewWindow -RedirectStandardOutput "C:\temp\gam_out.txt" -RedirectStandardError "C:\temp\gam_err.txt" -Wait # 读取输出文件内容 $stdoutContent = Get-Content "C:\temp\gam_out.txt" -Raw $stderrContent = Get-Content "C:\temp\gam_err.txt" -Raw
内容的提问来源于stack exchange,提问作者Ryan London
相关产品推荐
相关产品推荐

