我正在通过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
环境变量?
答案 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
时,一切正常。