Windows 10: Problemas (comandos não disponíveis) com o Powershell 7 + PSWindowsUpdate
estabelecer:
- atualizações do windows 10 2004 para as últimas atualizações estáveis
- powershell 7.0.3
- PSWindowsUpdate 2.2.0.2
TLDR: Estou executando a configuração acima e não consigo executar os comandos disponíveis em PSWindowsUpdate até executar "Get-Command -module PSWindowsUpdate".
Acho que é melhor explicado com um exemplo.
> 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
>
Instalei o módulo por meio de "Install-Module -Name PSWindowsUpdate -Force" e criei pastas / arquivos em $ HOME \ Documents \ PowerShell \ Modules \ PSWindowsUpdate.
Como um teste, eu:
- mova a pasta "PSWindowsUpdate" de $ HOME \ Documents \ PowerShell \ Modules para C: \ Arquivos de programas \ PowerShell \ 7 \ Modules
- reinicie o PC
- execute novamente o comando "Install-WindowsUpdate" (mesmos problemas acima)
- execute novamente o comando "Get-Command -module PSWindowsUpdate"
- execute novamente o comando "Install-WindowsUpdate" e agora está disponível
Como outro teste, eu:
- abrir uma sessão / janela do Powershell 5.x
- instale o módulo PSWindowsUpdate através de "Install-Module -Name PSWindowsUpdate -Force"
- feche a sessão / janela do Powershell 5.x
- abrir outra sessão / janela do Powershell 5.x
- execute novamente o comando "Install-WindowsUpdate" e sem problemas
- reinicie o PC
- execute novamente o comando "Install-WindowsUpdate" e ainda sem problemas
Respostas
Apenas instalar o módulo no sistema não é suficiente, você deve carregar o módulo em sua sessão com Import-Module PSWindowsUpdate. Um recurso confuso aqui é que a especificação -Moduleem seu Get-Command -Module PSWindowsUpdatecomando, na verdade, é executada Import-Modulenos bastidores para verificar se há comandos dentro desse módulo. Por exemplo, você provavelmente pode replicar isso:
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
Apenas instalar o módulo não é suficiente de acordo com a install-moduledocumentação: "Para evitar a execução de módulos que contêm código malicioso, os módulos instalados não são importados automaticamente após a instalação."
O Powershell tem uma variável de ambiente para definir sua preferência por isso $PSModuleAutoLoadingPreference:
- Todos: os módulos são importados automaticamente na primeira utilização. Para importar um módulo, obtenha ou use qualquer comando no módulo. Por exemplo, use Get-Command.
- ModuleQualified: os módulos são importados automaticamente apenas quando um usuário usa o nome qualificado do módulo de um comando no módulo. Por exemplo, se o usuário digitar MyModule \ MyCommand, o PowerShell importará o módulo MyModule.
- Nenhum: a importação automática de módulos é desabilitada na sessão. Para importar um módulo, use o cmdlet Import-Module.
Para obter mais informações sobre a importação automática de módulos, consulte about_Modules .