シェフの経験はありませんが、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
の値(例: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