luk*_*fer 6 powershell appfabric appfabric-cache
我正在使用PowerShell自动化AppFabric安装,我遇到了一个问题,即脚本调用安装程序,等待它完成,但我无法从相同的上下文导入已安装的模块.即:
Start-Process "C:\provision\WindowsServerAppFabricSetup_x64.exe" -ArgumentList "/i /GAC" -Wait
Import-Module DistributedCacheConfiguration
# ...do configuration things...
Run Code Online (Sandbox Code Playgroud)
哪个错误: The specified module 'DistributedCacheConfiguration' was not loaded because no valid module file was found in any module directory.
如果您关闭并重新打开PowerShell,脚本运行正常.Start-Sleep 60在安装程序和配置之间添加一个没有帮助,所以我尝试调用它,好像PowerShell正在重新启动:
C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe C:\provision\appfabric_config.ps1
Run Code Online (Sandbox Code Playgroud)
抛出了同样的错误.如何让PowerShell识别新安装的模块?
PowerShell在PSModulePath环境变量中列出的目录的子目录中查找模块.初始化会话时,将从注册表项HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment中读取环境变量.
如果安装程序将新模块放在一个尚未在PSModulePath中的目录中,然后将该目录添加到环境变量中,则它将修改注册表中的环境变量,而不是在当前的PowerShell控制台会话环境中,因此只有PowerShell会话才会在安装将具有更新的PSModulePath.
您可以通过在安装后和尝试导入模块之前添加以下行来手动更新注册表中的值:
$env:PSModulePath = (Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath).PSModulePath
Run Code Online (Sandbox Code Playgroud)
请注意,虽然它可能看起来多余,但您需要的原因
(Get-ItemProperty -Path [...] -Name PSModulePath).PSModulePath
Run Code Online (Sandbox Code Playgroud)
而不仅仅是
Get-ItemProperty -Path [...] -Name PSModulePath
Run Code Online (Sandbox Code Playgroud)
是Get-ItemProperty不返回指定注册表值的数据,它返回包含有关注册表值的信息的PSCustomObject,并且数据位于具有注册表值名称的PSCustomObject的属性中(即PSModulePath在这种情况下).如果您愿意,也可以这样做:
$env:PSModulePath = Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath | select -ExpandProperty PSModulePath
Run Code Online (Sandbox Code Playgroud)
(没有实际的区别,它是六个半打.)
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |