2

Рассмотрим следующий ключ в качестве примера.

HKEY_CLASSES_ROOT\txtfile\shell\open\command

и его (Default) значение

%SystemRoot%\system32\NOTEPAD.EXE %1

Это значение определяет, что произойдет, если дважды щелкнуть файл .txt . %SystemRoot% и %1 являются переменными, которые могут интерпретироваться cmd.exe . Эквивалентная команда в PowerShell будет выглядеть

$env:SystemRoot\system32\NOTEPAD.EXE $args[0]

Однако, если вы установите значение реестра в эквивалент Powershell, это приведет только к ошибке, поскольку его пытается интерпретировать cmd.exe , а не PowerShell. Можно ли настроить Windows таким образом, чтобы PowerShell был интерпретатором вместо cmd.exe?

1 ответ1

3

Нет, вы не можете настроить Windows на использование переменных реестра PowerShell в реестре. Это может привести к серьезным изменениям во многих приложениях, поскольку cmd.exe не единственный, кто может расширять переменные среды.

Например, вы можете расширить переменные среды с помощью .NET с помощью:

[Environment]::ExpandEnvironmentVariables('%SystemRoot%\system32\NOTEPAD.EXE %1')

Вы также можете ввести %HOME% в run dialong (Win+R) или в адресной строке Windows Explorer, чтобы открыть свой домашний каталог. Ни один из них не использует cmd.exe для расширения переменных.

Сторонние приложения также могут анализировать сами строки и искать значения в реестре. Из-за заботы Microsoft о обратной совместимости, я сомневаюсь, что Windows изменит способ хранения переменных среды в реестре.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .