about_Windows_PowerShell_Compatibility
Description courte
Décrit la fonctionnalité de compatibilité Windows PowerShell pour PowerShell 7.
Description longue
À moins que le manifeste du module indique que le module est compatible avec PowerShell Core, les modules du %windir%\system32\WindowsPowerShell\v1.0\Modules
dossier sont chargés en arrière-plan Windows PowerShell processus 5.1 par Windows PowerShell fonctionnalité de compatibilité.
Utilisation de la fonctionnalité de compatibilité
Lorsque le premier module est importé à l’aide de Windows PowerShell fonctionnalité de compatibilité, PowerShell crée une session distante nommée WinPSCompatSession
qui s’exécute en arrière-plan Windows PowerShell processus 5.1. Ce processus est créé lorsque la fonctionnalité de compatibilité importe le premier module. Le processus est fermé lorsque le dernier module de ce type est supprimé (à l’aide Remove-Module
de ) ou lorsque le processus PowerShell se ferme.
Les modules chargés dans la session sont utilisés via la WinPSCompatSession
communication à distance implicite et répercutés dans la session PowerShell actuelle. Il s’agit de la même méthode de transport que celle utilisée pour les travaux PowerShell.
Lorsqu’un module est importé dans la session, la WinPSCompatSession
communication à distance implicite génère un module proxy dans le répertoire de $env:Temp
l’utilisateur et importe ce module proxy dans la session PowerShell active. Cela permet à PowerShell de détecter que le module a été chargé à l’aide de Windows PowerShell fonctionnalité de compatibilité.
Une fois la session créée, elle peut être utilisée pour les opérations qui ne fonctionnent pas correctement sur des objets désérialisés. L’intégralité du pipeline est exécutée dans Windows PowerShell et seul le résultat final est retourné. Par exemple :
$s = Get-PSSession -Name WinPSCompatSession
Invoke-Command -Session $s -ScriptBlock {
"Running in Windows PowerShell version $($PSVersionTable.PSVersion)"
}
La fonctionnalité de compatibilité peut être appelée de deux façons :
Explicitement en important un module à l’aide du paramètre UseWindowsPowerShell
Import-Module -Name ScheduledTasks -UseWindowsPowerShell
Implicitement en important un module Windows PowerShell par nom de module, chemin d’accès ou chargement automatique via la découverte de commandes.
Import-Module -Name ServerManager Get-AppLockerPolicy -Local
S’il n’est pas déjà chargé, le module AppLocker est chargé automatiquement lorsque vous exécutez
Get-AppLockerPolicy
.
Windows PowerShell Compatibilité bloque le chargement des modules répertoriés dans le paramètre dans le WindowsPowerShellCompatibilityModuleDenyList
fichier de configuration PowerShell.
La valeur par défaut de ce paramètre est :
"WindowsPowerShellCompatibilityModuleDenyList": [
"PSScheduledJob","BestPractices","UpdateServices"
]
Gestion du chargement implicite des modules
Pour désactiver le comportement d’importation implicite de la fonctionnalité compatibilité Windows PowerShell, utilisez le DisableImplicitWinCompat
paramètre dans un fichier de configuration PowerShell. Ce paramètre peut être ajouté au powershell.config.json
fichier. Pour plus d’informations, consultez about_powershell_config.
Cet exemple montre comment créer un fichier de configuration qui désactive la fonctionnalité de chargement de module implicite de Windows PowerShell Compatibilité.
$ConfigPath = "$PSHOME\DisableWinCompat.powershell.config.json"
$ConfigJSON = ConvertTo-Json -InputObject @{
"DisableImplicitWinCompat" = $true
"Microsoft.PowerShell:ExecutionPolicy" = "RemoteSigned"
}
$ConfigJSON | Out-File -Force $ConfigPath
pwsh -settingsFile $ConfigPath
Pour plus d’informations sur la compatibilité des modules, consultez la liste de compatibilité des modules PowerShell 7 .
Gestion du clobbering d’applet de commande
La fonctionnalité compatibilité Windows PowerShell utilise la communication à distance implicite pour charger des modules en mode de compatibilité. Le résultat est que les commandes exportées par le module sont prioritaires sur les commandes du même nom dans la session PowerShell 7 actuelle. Dans la version 7.0.0 de PowerShell, cela incluait les modules de base fournis avec PowerShell.
Dans PowerShell 7.1, le comportement a été modifié afin que les modules PowerShell de base suivants ne soient pas clobés :
- Microsoft.PowerShell.ConsoleHost
- Microsoft.PowerShell.Diagnostics
- Microsoft.PowerShell.Host
- Microsoft.PowerShell.Management
- Microsoft.PowerShell.Security
- Microsoft.PowerShell.Utility
- Microsoft.WSMan.Management
PowerShell 7.1 a également ajouté la possibilité de répertorier des modules supplémentaires qui ne doivent pas être clobés par le mode de compatibilité.
Vous pouvez ajouter le WindowsPowerShellCompatibilityNoClobberModuleList
paramètre au fichier de configuration PowerShell. La valeur de ce paramètre est une liste de noms de module séparés par des virgules. La valeur par défaut de ce paramètre est :
"WindowsPowerShellCompatibilityNoClobberModuleList": [ ]
Limites
La fonctionnalité compatibilité Windows PowerShell :
- Fonctionne uniquement localement sur les ordinateurs Windows
- Nécessite que Windows PowerShell 5.1
- Fonctionne sur les paramètres d’applet de commande sérialisés et les valeurs de retour, et non sur les objets actifs
- Tous les modules importés dans la session de communication à distance Windows PowerShell partagent le même runspace.
Mots clés
about_Windows_PowerShell_Compatibility