Sie müssen dies tun, da der Prozess env beim Start bekommt Vars, nicht beim Laufen (dh würden Sie habe Shell neu starten, damit diese den Weg zur Arbeit):
[Environment]::SetEnvironmentVariable("X", "Y", "Machine")
$Env:X = "Y"
Es gibt auch eine Möglichkeit, dies auf andere Fenster zu übertragen mit WM_SETTINGCHANGE
Um eine Änderung in den Umgebungsvariablen für das System zu bewirken oder die Benutzer, übertragen diese Meldung mit lParam auf den String gesetzt "Umwelt".)
# 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
}