cod*_*oke 6 windows powershell environment-variables
我在PowerShell中的几个W2k3服务器上调整PATH,将带有空格的某些路径转换为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)
Run Code Online (Sandbox Code Playgroud)
运行它们之后,路径会以我不想要的方式改变.%SystemRoot%统一扩展为C:\ Windows.我无法看到这表示天启的意义,但我宁愿保留%SystemRoot%,所以我摆弄,直到我让%SystemRoot%再次出现在路径中,但是当我做的路径不再扩展而不再作品.在CLI处回显路径会返回未展开的字符串(这是错误的),并且无法再找到SystemRoot中的命令.
如果我然后在路径";;"中添加一个空条目,而不改变PATH中的任何其他文本,它开始正常工作.
所以我的问题是如何使用PowerShell以编程方式改变路径,以免破坏路径中的变量扩展?
据我所知,您不能使用该[Environment]::SetEnvironmentVariable()方法执行此操作,并且您无法使用注册表提供程序执行此操作.但是,您可以使用Microsoft.Win32.RegistryKey类来访问注册表中的系统Path env var :
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值中显示的变量.
| 归档时间: |
|
| 查看次数: |
2268 次 |
| 最近记录: |