基于新的环境变量执行程序

时间:2014-02-06 17:21:35

标签: node.js powershell npm

我正在通过powershell安装nodeJS,之后我需要在PowerShell窗口中运行一些npm命令。

powershell流程只能访问流程启动时可用的环境变量,而不是安装期间添加的新创建的npm环境变量。

我以为我可以通过从我的第一个powershell脚本启动一个新的PowerShell进程来执行安装的下一部分,但这也会失败并显示消息

  

无法识别“npm”一词

这是我用来启动新PowerShell流程的行:

Start-Process powershell -ArgumentList "-NoExit", "-Command $PSScriptRoot/Part2.ps1", -UseNewEnvironment, -LoadUserProfile

(这是在Part1.ps1中)

如何运行PowerShell进程才能看到npm环境变量?

3 个答案:

答案 0 :(得分:0)

我在PSCX安装程序中看到过这个问题。它修改了一个环境变量,但PowerShell进程在用户注销并重新登录之前不会获取更改。另一种方法是从注册表中读取机器范围的环境变量值。

$path = (Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' Path).Path

答案 1 :(得分:0)

使用-WorkingDirectory的{​​{1}}参数将其指向Start-Process所在的位置。或者,您可以解析npm脚本内npm的路径。如果part1.ps1脚本与part1.ps1命令并排放置,您可以指向npm,如下所示:

npm

答案 2 :(得分:0)

我通过从注册表获取当前Path环境变量并覆盖当前进程的Path变量来解决这个问题。

$regKey = "HKLM:\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment"

$regItem = Get-ItemProperty -Path $regKey -Name Path 

$env:Path = $regItem.Path

现在,当我致电npm时,一切正常。