Как запросить, если для DOTNET_CLI_TELEMETRY_OPTOUT постоянно установлено значение TRUE?

Если я ввожу:

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

что следует использовать.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
68
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

тл;др

  • Используйте $env:DOTNET_CLI_TELEMETRY_OPTOUT, чтобы получить текущее значение переменной среды процесса DOTNET_CLI_TELEMETRY_OPTOUT (из этого значения нельзя сказать, отражает ли оно постоянно определенную переменную среды или ту, которая была установлена ​​только для текущего процесса).

  • Используйте, например. $env:DOTNET_CLI_TELEMETRY_OPTOUT = 1, чтобы установить его значение, но оно будет действовать только для текущего процесса.

  • Чтобы постоянно устанавливать значение (которое поддерживается только в Windows), используйте setx.exe (как вы пытались) или используйте .NET API (см. ниже).

    • Такие постоянные обновления видны только будущим сеансам (как переменные среды на уровне процесса).
    • Однако вы можете запросить текущее сохраненное значение через .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 не должна обновляться таким образом — см. этот ответ для решения.

Большое спасибо, это решило это. Вчера, прежде чем я задал ей свой вопрос, я использовал этот [ссылка]stackoverflow.com/questions/39306618/… ответ, но этого было недостаточно.

Coder 15.04.2023 16:25

Рад это слышать, @Coder; Не за что. Да, связанный ответ ориентирован на cmd.exe и другие оболочки, а не на PowerShell.

mklement0 15.04.2023 16:36

Другие вопросы по теме