3 回答

TA貢獻2080條經驗 獲得超4個贊
感謝您發布這個非常有趣的問題,即使在2019年(事實上,更新shell cmd并不容易,因為它是如上所述的單個實例),因為在Windows中更新環境變量可以完成許多自動化任務而無需必須手動重啟命令行。
例如,我們使用它來允許在我們定期重新安裝的大量機器上部署和配置軟件。我必須承認,在部署我們的軟件期間不得不重新啟動命令行是非常不切實際的,并且需要我們找到不一定令人愉快的解決方法。讓我們來解決我們的問題。我們按如下方式進行。
1 - 我們有一個批處理腳本,它反過來調用這樣的powershell腳本
[file:task.cmd]。
CMD > powershell.exe -executionpolicy unrestricted -File C:\path_here\refresh.ps1
2 - 此后,refresh.ps1腳本使用注冊表項(GetValueNames()等)更新環境變量。然后,在相同的PowerShell腳本中,我們只需調用新的環境變量即可。例如,在典型的情況下,如果我們之前使用靜默命令安裝了nodeJS,則在調用該函數之后,我們可以直接調用npm在同一會話中安裝如下的特定軟件包。
[file:refresh.ps1]
function Update-Environment { $locations = 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment', 'HKCU:\Environment' $locations | ForEach-Object { $k = Get-Item $_ $k.GetValueNames() | ForEach-Object { $name = $_ $value = $k.GetValue($_) if ($userLocation -and $name -ieq 'PATH') { $env:Path += ";$value" } else { Set-Item -Path Env:\$name -Value $value } } $userLocation = $true }}Update-Environment#Here we can use newly added environment variables like for example npm install.. npm install -g create-react-app serve
powershell腳本結束后,cmd腳本繼續執行其他任務?,F在,要記住的一件事是,在任務完成后,cmd仍然無法訪問新的環境變量,即使powershell腳本已在其自己的會話中更新了這些變量。這就是為什么我們在powershell腳本中執行所有需要的任務,當然可以調用與cmd相同的命令。
- 3 回答
- 0 關注
- 5335 瀏覽
添加回答
舉報