windows 如何查询DOTNET_CLI_TELEMETRY_OPTOUT是否永久设置为TRUE?

rsaldnfx  于 2023-04-22  发布在  Windows
关注(0)|答案(1)|浏览(205)

如果我进入:

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

应该被使用。

jmo0nnb3

jmo0nnb31#

tl;dr

  • 使用$env:DOTNET_CLI_TELEMETRY_OPTOUT来 * 获取 * 当前进程的环境变量DOTNET_CLI_TELEMETRY_OPTOUT的值(你不能从这个值中分辨出它是反映了一个 * 持久地 * 定义的环境变量还是只为 * 当前进程 * 设置的环境变量)。
  • 例如,使用$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1来 * 设置 * 它的值,但它只对当前进程有效 *。
  • 要 * 持久地 * 设置一个值(仅在Windows上支持),请使用setx.exe(如您所试)或使用.NET API(见下文)。
  • 这种持久更新只对 future 会话可见(作为进程级环境变量)。
  • 但是,您可以通过.NET API查询当前持久化的值(参见下文)。

set DOTNET_CLI_TELEMETRY_OPTOUT=1
您正在尝试在PowerShell中使用cmd.exe语法,这将不起作用。在PowerShell中,上面的内容将转换为以下内容,假定setSet-Variable的内置别名,其第一个位置参数是-Name

Set-Variable -Name DOTNET_CLI_TELEMETRY_OPTOUT=1

这将创建一个名为DOTNET_CLI_TELEMETRY_OPTOUT=1 * 的 * shell专用 * 变量 *,但没有值 *($null)。
通过 shell-only 变量,我的意思是只有当前PowerShell会话知道的regular PowerShell variable,并且与 environment 变量不同,其他进程看不到。
要为当前进程 * 定义environment variable *,请使用$env:命名空间:

$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1

您可以使用相同的语法查询值,这对于 persistent 环境变量和仅为当前进程定义的环境变量同样有效:

$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 会话中看到,即将仅自动显示为 * 进程级 * 环境变量。
但是,您可以再次使用.NET API直接从注册表中检索当前持久化的值,假设您知道其范围(UserMachine-您可能必须尝试两者);例如:

[Environment]::GetEnvironmentVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 'User')

相关问题