Как мне обработать расширение переменной Windows PATH, если оно установлено из PowerShell? - PullRequest
5 голосов
/ 23 января 2012

Я настраиваю PATH на нескольких серверах W2k3 в PowerShell, чтобы преобразовать определенные пути с пробелами в их 8,3 эквивалента. После нескольких преобразований регулярных выражений я запускаю следующие две команды:

# Set the path for this process
$env:PATH = $path
# Set the path for the Machine
[System.Environment]::SetEnvironmentVariable('PATH', $path,[System.EnvironmentVariableTarget]::Machine) 

После их запуска путь меняется так, как я не собирался. % SystemRoot% равномерно расширяется до C: \ Windows. Я не вижу, где это сигнализирует об апокалипсисе, но я бы предпочел оставить% SystemRoot%, поэтому я возился до тех пор, пока не получил% SystemRoot% для повторного появления в пути, но когда я это сделал, путь больше не расширяется и больше не работает. Повторение пути в CLI возвращает нерасширенную строку (это неправильно), и команды в SystemRoot больше не могут быть найдены.

Если я затем добавлю нулевую запись в Путь ";;", не изменяя никакого другого текста в ПУТИ, она начнет работать правильно.

Итак, мой вопрос заключается в том, как программно изменить путь, используя PowerShell, чтобы не мешать расширению переменных внутри пути?

1 Ответ

6 голосов
/ 24 января 2012

Насколько я могу судить, вы не можете сделать это с помощью метода [Environment]::SetEnvironmentVariable(), и вы не можете сделать это с поставщиком реестра. Однако вы можете получить доступ к системному Path env var в реестре, используя класс Microsoft.Win32.RegistryKey, например:

C:\PS> $key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey('SYSTEM\CurrentControlSet\Control\Session Manager\Environment', $true)
C:\PS> $path = $key.GetValue('Path',$null,'DoNotExpandEnvironmentNames')
C:\PS> $path
...;%systemroot%\System32\WindowsPowerShell\v1.0\
C:\PS> $key.SetValue('Path', $path + ';%Windir%\Symbols', 'ExpandString')
C:\PS> $key.Dispose()

Это позволит вам сохранить обновленный PATH и сохранить переменные, которые появляются в значении Path.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...