.net - 如何查询DOTNET_CLI_TELEMETRY_OPTOUT是否永久设置为TRUE?

标签 .net windows powershell settings

如果我输入:

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 中,鉴于 setSet-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 直接从注册表检索当前保留的值,前提是您知道其范围(UserMachine - 您可能必须两者都尝试);例如:

[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/

相关文章:

.net - 使用 Prism 动态创建区域

windows - 为什么我在 Visual Studio 2012 中没有收到 64 位警告,除非我打开 "deprecated"编译器开关?

c++ - 全屏原始分辨率下的 OpenGL 撕裂

powershell - 在 powershell 中使用 get-aduser 指定域 Controller

powershell - 从PowerShell设置Visual Studio环境变量

powershell - Scope vs Runspace vs Session vs AppDomain

比较相同字符串时,C# IComparer 返回意外结果

c# - 在 Code First 的情况下使用 MetadataType 强制执行验证是否有意义?

java - 使用 java 通过 TransportWithMessageCredentials (UserName) 访问 WCF 服务

c++ - 在 Windows 或 Linux 上运行时函数的行为不同