我没有Chef的经验,但是为所有用户添加一些PATH环境变量的规范方法是将其附加到机器环境中的变量而不是用户环境中。在PowerShell中,你做这样的:
$path = [Environment]::GetEnvironmentVariable('PATH', 'Machine')
$path += ';%USERPROFILE%\.dnx\runtimes\dnx-coreclr-win-x64.1.0.0-rc1-update1\bin'
[Environment]::SetEnvironmentVariable('PATH', $path, 'Machine')
如果您想合并一个成一个单独的语句它会看起来有点像这样:
[Environment]::SetEnvironmentVariable('PATH', ([Environment]::GetEnvironmentVariable('PATH', 'Machine') + ';%USERPROFILE%\.dnx\runtimes\dnx-coreclr-win-x64.1.0.0-rc1-update1\bin'), 'Machine')
但是,您可能不希望简单地附加该变量可能会一直重复添加变量的路径。为了避免这种情况,你可以做这样的事情:
$dir = '%USERPROFILE%\.dnx\runtimes\dnx-coreclr-win-x64.1.0.0-rc1-update1\bin'
$path = [Environment]::GetEnvironmentVariable('PATH', 'Machine') -split ';' |
Where-Object { $_ -ne $dir }
$path += $dir
[Environment]::SetEnvironmentVariable('PATH', ($path -join ';'), 'Machine')
编辑:我刚刚意识到[Environment]::SetEnvironmentVariable()
不能在你的情况下使用。虽然该方法将变量设置为您传递给它的字符串,但该字符串将作为REG_SZ
值存储在注册表中。当查找路径时,这会阻止字符串内部的变量(如%USERPROFILE%
)被扩展,使得整个事物变得毫无意义。
为避免此陷阱,您必须确保路径存储在REG_EXPAND_SZ
值中,例如,像这样:
$regkey = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
Set-ItemProperty -Path $regkey -Name 'Path' -Value $path -Type ExpandString
完美,正是我想要的! – Scooby
%USERPROFILE%在PowerShell中失败,添加空白;路径.. – Scooby
另外,什么是$ newpath的使用?我没有看到它在任何地方被使用或生成。不断添加空白值到$ path – Scooby