Windows 10:使用 Powershell 7 + PSWindowsUpdate 时出现问题(命令不可用)

Windows 10:使用 Powershell 7 + PSWindowsUpdate 时出现问题(命令不可用)

设置:

  • Windows 10 2004 更新至最新稳定更新
  • powershell 7.0.3
  • PSWindowsUpdate 2.2.0.2

总结:我正在运行上述设置,直到运行“Get-Command -module PSWindowsUpdate”才能运行 PSWindowsUpdate 中可用的命令。


我认为最好用一个例子来解释。

> Install-WindowsUpdate

Install-WindowsUpdate: The term 'Install-WindowsUpdate' is not recognized as the name of a cmdlet, function, script file, or operable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

> Get-Command -module PSWindowsUpdate

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           Clear-WUJob                                        2.2.0.2    PSWindowsUpdate
Alias           Download-WindowsUpdate                             2.2.0.2    PSWindowsUpdate
Alias           Get-WUInstall                                      2.2.0.2    PSWindowsUpdate
Alias           Get-WUList                                         2.2.0.2    PSWindowsUpdate
Alias           Hide-WindowsUpdate                                 2.2.0.2    PSWindowsUpdate
Alias           Install-WindowsUpdate                              2.2.0.2    PSWindowsUpdate
--snip--

> Install-WindowsUpdate
> 

我通过“Install-Module -Name PSWindowsUpdate -Force”安装了该模块,并在 $HOME\Documents\PowerShell\Modules\PSWindowsUpdate 中创建了文件夹/文件。

作为测试,我:

  • 将“PSWindowsUpdate”文件夹从 $HOME\Documents\PowerShell\Modules 移动到 C:\Program Files\PowerShell\7\Modules
  • 重启电脑
  • 重新运行命令“Install-WindowsUpdate”(与上述问题相同)
  • 重新运行命令“Get-Command -module PSWindowsUpdate”
  • 重新运行命令“Install-WindowsUpdate”,现在就可以使用了

作为另一项测试,我:

  • 打开 Powershell 5.x 会话/窗口
  • 通过“Install-Module -Name PSWindowsUpdate -Force”安装 PSWindowsUpdate 模块
  • 关闭 Powershell 5.x 会话/窗口
  • 打开另一个 Powershell 5.x 会话/窗口
  • 重新运行命令“Install-WindowsUpdate”,没有任何问题
  • 重启电脑
  • 重新运行命令“Install-WindowsUpdate”,仍然没有问题

答案1

仅在系统上安装模块是不够的,您必须使用 将该模块加载到您的会话中Import-Module PSWindowsUpdate。这里一个令人困惑的功能是,-Module在命令中指定Get-Command -Module PSWindowsUpdate实际上会Import-Module在后台运行以检查该模块中的命令。例如,您可以复制此内容:

Get-Module AWSPowershell

# no output - module is not loaded

Get-Command -Module AWSPowershell

#  CommandType     Name                                               Version                   
#  -----------     ----                                               -------                  
#  Alias           Add-ALXBContactWithAddressBook                     3.3.590.0          
#  Alias           Add-ASInstances                                    3.3.590.0  
#  [etc]        

Get-Module AWSPowershell

#  ModuleType Version    Name                                     
#  ---------- -------    ----                              
#  Binary     3.3.590.0  awspowershell

根据文档,仅安装模块是不够的install-module:“为了防止运行包含恶意代码的模块,安装后不会自动导入已安装的模块。”

Powershell 有一个环境变量可以设置你的偏好$PSModuleAutoLoadingPreference::

  • 全部:模块在首次使用时会自动导入。要导入模块,请获取或使用模块中的任何命令。例如,使用 Get-Command。
  • 模块资格:仅当用户使用模块中命令的模块限定名称时,才会自动导入模块。例如,如果用户键入 MyModule\MyCommand,PowerShell 会导入 MyModule 模块。
  • 没有任何:会话中已禁用模块的自动导入。要导入模块,请使用 Import-Module cmdlet。

有关自动导入模块的更多信息,请参阅关于模块

相关内容