我一直致力於更新我編寫的一些腳本。我仍然在學習PowerShell,所以我想回到我的舊版本,看看我能不能改進。
我偶然發現了Modules,並且非常喜歡使用它們來存儲隨後可以隨時調用的不同動作的想法。PowerShell:腳本模塊變量在ISE之外不可用
我寫了一個簡單的腳本來測試(或所以我想)。我應該提到我正在將我的模塊存儲在服務器共享中。
Write-Host "Testing for available variables"
Write-Host "Loading Modules"
Import-Module <path to my module on server share>.psm1
Write-Host ""
Write-Host "Done"
Write-Host "Print loaded modules"
Get-Module
Write-Host ""
Write-Host "Done"
Write-Host "================="
Write-Host ""
Write-Host "Printing variables"
Write-Host ""
Write-Host "Variable: arch: " $arch
Write-Host "Variable: WowNode: " $WowNode
Write-Host ""
Write-Host "Done"
我模塊包含
If ("${env:ProgramFiles(x86)}" -ne "")
{
$script:arch = 64
$script:WowNode = "\Wow6432Node\"
}
ELSE
{
$script:arch = 32
$script:WowNode = "\"
}
當我使用Windows PowerShell ISE的一切功能,我怎麼想它會運行我的腳本。我看到變量的內容,並正確輸出。
當我從Powershell命令行窗口運行我的腳本時,模塊被加載,但變量是空白的(沒有輸出)。
我一直在挖掘谷歌,我看到的唯一可能導致這與我用來定義我的變量的範圍有關。
將它們定義爲$ script:xx將它們放到Global作用域中(我敢肯定),這使得它們在整個腳本中都可用。所以我想我正確地定義了我的變量。但我仍然沒有任何運氣。
我可能錯過了一些明顯的東西,但對於我的生活我找不到它。
有什麼建議我可以做什麼來解決這個問題?
我已經確認我正在運行PowerShell的2.0版本,因爲我讀過模塊只在版本2.0中可用。
謝謝!你100%正確。起初,我不明白它,直到我讀你的第二個代碼塊,它是有道理的。我現在明白爲什麼我的變量不可用。我將模塊中的變量重新定義爲$ global:arch,並重新測試了我的小測試腳本,現在我可以打印出變量的內容。對自己瘋狂,因爲不能早點理解!再次感謝您解釋它! – bourne
超級解釋,順便說一句! –
我發現還有另一種方法可以做到這一點。您可以將變量聲明爲正常「$ var1 = test」。然後在您的導入語句中,您可以使用-Global選項,並且變量應該可用:「Import-Module-Global」。我同意Mike Shepard--絕對是一個很好的解釋! –
bourne