如果我输入:
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
get 当前进程的环境变量值 DOTNET_CLI_TELEMETRY_OPTOUT
(您无法从该值判断它是否反映了 persistently 定义的环境变量或为 current process 设置的环境变量仅).
使用,例如
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
来 set 它的值,但是它会生效 只对当前进程.
To persistently set a value (which is only supported on Windows), use
setx.exe
(as you tried) or use .NET APIs (see below).
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 变量 - not 被其他进程看到。
为当前进程定义环境变量,使用
$env:
命名空间:
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
您可以使用相同的语法查询值,这同样适用于 persistent 环境变量和那些仅为当前进程定义的变量:
$env:DOTNET_CLI_TELEMETRY_OPTOUT
PowerShell 提供no 直接支持定义persistent 环境变量。
使用
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 会话中看到,即只会自动显示为 process-level 那里的环境变量。
但是,您可以再次使用 .NET API 直接从注册表中检索当前持久化的值,前提是您知道其范围(
User
与 Machine
- 您可能需要同时尝试两者);例如:
[Environment]::GetEnvironmentVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 'User')