Informazioni sulla compatibilità di Windows PowerShellAbout Windows PowerShell compatibility

DESCRIZIONE BREVESHORT DESCRIPTION

Descrive la funzionalità di compatibilità di Windows PowerShell per PowerShell 7.Describes the Windows PowerShell Compatibility functionality for PowerShell 7.

DESCRIZIONE LUNGALONG DESCRIPTION

A meno che il manifesto del modulo non indichi che il modulo è compatibile con PowerShell core, i moduli nella %windir%\system32\WindowsPowerShell\v1.0\Modules cartella vengono caricati in un processo in background di Windows powershell 5,1 mediante la funzionalità di compatibilità di Windows PowerShell.Unless the module manifest indicates that module is compatible with PowerShell Core, modules in the %windir%\system32\WindowsPowerShell\v1.0\Modules folder are loaded in a background Windows PowerShell 5.1 process by Windows PowerShell Compatibility feature.

Uso della funzionalità di compatibilitàUsing the Compatibility feature

Quando viene importato il primo modulo con la funzionalità di compatibilità di Windows PowerShell, PowerShell crea una sessione remota denominata WinPSCompatSession che viene eseguita in un processo di Windows powershell 5,1 in background.When the first module is imported using Windows PowerShell Compatibility feature, PowerShell creates a remote session named WinPSCompatSession that is running in a background Windows PowerShell 5.1 process. Questo processo viene creato quando la funzionalità di compatibilità importa il primo modulo.This process is created when the Compatibility feature imports the first module. Il processo viene chiuso quando l'ultimo modulo viene rimosso (usando Remove-Module ) o quando viene terminato il processo di PowerShell.The process is closed when the last such module is removed (using Remove-Module) or when PowerShell process exits.

I moduli caricati nella WinPSCompatSession sessione vengono usati tramite la comunicazione remota implicita e vengono riflessi nella sessione corrente di PowerShell.The modules loaded in the WinPSCompatSession session are used via implicit remoting and reflected into current PowerShell session. Si tratta dello stesso metodo di trasporto usato per i processi di PowerShell.This is the same transport method used for PowerShell jobs.

Quando un modulo viene importato nella WinPSCompatSession sessione, la comunicazione remota implicita genera un modulo proxy nella directory dell'utente $env:Temp e importa questo modulo proxy nella sessione corrente di PowerShell.When a module is imported into the WinPSCompatSession session, implicit remoting generates a proxy module in the user's $env:Temp directory and imports this proxy module into current PowerShell session. Questo consente a PowerShell di rilevare che il modulo è stato caricato con la funzionalità di compatibilità di Windows PowerShell.This allows PowerShell to detect that the module was loaded using Windows PowerShell Compatibility functionality.

Una volta creata, la sessione può essere utilizzata per operazioni che non funzionano correttamente sugli oggetti deserializzati.Once the session is created, it can be used for operations that don't work correctly on deserialized objects. L'intera pipeline viene eseguita in Windows PowerShell e viene restituito solo il risultato finale.The entire pipeline is executed in Windows PowerShell and only the final result is returned. Ad esempio:For example:

$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
  "Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}

La funzionalità di compatibilità può essere richiamata in due modi:The Compatibility feature can be invoked in two ways:

  • Importazione esplicita di un modulo tramite il parametro UseWindowsPowerShellExplicitly by importing a module using the UseWindowsPowerShell parameter

    Import-Module -Name ScheduledTasks -UseWindowsPowerShell
    
  • In modo implicito, l'importazione di un modulo di Windows PowerShell in base al nome del modulo, al percorso o al caricamento tramite l'individuazione dei comandi.Implicitly by importing a Windows PowerShell module by module name, path, or autoloading via command discovery.

    Import-Module -Name ServerManager
    Get-AppLockerPolicy -Local
    

    Se non è già stato caricato, il modulo AppLocker viene caricato in autoloading durante l'esecuzione di Get-AppLockerPolicy .If not already loaded, the AppLocker module is autoloaded when you run Get-AppLockerPolicy.

Compatibilità di Windows PowerShell blocca il caricamento dei moduli elencati nell' WindowsPowerShellCompatibilityModuleDenyList impostazione del file di configurazione di PowerShell.Windows PowerShell Compatibility blocks loading of modules that are listed in the WindowsPowerShellCompatibilityModuleDenyList setting in PowerShell configuration file.

Il valore predefinito di questa impostazione è:The default value of this setting is:

"WindowsPowerShellCompatibilityModuleDenyList":  [
   "PSScheduledJob","BestPractices","UpdateServices"
]

Gestione del caricamento di moduli implicitiManaging implicit module loading

Per disabilitare il comportamento di importazione implicita della funzionalità di compatibilità di Windows PowerShell, usare l' DisableImplicitWinCompat impostazione in un file di configurazione di PowerShell.To disable implicit import behavior of the Windows PowerShell Compatibility feature, use the DisableImplicitWinCompat setting in a PowerShell configuration file. Questa impostazione può essere aggiunta al powershell.config.json file.This setting can be added to the powershell.config.json file. Per ulteriori informazioni, vedere about_powershell_config.For more information, see about_powershell_config.

Questo esempio illustra come creare un file di configurazione che disabilita la funzionalità di caricamento dei moduli implicita della compatibilità di Windows PowerShell.This example shows how to create a configuration file that disables the implicit module-loading feature of Windows PowerShell Compatibility.

$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
  "DisableImplicitWinCompat" = $true
  "Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath

Per altre informazioni aggiornate sulla compatibilità dei moduli, vedere l'elenco di compatibilità dei moduli di PowerShell 7 .For more the latest information about module compatibility, see the PowerShell 7 module compatibility list.

Gestione del massacring dei cmdletManaging cmdlet clobbering

La funzionalità di compatibilità di Windows PowerShell usa la comunicazione remota implicita per caricare i moduli in modalità di compatibilità.The Windows PowerShell Compatibility feature uses implicit remoting to load modules in compatibility mode. Il risultato è che i comandi esportati dal modulo hanno la precedenza sui comandi con lo stesso nome nella sessione corrente di PowerShell 7.The result is that commands exported by the module take precedence over commands of the same name in the current PowerShell 7 session. Nella versione di PowerShell 7.0.0 sono inclusi i moduli principali forniti con PowerShell.In the PowerShell 7.0.0 release, this included the core modules that ship with PowerShell.

In PowerShell 7,1 il comportamento è stato modificato in modo che i moduli di PowerShell principali seguenti non vengano sottoutilizzati:In PowerShell 7.1, the behavior was changed so that the following core PowerShell modules are not clobbered:

  • Microsoft. PowerShell. ConsoleHostMicrosoft.PowerShell.ConsoleHost
  • Microsoft.PowerShell.DiagnosticsMicrosoft.PowerShell.Diagnostics
  • Microsoft.PowerShell.HostMicrosoft.PowerShell.Host
  • Microsoft.PowerShell.ManagementMicrosoft.PowerShell.Management
  • Microsoft.PowerShell.SecurityMicrosoft.PowerShell.Security
  • Microsoft.PowerShell.UtilityMicrosoft.PowerShell.Utility
  • Microsoft.WSMan.ManagementMicrosoft.WSMan.Management

PowerShell 7,1 ha anche aggiunto la possibilità di elencare moduli aggiuntivi che non devono essere sottoutilizzati per la modalità di compatibilità.PowerShell 7.1 also added the ability to list additional modules that should not be clobbered by compatibility mode.

È possibile aggiungere l' WindowsPowerShellCompatibilityNoClobberModuleList impostazione al file di configurazione di PowerShell.You can add the WindowsPowerShellCompatibilityNoClobberModuleList setting to PowerShell configuration file. Il valore di questa impostazione è un elenco delimitato da virgole di nomi di moduli.The value of this setting is a comma-separated list of module names. Il valore predefinito di questa impostazione è:The default value of this setting is:

"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]

LimitazioniLimitations

Funzionalità di compatibilità di Windows PowerShell:The Windows PowerShell Compatibility functionality:

  1. Funziona solo localmente nei computer WindowsOnly works locally on Windows computers
  2. Richiede che Windows PowerShell 5,1Requires that Windows PowerShell 5.1
  3. Opera sui parametri del cmdlet serializzati e sui valori restituiti, non sugli oggetti attiviOperates on serialized cmdlet parameters and return values, not on live objects
  4. Tutti i moduli importati nella sessione di comunicazione remota di Windows PowerShell condividono lo stesso spazio.All modules imported into the Windows PowerShell remoting session share the same runspace.

Parole chiaveKeywords

about_Windows_PowerShell_Compatibilityabout_Windows_PowerShell_Compatibility

Vedere ancheSee also

about_Modulesabout_Modules

Import-ModuleImport-Module