gpt4 book ai didi

powershell - 安装后导入 PowerShell 模块

转载 作者:行者123 更新时间:2023-12-04 14:44:42 26 4
gpt4 key购买 nike

我正在使用 PowerShell 自动化 AppFabric 安装,我遇到了一个问题,脚本正在调用安装程序,等待它完成,但我无法从相同的上下文中导入已安装的模块。 IE:

Start-Process "C:\provision\WindowsServerAppFabricSetup_x64.exe" -ArgumentList "/i /GAC" -Wait
Import-Module DistributedCacheConfiguration
# ...do configuration things...

哪些错误: 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

抛出了同样的错误。如何让 PowerShell 识别新安装的模块?

最佳答案

PowerShell 在 PSModulePath 环境变量中列出的目录的子目录中查找模块。初始化 session 时,从注册表项 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 读取环境变量。

如果安装程序将新模块放在不在 PSModulePath 中的目录中,然后将该目录添加到环境变量中,则它正在修改注册表中的环境变量,而不是在当前 PowerShell 控制台 session 的环境中,因此只有 PowerShell session 启动安装后将有更新的 PSModulePath

您可以通过在安装之后和尝试导入模块之前添加以下行来手动更新注册表中的值:

$env:PSModulePath = (Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath).PSModulePath

请注意,虽然它可能看起来多余,但您需要的原因

(Get-ItemProperty -Path [...] -Name PSModulePath).PSModulePath

而不仅仅是

Get-ItemProperty -Path [...] -Name PSModulePath

Get-ItemProperty 不返回命名注册表值的数据,它返回一个包含有关注册表值信息的 PSCustomObject,并且数据位于具有注册表值名称的 PSCustomObject 的属性中(即 PSModulePath 在这种情况下)。如果你愿意,你也可以这样做:

$env:PSModulePath = Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Session Manager\Environment' -Name PSModulePath | select -ExpandProperty PSModulePath

(没有实际区别,是六个或六个。)

关于powershell - 安装后导入 PowerShell 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24833288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com