如果我输入:
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
应该使用。
set DOTNET_CLI_TELEMETRY_OPTOUT=1
您正尝试在 PowerShell 中使用
cmd.exe
语法,但这是行不通的。
在 PowerShell 中,以上内容转换为以下内容,假设 set
是 Set-Variable
的内置别名,其第一个位置参数是 -Name
Set-Variable -Name DOTNET_CLI_TELEMETRY_OPTOUT=1
这创建了一个shell-only变量literally名为
DOTNET_CLI_TELEMETRY_OPTOUT=1
没有值($null
)。
通过 shell-only 变量我的意思是一个 常规 PowerShell 变量 只为当前 PowerShell 会话所知,并且 - 与 environment 变量不同 - 不 被 child 进程看到。
为当前进程定义环境变量,使用
$env:
命名空间:
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
您可以使用相同的语法查询值,这同样适用于 persistent 环境变量和那些仅为当前进程定义的变量:
$env:DOTNET_CLI_TELEMETRY_OPTOUT
PowerShell 提供no 直接支持定义persistent 环境变量。
使用
setx.exe
实用程序(在 Windows 上)-正如您所尝试的那样- 是一个选项。
您还可以使用 .NET API:
# '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 从注册表中检索当前持久化的值,前提是您知道其范围(
User
与 Machine
);例如:
$env:DOTNET_CLI_TELEMETRY_OPTOUT =
[Environment]::GetEnvironmentVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 'User')