代码之家  ›  专栏  ›  技术社区  ›  burki

创建具有可扩展值的用户环境变量

  •  1
  • burki  · 技术社区  · 8 年前

    我可以创造一个 用户环境变量 powershell脚本 (Windows 10)很容易。

    [System.Environment]::SetEnvironmentVariable('name', 'value', 'User')
    

    当变量应该 包含另一个用户环境变量 喜欢 %OTHERVAR%;static_part ,我发现类型必须是 ExpandString . 这可以按如下方式进行

    Set-ItemProperty HKCU:\Environment 'name' 'value' -Type ExpandString
    

    所以,我写了下面的代码

    [System.Environment]::SetEnvironmentVariable('M2_HOME', 'C:\dev\app\apache-maven-3.3.9', 'User')
    # special treatment to get expandable type
    Set-ItemProperty HKCU:\Environment 'PATH' '%M2_HOME%\bin;C:\Users\UID20852\AppData\Local\Microsoft\WindowsApps;' -Type ExpandString
    
    Write-Host ([System.Environment]::GetEnvironmentVariable('M2_HOME', 'User'))
    Write-Host ([System.Environment]::GetEnvironmentVariable('PATH', 'User'))
    Write-Host 
    

    输出:

    C:\dev\app\apache-maven-3.3.9
    C:\dev\app\apache-maven-3.3.9\bin;C:\Users\UID20852\AppData\Local\Microsoft\WindowsApps;
    

    一切看起来都很好,两个变量都存在。当我打开windows控件来编辑用户环境变量时,我看到两个变量,path的值被展开。即使在 regedit 我知道变量的类型是正确的。

    但是,当我 打开一个新的 cmd 并尝试从 %M2_HOME%\bin (应该在 PATH 现在),它 失败 .

    要手动解决此问题,只需打开windows控件编辑用户环境变量,双击 路径 变量, 不编辑任何内容 ,然后再关闭它(我想它会重新写入)。

    然后,在一个新的 CMD ,然后我可以从 %M2 U HOME%\bin住宅 .

    你知道我怎么做吗 路径 变量只通过脚本工作?

    1 回复  |  直到 8 年前
        1
  •  0
  •   burki    8 年前

    向“小慈悲”致敬。他的回答是 第一个前缀 PATH 使用占位符字符串的变量,然后创建环境变量 完成占位符 工作得很好。

    # special treatment to get expandable type
    Set-ItemProperty HKCU:\Environment 'PATH' '%M2_HOME%\bin;C:\Users\UID20852\AppData\Local\Microsoft\WindowsApps;' -Type ExpandString
    [System.Environment]::SetEnvironmentVariable('M2_HOME', 'C:\dev\app\apache-maven-3.3.9', 'User')
    

    如果我理解他在注释中的解释是正确的,因为“normal”变量的创建会触发一个事件,该事件会立即用占位符更新变量。所以在剧本完成后它就开始工作了。

    推荐文章