我已經下載了exercism CLI并將其添加到 PATH。我可以exercism通過 cmd使用命令訪問它,但是在 Windows Powershell 上,它給了我它無法識別命令的錯誤。
Powershell 使用了一些不同的環境變數還是我遺漏了什么。



uj5u.com熱心網友回復:
一般來說:
- PowerShell 尊重
Path環境變數中的條目的方式cmd與.- 這些殼僅相對于不同來執行位于可執行檔案當前目錄(假設它沒有列
Path):cmd.exe允許執行由名稱僅(例如,exercism),而PowerShell中,作為安全特征,需要使用的路徑來明確信號意圖(例如,.\exercism) - 修改
Path注冊表中的持久定義后,必須通過 Windows GUI shell(開始選單、任務欄)啟動新的shell 會話以查看更改。如有疑問,請注銷并重新登錄,或重新啟動。
- 這些殼僅相對于不同來執行位于可執行檔案當前目錄(假設它沒有列
您的Path值配置錯誤:
應該有沒有對環境變數的參考,如%EXERCISM%在會議期間的 Path價值-既沒有cmd.exe,也不PowerShell中會認識到在這方面這種提法; 他們解釋條目逐字(其中變數參考在背景關系的認可,僅cmd.exe將識別語法形式%EXERCISM%; PowerShell的等價會$env:EXERCISM)
在存盤持久環境變數定義的注冊表中,您可以基于Path對其他環境變數(例如,%SystemRoot%\System32)的參考的條目。系統本身確保(shell)行程只看到這些變數的擴展形式。也就是說,行程所看到的Path變數值通常是一個;單獨的逐字路徑串列(并且是機器級和用戶級值的串聯)。
此機制依賴于相關的注冊表Path值- 在鍵HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment(機器級)和HKEY_CURRENT_USER\Environment(用戶級)中 - 被定義為REG_EXPAND_SZ,默認情況下。
您的螢屏截圖表明(至少)您的用戶級密鑰已轉換為靜態字串值REG_SZ,這會阻止環境變數參考的必要擴展。
如果您使用諸如
set.exe甚至 .NET[Environment]::SetEnvironmentVariable()API 之類的工具來更新持久Path值,則很容易發生這種安靜的損壞- 請參閱此答案。更新持久
Path值的正確方法是通過直接注冊表訪問(不幸的是,考慮到復雜性) - 請參閱此答案。
修復:
將您的持久用戶級Path定義重新轉換為值 typeREG_EXPAND_SZ,如下所示(類似于機器級定義,在這種情況下需要提升(以管理員身份運行)):
$regPath = 'registry::HKEY_CURRENT_USER\Environment'
Set-ItemProperty -Type ExpandString -LiteralPath $regPath Path (Get-ItemPropertyValue -LiteralPath $regPath Path)
uj5u.com熱心網友回復:
有些東西看起來被安裝的東西破壞了。這些 reg 條目應該是 reg_expand_sz。從命令列查看路徑時,您不應看到 %VARS%。
get-item hkcu:\environment | % GetValueKind path
ExpandString
get-item HKLM:\SYSTEM\CurrentControlSet\Control\Session` Manager\Environment |
% GetValueKind path
ExpandString
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/381816.html
下一篇:如何在代碼中設定斷點來除錯PHP
