次のコードでは、期待どおりに "Y"が返されません。次のセッション(別の新しいウィンドウ)でのみ動作しますか?すぐに利用できると思いますか?Powershellで設定した後、マシンレベルの環境変数を使用できません。
[Environment]::SetEnvironmentVariable("X", "Y", "Machine")
Write-Host $env:X
次のコードでは、期待どおりに "Y"が返されません。次のセッション(別の新しいウィンドウ)でのみ動作しますか?すぐに利用できると思いますか?Powershellで設定した後、マシンレベルの環境変数を使用できません。
[Environment]::SetEnvironmentVariable("X", "Y", "Machine")
Write-Host $env:X
:
[Environment]::SetEnvironmentVariable("X", "Y", "Process") # for the current session
注:あなたはおそらく両方を設定する必要がしかし、あなたは使用して変更することができます)これはあなたのように動作するため、シェルを再起動する必要があります。
[Environment]::SetEnvironmentVariable("X", "Y", "Machine")
$Env:X = "Y"
を使用して他のウィンドウにこれをブロードキャストする方法もありますlParamにしてこのメッセージを放送するシステムや ユーザーの環境変数の変化を、効果に
文字列 「環境」に設定してください。)
# Notify system of change via WM_SETTINGCHANGE
if (! ("Win32.NativeMethods" -as [Type]))
{
Add-Type -Namespace Win32 -Name NativeMethods -MemberDefinition @"
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessageTimeout(IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam, uint fuFlags, uint uTimeout, out UIntPtr lpdwResult);
"@
}
$HWND_BROADCAST = [IntPtr] 0xffff; $WM_SETTINGCHANGE = 0x1a; $result = [UIntPtr]::Zero
[Win32.Nativemethods]::SendMessageTimeout($HWND_BROADCAST, $WM_SETTINGCHANGE, [UIntPtr]::Zero, "Environment", 2, 5000, [ref] $result) | out-null
}
私が知る限り、プロセスは環境変数を1回だけ(開始時に)読み込みます。プロセスはENVは、あなたが(すなわちでしょう実行していない一方で、起動時にvarsの取得以来、あなたはこれを行う必要があり
[Environment]::SetEnvironmentVariable("X", "Y", "Machine")
[Environment]::SetEnvironmentVariable("X", "Y", "Process")