Migration de Windows PowerShell 5.1 vers PowerShell 7
Conçu pour les environnements cloud, locaux et hybrides, PowerShell 7 regorge d'améliorations et de nouvelles fonctionnalités.
- Installe et s’exécute côte à côte avec Windows PowerShell
- Compatibilité améliorée avec les modules Windows PowerShell existants
- Nouvelles fonctionnalités de langage, telles que les opérateurs ternaires et
ForEach-Object -Parallel
- Amélioration des performances
- Communication à distance basée sur SSH
- Interopérabilité multiplateforme
- Prise en charge des conteneurs Docker
PowerShell 7 fonctionne côte à côte avec Windows PowerShell vous permettant de tester et comparer facilement entre les éditions avant le déploiement. La migration est simple, rapide et sécurisée.
PowerShell 7 est pris en charge sur les systèmes d’exploitation Windows suivants :
- Windows 10 et 11
- Windows Server 2016, 2019 et 2022
PowerShell 7 s’exécute également sur macOS et plusieurs distributions Linux. Pour obtenir une liste des systèmes d’exploitation pris en charge et des informations sur le cycle de vie de support, consultez le cycle de vie du support PowerShell.
Installation de PowerShell 7
Pour une flexibilité et pour prendre en charge les besoins de l’informatique, des ingénieurs DevOps et des développeurs, il existe plusieurs options disponibles pour installer PowerShell 7. Dans la plupart des cas, les options d’installation peuvent être réduites aux méthodes suivantes :
Remarque
Le package MSI peut être déployé et mis à jour avec des produits de gestion tels que Microsoft Configuration Manager. Téléchargez les packages à partir de la page de mise en production GitHub.
Le déploiement du package MSI nécessite l’autorisation Administrateur. Le package ZIP peut être déployé par n’importe quel utilisateur. Le package ZIP est le moyen le plus simple d’installer PowerShell 7 pour les tests, avant de valider une installation complète.
Vous pouvez également installer PowerShell 7 via le Windows Store ou winget
. Pour plus d’informations sur ces deux méthodes, consultez les instructions détaillées de Installation de PowerShell sur Windows.
Utilisation de PowerShell 7 côte à côte avec Windows PowerShell 5.1
PowerShell 7 est conçu pour coexister avec Windows PowerShell 5.1. Les fonctionnalités suivantes garantissent que votre investissement dans PowerShell est protégé et que votre migration vers PowerShell 7 est simple.
- Chemin d’installation distinct et nom exécutable
- PSModulePath distinct
- Profils distincts pour chaque version
- Compatibilité améliorée des modules
- Nouveaux points de terminaison de communication à distance
- Prise en charge des stratégies de groupe
- Journaux d’événements distincts
Différences dans les versions de .NET
PowerShell 7.4 repose sur .NET 8.0. Windows PowerShell 5.1 repose sur .NET Framework 4.x. Les différences entre les versions .NET peuvent affecter le comportement de vos scripts, en particulier si vous appelez directement la méthode .NET. Pour obtenir plus d’informations, Différences entre Windows PowerShell 5.1 et PowerShell 7.x.
Chemin d’installation distinct et nom exécutable
PowerShell 7 s’installe dans un nouveau répertoire, ce qui active l’exécution côte à côte avec Windows PowerShell 5.1.
Emplacements d'installation par version :
- Windows PowerShell 5.1 :
$env:WINDIR\System32\WindowsPowerShell\v1.0
- PowerShell 6.x :
$env:ProgramFiles\PowerShell\6
- PowerShell 7 :
$env:ProgramFiles\PowerShell\7
Le nouvel emplacement est ajouté à votre chemin d’accès, ce qui vous permet d’exécuter Windows PowerShell 5.1 et PowerShell 7. Si vous migrez de PowerShell 6.x vers PowerShell 7, PowerShell 6 est supprimé et le chemin d’accès remplacé.
Dans Windows PowerShell, l’exécutable PowerShell est nommé powershell.exe
. Dans la version 6 et ultérieure, l’exécutable est nommé pwsh.exe
. Le nouveau nom facilite la prise en charge de l’exécution côte à côte des deux versions.
PSModulePath distinct
Par défaut, Windows PowerShell et PowerShell 7 stockent des modules à différents emplacements. PowerShell 7 combine ces emplacements dans la variable d’environnement $Env:PSModulePath
. Lors de l’importation d’un module par nom, PowerShell vérifie l’emplacement spécifié par $Env:PSModulePath
. Cela permet à PowerShell 7 de charger à la fois les modules Core et Desktop.
Étendue d’installation | Windows PowerShell 5.1 | PowerShell 7.0 |
---|---|---|
Modules PowerShell | $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules |
$env:ProgramFiles\PowerShell\7\Modules |
Installé par l’utilisateur Étendue AllUsers |
$env:ProgramFiles\WindowsPowerShell\Modules |
$env:ProgramFiles\PowerShell\Modules |
Installation effectuée par l'utilisateur Étendue CurrentUser |
$HOME\Documents\WindowsPowerShell\Modules |
$HOME\Documents\PowerShell\Modules |
Les exemples suivants montrent les valeurs par défaut de $Env:PSModulePath
pour chaque version.
Pour Windows PowerShell 5.1 :
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\WindowsPowerShell\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
Pour PowerShell 7 :
$Env:PSModulePath -split (';')
C:\Users\<user>\Documents\PowerShell\Modules C:\Program Files\PowerShell\Modules C:\Program Files\PowerShell\7\Modules C:\Program Files\WindowsPowerShell\Modules C:\WINDOWS\System32\WindowsPowerShell\v1.0\Modules
Notez que PowerShell 7 inclut les chemins Windows PowerShell et les chemins PowerShell 7 pour fournir le chargement automatique des modules.
Remarque
Des chemins d’accès supplémentaires peuvent exister si vous avez modifié la variable d’environnement PSModulePath ou installé des modules ou applications personnalisés.
Pour obtenir plus d’informations, consultez about_PSModulePath.
Pour plus d’informations sur les modules, consultez about_Modules.
Profils distincts
Un profil PowerShell est un script qui s’exécute au démarrage de PowerShell. Ce script personnalise votre environnement en ajoutant des commandes, des alias, des fonctions, des variables, des modules et des lecteurs PowerShell. Le script de profil rend ces personnalisations disponibles dans chaque session sans avoir à les recréer manuellement.
Le chemin d’accès à l’emplacement du profil a changé dans PowerShell 7.
- Dans Windows PowerShell 5.1, l’emplacement du profil est
$HOME\Documents\WindowsPowerShell
. - Dans PowerShell 7, l’emplacement du profil est
$HOME\Documents\PowerShell
.
Les noms de fichiers de profil ont également changé :
$PROFILE | Select-Object *Host* | Format-List
AllUsersAllHosts : C:\Program Files\PowerShell\7\profile.ps1
AllUsersCurrentHost : C:\Program Files\PowerShell\7\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\<user>\Documents\PowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\<user>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Pour plus d'informations, consultez about_Profiles.
Compatibilité de PowerShell 7 avec les modules Windows PowerShell 5.1
La plupart des modules que vous utilisez dans Windows PowerShell 5.1 fonctionnent déjà avec PowerShell 7, notamment Azure PowerShell et Active Directory. Nous continuons à travailler avec d’autres équipes pour ajouter la prise en charge native de PowerShell 7 pour d’autres modules, notamment Microsoft Graph, Office 365 et d’autres. Pour obtenir la liste actuelle des modules pris en charge, consultez compatibilité des modules PowerShell 7.
Remarque
Sur Windows, nous avons également ajouté un commutateur UseWindowsPowerShell vers Import-Module
afin de faciliter la transition vers PowerShell 7 pour ceux qui utilisent des modules incompatibles. Pour plus d’informations sur cette fonctionnalité, consultez about_Windows_PowerShell_Compatibility.
Communication à distance PowerShell
La communication à distance PowerShell, vous permet d'exécuter n'importe quelle commande PowerShell sur un ou plusieurs ordinateurs distants. Vous pouvez établir des connexions persistantes, démarrer des sessions interactives et exécuter des scripts sur des ordinateurs distants.
Communication à distance WS-Management
Windows PowerShell 5.1 et ci-dessous utilisent le protocole WS-Management (WSMAN) pour la négociation de connexion et le transport de données. Windows Remote Management (WinRM) utilise le protocole WSMAN. Si WinRM a été activé, PowerShell 7 utilise le point de terminaison Windows PowerShell 5.1 existant, nommé Microsoft.PowerShell
, pour les connexions de communication à distance. Pour mettre à jour PowerShell 7 pour inclure son propre point de terminaison, exécutez l’applet de commande Enable-PSRemoting
. Pour plus d’informations sur la connexion à des points de terminaison spécifiques, consultez Communication à distance WS-Management dans PowerShell
Pour utiliser la fonctionnalité de gestion à distance de Windows PowerShell, l’ordinateur distant doit être configuré pour la gestion à distance. Pour obtenir plus d’informations, notamment des instructions, voir about_Remote_Requirements.
Pour plus d'informations sur l’utilisation de la communication à distance, consultez À propos de la communication à distance
Communication à distance basée sur SSH
La communication à distance basée sur SSH a été ajoutée dans PowerShell 6.x pour prendre en charge d’autres systèmes d’exploitation qui ne peuvent pas utiliser de composants natifs Windows comme WinRM. La communication à distance SSH crée un processus hôte PowerShell sur l’ordinateur cible en tant que sous-système SSH. Pour obtenir des informations et des exemples sur la configuration de la communication à distance basée sur SSH sur Windows ou Linux, consultez : Communication à distance PowerShell via SSH.
Remarque
PowerShell Gallery (PSGallery) contient un module et une applet de commande qui configure automatiquement la communication à distance basée sur SSH. Installez le module Microsoft.PowerShell.RemotingTools
à partir de PSGallery et exécutez l’applet de commande Enable-SSH
.
Les applets de commande New-PSSession
, Enter-PSSession
et Invoke-Command
ont de nouveaux ensembles de paramètres pour prendre en charge les connexions SSH.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Pour créer une session à distance, spécifiez l’ordinateur cible avec le paramètre HostName
Enter-PSSession -HostName <Computer> -UserName <Username>
De plus, lorsque vous utilisez le paramètre HostName, fournissez les informations de nom d’utilisateur suivies du signe arobase (@
), puis du nom de l’ordinateur.
Enter-PSSession -HostName <Username>@<Computer>
Vous pouvez configurer l’authentification par clé SSH à l’aide d’un fichier de clé privée avec le paramètre KeyFilePath
Stratégie de groupe prise en charge
PowerShell inclut des paramètres de stratégie de groupe pour vous aider à définir des valeurs d’option cohérentes pour les serveurs dans un environnement d’entreprise. Ces paramètres sont les suivants :
- Configuration de session de console : définit un point de terminaison de configuration dans lequel PowerShell est exécuté.
- Activer la journalisation des modules : définit la propriété LogPipelineExecutionDetails des modules.
- Activer la journalisation des blocs de script PowerShell : active la journalisation détaillée de tous les scripts PowerShell.
- Activer l’exécution du script : définit la stratégie d’exécution PowerShell.
- Activer la transcription PowerShell : permet la capture d’entrée et de sortie de commandes PowerShell dans des transcriptions textuelles.
- Définissez le chemin d’accès source par défaut pour Update-Help : définit la source de l’aide pouvant être mise à jour sur un répertoire, et non sur Internet.
Pour plus d’informations, consultez about_Group_Policy_Settings.
PowerShell 7 inclut des modèles de stratégie de groupe et un script d’installation dans $PSHOME
.
Les outils de stratégie de groupe utilisent des fichiers de modèle d’administration (.admx
, .adml
) pour remplir les paramètres de stratégie dans l’interface utilisateur. Cela permet aux administrateurs de gérer les paramètres de stratégie basés sur le Registre. Le script InstallPSCorePolicyDefinitions.ps1
installe des modèles d’administration PowerShell sur l’ordinateur local.
Get-ChildItem -Path $PSHOME -Filter *Core*Policy*
Directory: C:\Program Files\PowerShell\7
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2/27/2020 12:38 AM 15861 InstallPSCorePolicyDefinitions.ps1
-a--- 2/27/2020 12:28 AM 9675 PowerShellCoreExecutionPolicy.adml
-a--- 2/27/2020 12:28 AM 6201 PowerShellCoreExecutionPolicy.admx
Journaux d’événements distincts
Windows PowerShell et PowerShell 7 consignent les événements dans des journaux d'événements distincts. Utilisez la commande suivante pour obtenir une liste des logs PowerShell.
Get-WinEvent -ListLog *PowerShell*
Pour plus d’informations, consultez about_Logging_Windows.
Amélioration de l’expérience d’édition avec Visual Studio Code
Visual Studio Code (VSCode) avec l’extension PowerShell est l’environnement de script pris en charge pour PowerShell 7. L’environnement de script intégré Windows PowerShell (ISE) prend uniquement en charge Windows PowerShell.
L’extension PowerShell mise à jour inclut :
- Nouveau mode de compatibilité ISE
- PSReadLine dans la console intégrée, notamment la mise en surbrillance de la syntaxe, l'édition multiligne et la recherche en arrière
- Améliorations de la stabilité et des performances
- Nouvelle intégration de CodeLens
- Amélioration de l’autocomplétion du chemin
Pour faciliter la transition vers Visual Studio Code, utilisez la fonction Activer le mode ISE disponible dans la palette de commandes . Cette fonction bascule VSCode en une disposition de style ISE. La disposition de style ISE vous offre toutes les nouvelles fonctionnalités et capacités de PowerShell dans une expérience utilisateur familière.
Pour basculer vers la nouvelle disposition ISE, appuyez sur Ctrl+Maj+P pour ouvrir la Palette de commandes, tapez PowerShell
et sélectionnez PowerShell : Activez le mode ISE.
Pour définir la disposition sur la disposition d’origine, ouvrez la palette de commandes , sélectionnez PowerShell : Désactiver le mode ISE (restaurer par défaut).
Pour plus d’informations sur la personnalisation de la disposition VSCode sur ISE, consultez Comment répliquer l’expérience ISE dans Visual Studio Code
Remarque
Il n’existe aucun plan de mise à jour de l’ISE avec de nouvelles fonctionnalités. Dans les dernières versions de Windows 10 ou Windows Server 2019 et versions ultérieures, l’ISE est désormais une fonctionnalité désinstallable par l’utilisateur. Il n’y a aucun plan de supprimer définitivement l’ISE. L’équipe PowerShell et ses partenaires se concentrent sur l’amélioration de l’expérience de script dans l’extension PowerShell pour Visual Studio Code.
Étapes suivantes
Avec les connaissances nécessaires pour migrer efficacement, installez PowerShell 7 maintenant !