Если я ввожу:
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
что следует использовать.
тл;др
Используйте $env:DOTNET_CLI_TELEMETRY_OPTOUT
, чтобы получить текущее значение переменной среды процесса DOTNET_CLI_TELEMETRY_OPTOUT
(из этого значения нельзя сказать, отражает ли оно постоянно определенную переменную среды или ту, которая была установлена только для текущего процесса).
Используйте, например. $env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
, чтобы установить его значение, но оно будет действовать только для текущего процесса.
Чтобы постоянно устанавливать значение (которое поддерживается только в Windows), используйте setx.exe
(как вы пытались) или используйте .NET API (см. ниже).
Что касается того, что вы пробовали:
set DOTNET_CLI_TELEMETRY_OPTOUT=1
Вы пытаетесь использовать синтаксис cmd.exe
в PowerShell, что не сработает.
В PowerShell вышеизложенное переводится в следующее, учитывая, что set
— это встроенный псевдоним Set-Variable, первым позиционным параметром которого является -Name
Set-Variable -Name DOTNET_CLI_TELEMETRY_OPTOUT=1
Это создает переменную оболочки, буквально названную DOTNET_CLI_TELEMETRY_OPTOUT=1
без значения ($null
).
Под переменной оболочки я подразумеваю обычную переменную PowerShell, которая известна только текущему сеансу PowerShell и, в отличие от переменных среды, не видна другим процессам.
Чтобы определить переменную среды для текущего процесса, используйте пространство имен $env:
:
$env:DOTNET_CLI_TELEMETRY_OPTOUT = 1
Вы можете запросить значение с тем же синтаксисом, который одинаково работает как для постоянных переменных среды, так и для переменных, определенных только для текущего процесса:
$env:DOTNET_CLI_TELEMETRY_OPTOUT
PowerShell не предлагает прямой поддержки определения постоянных переменных среды.
Использование утилиты 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')
Обратите внимание, однако, что в обоих случаях новое/обновленное значение будет видно только в будущих сеансах, т. е. будет автоматически отображаться там только как переменные среды уровня процесса.
Однако вы можете снова использовать API-интерфейсы .NET для извлечения текущего сохраненного значения непосредственно из реестра, предполагая, что вы знаете его область действия (User
против Machine
— возможно, вам придется попробовать оба варианта); например.:
[Environment]::GetEnvironmentVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 'User')
Примечание:
Ни один из двух методов постоянного обновления не подходит для обновления определений постоянных переменных среды на основе REG_EXPAND_SZ
, то есть выраженных в терминах других переменных среды.
Примечательно, что это означает, что переменная среды PATH
не должна обновляться таким образом — см. этот ответ для решения.
Рад это слышать, @Coder; Не за что. Да, связанный ответ ориентирован на cmd.exe
и другие оболочки, а не на PowerShell.
Большое спасибо, это решило это. Вчера, прежде чем я задал ей свой вопрос, я использовал этот [ссылка]stackoverflow.com/questions/39306618/… ответ, но этого было недостаточно.