PowerShell赋值变量时抑制dotnet user-secrets的控制台输出
问题:抑制dotnet user-secrets错误输出并保留变量赋值
我在PowerShell脚本中执行以下命令:
$settingsFile = dotnet user-secrets list -p "..\$project"
其中$project是指向.csproj文件的字符串变量。当项目未配置用户机密时,命令执行失败,控制台会输出错误信息:
Could not find the global property 'UserSecretsId' in MSBuild project '<PATH_TO_CSPROJ>.csproj'. Ensure this property is set in the project or use the '--id' command line option.
我需要抑制该错误输出,同时正常为$settingsFile变量赋值。但尝试了以下方法都无效:
Try-catch块
try { $settingsFile = dotnet user-secrets list -p "..\$project"} catch{ }无任何效果,错误信息依然输出。
使用
Out-Null重定向$settingsFile = dotnet user-secrets list -p "..\$project" | Out-Null错误信息仍会显示,没有起到抑制作用。
结合
2>&1和Out-Null$settingsFile = dotnet user-secrets list -p "..\$project" 2>&1 | Out-Null虽然阻止了错误输出,但
$settingsFile也无法被赋值。
解决方案
要实现既抑制错误输出,又保留正常输出到变量的目标,可以通过单独重定向错误流到$null,同时保留标准输出赋值给变量:
$settingsFile = dotnet user-secrets list -p "..\$project" 2>$null
原理说明:
2>$null表示将错误流(编号2)重定向到空设备,错误信息不会输出到控制台。- 标准输出(编号1)不受影响,依然会被捕获并赋值给
$settingsFile变量。
如果需要同时处理执行失败的逻辑(比如给变量赋默认值),可以结合$LASTEXITCODE变量判断命令执行状态:
$settingsFile = dotnet user-secrets list -p "..\$project" 2>$null if ($LASTEXITCODE -ne 0) { # 自定义失败后的处理逻辑,例如赋空数组作为默认值 $settingsFile = @() }
内容的提问来源于stack exchange,提问作者Rich_Rich
相关产品推荐
相关产品推荐

