Windows 10: problemi (comandi non immediatamente disponibili) con Powershell 7 + PSWindowsUpdate

Oct 05 2020

impostare:

  • Windows 10 2004 si aggiorna agli ultimi aggiornamenti stabili
  • powershell 7.0.3
  • PSWindowsUpdate 2.2.0.2

TLDR: sto eseguendo la configurazione di cui sopra e non posso eseguire i comandi disponibili in PSWindowsUpdate finché non eseguo "Get-Command -module PSWindowsUpdate".


Penso che sia meglio spiegato con un esempio.

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

Ho installato il modulo tramite "Install-Module -Name PSWindowsUpdate -Force" e questo ha creato cartelle / file in $ HOME \ Documents \ PowerShell \ Modules \ PSWindowsUpdate.

Come test, io:

  • sposta la cartella "PSWindowsUpdate" da $ HOME \ Documents \ PowerShell \ Modules in C: \ Program Files \ PowerShell \ 7 \ Modules
  • riavviare il PC
  • riesegui il comando "Install-WindowsUpdate" (stessi problemi come sopra)
  • riesegui il comando "Get-Command -module PSWindowsUpdate"
  • riesegui il comando "Install-WindowsUpdate" e ora è disponibile

Come altro test, io:

  • aprire una sessione / finestra di Powershell 5.x.
  • installa il modulo PSWindowsUpdate tramite "Install-Module -Name PSWindowsUpdate -Force"
  • chiudere la sessione / finestra di Powershell 5.x.
  • aprire un'altra sessione / finestra di Powershell 5.x.
  • riesegui il comando "Install-WindowsUpdate" e nessun problema
  • riavviare il PC
  • riesegui il comando "Install-WindowsUpdate" e ancora nessun problema

Risposte

1 user19702 Oct 05 2020 at 20:52

La semplice installazione del modulo sul sistema non è sufficiente, è necessario caricare il modulo nella sessione con Import-Module PSWindowsUpdate. Una caratteristica che crea confusione qui è che la specifica -Modulenel tuo Get-Command -Module PSWindowsUpdatecomando viene effettivamente eseguita Import-Moduledietro le quinte per verificare i comandi all'interno di quel modulo. Ad esempio, puoi probabilmente replicare questo:

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 semplice installazione del modulo non è sufficiente secondo la install-moduledocumentazione: "Per impedire l'esecuzione di moduli che contengono codice dannoso, i moduli installati non vengono importati automaticamente dopo l'installazione".

Powershell ha una variabile di ambiente per impostare la tua preferenza per questo però $PSModuleAutoLoadingPreference:

  • Tutti: i moduli vengono importati automaticamente al primo utilizzo. Per importare un modulo, ottenere o utilizzare qualsiasi comando nel modulo. Ad esempio, usa Get-Command.
  • ModuleQualified: i moduli vengono importati automaticamente solo quando un utente utilizza il nome qualificato del modulo di un comando nel modulo. Ad esempio, se l'utente digita MyModule \ MyCommand, PowerShell importa il modulo MyModule.
  • Nessuno: l' importazione automatica dei moduli è disabilitata nella sessione. Per importare un modulo, utilizzare il cmdlet Import-Module.

Per ulteriori informazioni sull'importazione automatica dei moduli, vedere about_Modules .