如果我输入:
set DOTNET_CLI_TELEMETRY_OPTOUT=1
或
setx DOTNET_CLI_TELEMETRY_OPTOUT 1
要永久保存此设置,则应将设置 DOTNET_CLI_TELEMETRY_OPTOUT 设置为 True,但如何查询它?
没有
get DOTNET_CLI_TELEMETRY_OUTPUT
命令。 并且
echo $DOTNET_CLI_TELEMETRY_OPTOUT
仅给出 1,如果
set DOTNET_CLI_TELEMETRY_OPTOUT 1
输入的是
set DOTNET_CLI_TELEMETRY_OPTOUT=1
应该使用它。
最佳答案
tl;博士
使用
$env:DOTNET_CLI_TELEMETRY_OPTOUT
来获取当前进程的环境变量DOTNET_CLI_TELEMETRY_OPTOUT
值(你无法从该值是否反射(reflect)持久定义的环境变量或仅为当前进程设置的环境变量)。使用,例如
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
来设置其值,但它仅对当前进程有效。要持久设置一个值(仅在 Windows 上受支持),请使用
setx.exe
(正如您所尝试的那样)或使用 .NET API(请参阅如下)。- 此类持久更新仅对 future session 可见(作为进程级环境变量)。
- 不过,您可以通过 .NET API 查询当前保留的值(见下文)。
至于你尝试过的:
set DOTNET_CLI_TELEMETRY_OPTOUT=1
您尝试在 PowerShell 中使用 cmd.exe
语法,但该语法不起作用。
在 PowerShell 中,鉴于 set
是 Set-Variable
的内置别名,以上内容将转换为以下内容: ,其第一个位置参数是 -Name
Set-Variable -Name DOTNET_CLI_TELEMETRY_OPTOUT=1
这将创建一个仅用于 shell 的变量字面上,名为 DOTNET_CLI_TELEMETRY_OPTOUT=1
没有值( $null
)。
所谓的仅shell变量我的意思是regular PowerShell variable仅当前 PowerShell session 知道,并且与环境变量不同 - 不会被其他进程看到。
定义 environment variable 对于当前进程,使用$env:
命名空间:
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
您可以使用相同的语法查询该值,这对于持久环境变量和仅为当前进程定义的环境变量同样适用:
$env:DOTNET_CLI_TELEMETRY_OPTOUT
PowerShell 不提供对定义持久环境变量的直接支持。
使用 setx.exe
实用程序(在 Windows 上) - 正如您所尝试的 - 是一个选项。
您还可以使用.NET APIs :
# 'User' creates / updates a persistent definition for the *current user*.
# Use 'Machine' to create / update a machine-level definition, but
# note that doing so requires *elevation* (running as admin).
[Environment]::SetEnvironmentVariable('DOTNET_CLI_TELEMETRY_OPTOUT', '1', 'User')
但是请注意,在这两种情况下,新的/更新的值只会在 future session 中看到,即只会自动显示为进程级环境变量.
但是,您可以再次使用 .NET API 直接从注册表检索当前保留的值,前提是您知道其范围(User
与 Machine
- 您可能必须两者都尝试);例如:
[Environment]::GetEnvironmentVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 'User')
注意:
这两种持久更新方法都不适合更新基于
REG_EXPAND_SZ
的持久环境变量定义,即以其他环境变量表示的定义.值得注意的是,这意味着
PATH
环境变量不应以这种方式更新 - 请参阅 this answer寻求解决方案。
关于.net - 如何查询DOTNET_CLI_TELEMETRY_OPTOUT是否永久设置为TRUE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76019424/