powershell - 在 Powershell 中设置后机器级环境变量不可用

标签 powershell environment-variables powershell-4.0

以下代码未按预期返回“Y”。仅在下一个 session (另一个新窗口)中才有效?我希望它立即可用?

    [Environment]::SetEnvironmentVariable("X", "Y", "Machine")
    Write-Host $env:X

最佳答案

您必须这样做,因为进程在启动时获取环境变量,而不是在运行时获取环境变量(即您必须重新启动 shell 才能使其按您的方式工作):

 [Environment]::SetEnvironmentVariable("X", "Y", "Machine")
 $Env:X = "Y"

还有一种方法可以使用 WM_SETTINGCHANGE 将其广播到其他窗口

To effect a change in the environment variables for the system or the user, broadcast this message with lParam set to the string "Environment".)

# 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
}

关于powershell - 在 Powershell 中设置后机器级环境变量不可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36911556/

相关文章:

powershell - 为什么在 Powershell 的内置类型上使用 add-member 会发生这种奇怪的行为?

linux - 使用 node.js 解析 word 文档中的表格

powershell - 如何通过powershell删除文件夹的只读属性?

Powershell 在控制台和文件中都显示消息

powershell - 通过网络Powershell命令发现OS版本而不是Windows 10 1809

regex - 使用正则表达式在模式中查找文本

java - Spring Boot 2.1.3.RELEASE : Not able to read environment properties from application. 属性

swift - 如何使用特定目标运行 Xcode UI 测试

c++ - 如何在C++中添加环境变量?

powershell - 将文件复制到文件夹和所有子文件夹中