Windows 10: problèmes (commandes non facilement disponibles) avec Powershell 7 + PSWindowsUpdate

Oct 05 2020

installer:

  • mises à jour de Windows 10 2004 vers les dernières mises à jour stables
  • PowerShell 7.0.3
  • PSWindowsUpdate 2.2.0.2

TLDR: J'exécute l'installation ci-dessus et je ne peux pas exécuter les commandes disponibles dans PSWindowsUpdate jusqu'à ce que j'exécute "Get-Command -module PSWindowsUpdate".


Je pense que c'est mieux expliqué avec un exemple.

> 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
> 

J'ai installé le module via "Install-Module -Name PSWindowsUpdate -Force" et cela a créé des dossiers / fichiers dans $ HOME \ Documents \ PowerShell \ Modules \ PSWindowsUpdate.

En guise de test, je:

  • déplacer le dossier «PSWindowsUpdate» de $ HOME \ Documents \ PowerShell \ Modules vers C: \ Program Files \ PowerShell \ 7 \ Modules
  • redémarrer le PC
  • réexécutez la commande "Install-WindowsUpdate" (mêmes problèmes que ci-dessus)
  • réexécutez la commande "Get-Command -module PSWindowsUpdate"
  • réexécutez la commande "Install-WindowsUpdate" et elle est maintenant disponible

Comme autre test, je:

  • ouvrir une session / fenêtre Powershell 5.x
  • installer le module PSWindowsUpdate via "Install-Module -Name PSWindowsUpdate -Force"
  • fermez la session / fenêtre Powershell 5.x
  • ouvrir une autre session / fenêtre Powershell 5.x
  • réexécutez la commande "Install-WindowsUpdate" et aucun problème
  • redémarrer le PC
  • réexécutez la commande "Install-WindowsUpdate" et toujours aucun problème

Réponses

1 user19702 Oct 05 2020 at 20:52

Il ne suffit pas d'installer le module sur le système, vous devez charger le module dans votre session avec Import-Module PSWindowsUpdate. Une caractéristique déroutante ici est que la spécification -Moduledans votre Get-Command -Module PSWindowsUpdatecommande s'exécute en réalité Import-Moduledans les coulisses pour vérifier les commandes dans ce module. Par exemple, vous pouvez probablement répliquer ceci:

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

La simple installation du module ne suffit pas selon la install-moduledocumentation: "Pour empêcher l'exécution de modules contenant du code malveillant, les modules installés ne sont pas automatiquement importés après l'installation."

Powershell a une variable d'environnement pour définir votre préférence pour cela $PSModuleAutoLoadingPreference:

  • Tous: les modules sont importés automatiquement lors de la première utilisation. Pour importer un module, récupérez ou utilisez n'importe quelle commande du module. Par exemple, utilisez Get-Command.
  • ModuleQualified: les modules sont importés automatiquement uniquement lorsqu'un utilisateur utilise le nom qualifié de module d'une commande dans le module. Par exemple, si l'utilisateur tape MyModule \ MyCommand, PowerShell importe le module MyModule.
  • Aucun: l'importation automatique des modules est désactivée dans la session. Pour importer un module, utilisez la cmdlet Import-Module.

Pour plus d'informations sur l'importation automatique de modules, consultez about_Modules .