我在使用powershell編寫的登錄腳本中遇到問題。我想在用戶空間中設置environemtn路徑。我首先聲明一個新變量,然後將其添加到最後的路徑變量。新變量不會擴展到路徑中的值。以下是代碼使用powershell設置路徑變量
想法是每次登錄時更新gat_path,但僅在第一次更新路徑。只將GAT_PATH追加到路徑變量一次。在此之後,每當我更新GAT_PATH時,路徑應該自動具有新值。
$gat_path="S:\common\tools\sqlite;"
[environment]::SetEnvironmentVariable("GAT_PATH",$gat_path,[system.environmentvariabletarget]::User)
$res=$env:path.ToLower().Contains("s:\common") # if gat_path already added, then dont add again.
IF($res -eq "True")
{
echo "GAT Path is already set."
}
ELSE
{
[environment]::SetEnvironmentVariable("PATH",$env:path+";%GAT_PATH%",[system.environmentvariabletarget]::User)
}
在上面的代碼中,GAT_PATH變量在environemnt變量創建,但路徑的值是c:\python26\;%GAT_PATH%
。 GAT_PATH
不會擴展到其實際值。 我使用變量來設置路徑的原因是因爲每次登錄時都會運行此腳本。我不想在路徑末尾添加sqlite路徑,因爲每次登錄時它都會在最後添加sqlite。我希望能夠隨時在腳本中更新GAT_PATH,並且路徑應該自動具有GAT_PATH的新值。
請注意I cannot
執行以下操作會產生與直接設置路徑而不使用變量相同的問題。每次我登錄時,它都會將gat_path保存到路徑變量中。
$gat_path="S:\common\tools\sqlite;"
[environment]::SetEnvironmentVariable("PATH",$env:path+";"+$gat_path,[system.environmentvariabletarget]::User)
使用powershell以編程方式使用變量定義路徑變量的正確方法是什麼?
問候, 阿洛克
感謝您的答覆。以上解決方案與使用gat_path的絕對值有相同的問題。每次運行腳本時,它都會繼續追加'gat_path'的值。對於。例如。如果我運行腳本2次,路徑的值將是'c:\ python26 \; S:\ common \ tools \ sqlite; S:\ common \ tools \ sqlite'我不希望它每次都追加這個運行腳本。相反,如果我在路徑'c:\ python26 \;%GAT_PATH%'中有一個變量,現在無論有多少個tmes我更新'GAT_PATH'變量,我都會有'gat_path'的更新值。 – Alok
我想我可能不得不把一條骯髒的解決方案從路徑中去掉'gat_path',然後使用原始路徑值並追加新的'gat_path'。我正在通過在路徑中使用一個變量尋找更優雅的解決方案。 – Alok