gpt4 book ai didi

windows - 从 PowerShell 设置时如何处理 Windows PATH 变量扩展?

转载 作者:可可西里 更新时间:2023-11-01 13:24:17 24 4
gpt4 key购买 nike

我正在 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)

运行它们之后,路径以我不希望的方式改变了。 %SystemRoot%统一扩展为C:\Windows。我看不出这是世界末日的信号,但我宁愿保留 %SystemRoot%,所以我摆弄直到我让 %SystemRoot% 再次出现在路径中,但是当我这样做时,路径不再扩展并且不再作品。在 CLI 中回显路径会返回一个未扩展的字符串(这是错误的),并且无法再找到 SystemRoot 中的命令。

如果我随后向路径“;;”添加一个空条目,而不更改路径中的任何其他文本,它就会开始正常工作。

所以我的问题是如何使用 PowerShell 以编程方式更改路径,以免弄乱路径中的变量扩展?

最佳答案

据我所知,您不能使用 [Environment]::SetEnvironmentVariable() 方法执行此操作,也不能使用注册表提供程序执行此操作。但是,您可以使用 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 值中的变量。

关于windows - 从 PowerShell 设置时如何处理 Windows PATH 变量扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8975234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com