【发布时间】:2015-01-05 08:21:58
【问题描述】:
我遇到了一个与安装补丁后自动加载模块相关的问题。顺序如下:
- 我有一个运行在版本 1.0.8802 中的 .NET 服务
- 从 Powershell (V 4.0) 我看到模块
MyAgent已加载并且它的命令行开关可以访问 - 即使在我重新启动计算机后,当我打开 Powershell 时也会加载
MyAgent(无需显式执行任何加载/获取模块命令) - 现在我使用 WUA(Windows 更新代理)为我的 .NET 服务安装补丁。补丁安装成功并自动重启电脑
- 现在我打开 PowerShell,
MyAgent未加载。它出现在Get-Module -ListAvailable。一旦我运行Import-Module MyAgent,一切都会像以前一样开始工作。
注意事项:
- MyAgent 模块在这两种情况下都存在于
c:\windows\system32\Windowspowershell\v1.0\modules中 - 在这两种情况下,
$PSModuleAutoloadingPreference都为空 - 我的
$env:PSModulePath指向c:\windows\system32\Windowspowershell\v1.0\modules\也是正确的
我感到困惑的原因是,为什么在补丁安装后模块没有自动加载(尽管模块存在于正确的模块文件夹中)?当我在C:\Users\<<user>>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 中创建内容为Import-Module MyAgent 的配置文件时,此问题得到解决。具有讽刺意味的是,如果我将配置文件保存在C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1 中,补丁安装本身就会失败,没有任何明显的错误。我在这里错过了什么?
请帮忙!
【问题讨论】:
-
未加载是什么意思?模块在您使用后会自动导入。前任。在我运行
Get-CimInstance或模块中的另一个 cmdlet 之前,未加载“CimCmdlets”模块。您是说MyAgent中的 cmdlet 的 tabcompletion 在您手动导入之前不起作用? -
Frode,我的意思是制表符完成不起作用,而且,如果我尝试使用该模块中定义的任何命令行开关,它会显示“不被识别为命令行开关”错误消息。如果我明确运行“Import-Module”,那么它工作正常。
标签: powershell autoload powershell-4.0 import-module powershell-module