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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:01:01