我一直在努力更新我编写的一些脚本。我还在学习 PowerShell,所以我喜欢回顾我的旧版本,看看我是否可以改进。
我偶然发现了模块,并且非常喜欢使用它们来存储可以随时调用的不同操作的想法。
我写了一个简单的脚本来测试(或者我是这么认为的)。我应该提到我将我的模块存储在服务器共享上。
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会将它们放入全局范围(我很确定),这使它们在整个脚本中都可用。所以我认为我正确地定义了我的变量。但我仍然没有任何运气。
我可能遗漏了一些明显的东西,但对于我的生活,我找不到它。
关于我可以做些什么来解决这个问题的任何建议?
我已经确认我正在运行 PowerShell 2.0 版,因为我读到模块仅在 2.0 版中可用。