PowerShell调用btp.exe命令时如何捕获执行成功/失败的状态消息?
PowerShell捕获btp.exe执行状态的解决方案
问题原因
你当前的赋值语句仅会捕获btp.exe输出的*标准输出流(stdout)*内容,而OK/FAILED状态提示默认打印在标准错误流(stderr),因此不会被存入$roledetails变量,会直接输出到控制台。
解决方法
方法1:合并所有输出流统一捕获(推荐)
将标准输出、标准错误等所有流合并到标准输出后存入变量,后续可直接从变量中匹配状态标识:
# *>&1 代表将所有输出流合并到标准输出流 $roledetails = ./btp get security/role-collection "$Role" *>&1 | Out-String # 判断执行状态 if ($roledetails -match 'OK') { # 执行成功逻辑,可直接从$roledetails中提取业务结果 } elseif ($roledetails -match 'FAILED') { # 执行失败逻辑 }
方法2:通过外部程序退出码判断
btp.exe作为标准CLI工具,执行成功时会返回退出码0,失败时返回非0值,PowerShell会自动将外部程序的退出码存入内置变量$LASTEXITCODE,可直接通过该变量判断状态,无需解析输出内容。如果需要同时捕获失败场景下的错误详情,在执行命令时添加*>&1即可:
# 执行命令并将所有输出(含状态提示、错误信息)存入$roledetails变量 $roledetails = ./btp get security/role-collection "$Role" *>&1 | Out-String $execExitCode = $LASTEXITCODE if ($execExitCode -eq 0) { # 执行成功,状态为OK } else { # 执行失败,状态为FAILED }
内容的提问来源于stack exchange,提问作者Lord OfTheRing
相关产品推荐
相关产品推荐

