Migration de Windows PowerShell 5.1 vers PowerShell 7

Conçu pour les environnements cloud, locaux et hybrides, PowerShell 7 intègre de nombreuses améliorations et nouvelles fonctionnalités.

  • S’installe et s’exécute côte à côte avec Windows PowerShell
  • Meilleure compatibilité avec les modules Windows PowerShell existants
  • Nouvelles fonctionnalités de langage, notamment les opérateurs ternaires et ForEach-Object -Parallel
  • performances améliorées
  • 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, ce qui vous permet de tester et de comparer facilement différentes versions 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 offrir plus de flexibilité et répondre aux besoins du service informatique, des ingénieurs DevOps et des développeurs, plusieurs options d’installation de PowerShell 7 sont disponibles. Dans la plupart des cas, les options d’installation peuvent se limiter aux méthodes suivantes :

Remarque

Le package MSI peut être déployé et mis à jour avec des produits de gestion, notamment 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 une autorisation d’administrateur. Le package ZIP peut être déployé par n’importe quel utilisateur. Le package ZIP constitue le moyen le plus simple d’installer PowerShell 7 à des fins de test, avant de procéder à 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 dans 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 protègent votre investissement dans PowerShell et simplifient la migration vers PowerShell 7.

  • Chemins d’installation et noms d’exécutables distincts
  • PSModulePath distinct
  • Profils distincts pour chaque version
  • Compatibilité améliorée des modules
  • Nouveaux points de terminaison de communication à distance
  • Prise en charge de la stratégie de groupe
  • Journaux d’événements distincts

Différences dans les versions de .NET

PowerShell 7.2 est bâti sur .NET 6.0. Windows PowerShell 5.1 est bâti sur le framework .NET v4.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 plus d’informations, consultez Différences entre Windows PowerShell 5.1 et PowerShell 7.x.

Chemins d’installation et noms d’exécutables distincts

PowerShell 7 s’installe dans un nouveau répertoire, permettant une 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 à la fois Windows PowerShell 5.1 et PowerShell 7. Si vous effectuez une migration 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 versions ultérieures, 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 les 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 de base et de bureau.

Étendue Install 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
Installé 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 d’accès Windows PowerShell et les chemins d’accès PowerShell 7 pour garantir le chargement automatique des modules.

Notes

Des chemins d’accès supplémentaires peuvent exister si vous avez modifié la variable d’environnement PSModulePath ou si vous avez installé des modules ou des applications personnalisés.

Pour 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 vers 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 des 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, y compris Azure PowerShell et Active Directory. Nous continuons à collaborer avec d’autres équipes afin d’ajouter une prise en charge native de PowerShell 7 pour d’autres modules, notamment Microsoft Graph, Office 365, entre autres. Pour obtenir la liste actuelle des modules pris en charge, consultez Compatibilité des modules PowerShell 7.

Notes

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 ordinateurs distants.

Communication à distance WS-Management

Windows PowerShell 5.1 et les versions antérieures 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 afin d’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 communication à distance 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 des 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.

Notes

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, puis exécutez l’applet de commande Enable-SSH.

Les applets de commande New-PSSession, Enter-PSSession et Invoke-Command intègrent de nouveaux jeux de paramètres pour prendre en charge les connexions SSH.

[-HostName <string>]  [-UserName <string>]  [-KeyFilePath <string>]

Pour créer une session distante, spécifiez l’ordinateur cible avec le paramètre HostName et indiquez le nom d’utilisateur avec UserName. Lors de l’exécution des cmdlets de manière interactive, vous êtes invité à entrer un mot de passe.

Enter-PSSession -HostName <Computer> -UserName <Username>

Si vous utilisez le paramètre HostName, vous pouvez également fournir les informations de nom d’utilisateur en y ajoutant le signe arobase (@) et le 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. Pour plus d’informations, consultez Gestion des clés OpenSSH.

Stratégie de groupe prise en charge

PowerShell inclut des paramètres de stratégie de groupe qui vous aident à définir des valeurs d’option cohérentes pour les serveurs d’un environnement d’entreprise. Ces paramètres comprennent ce qui suit :

  • 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 de blocs de scripts PowerShell : active la journalisation détaillée de tous les scripts PowerShell.
  • Activer l’exécution des scripts : définit la stratégie d'exécution de PowerShell.
  • Activer la transcription PowerShell : active la capture d’entrée et de sortie de commandes PowerShell dans des transcriptions textuelles.
  • Définir le chemin source par défaut pour Update-Help : définit la source de l’aide actualisable sur un répertoire, et non sur Internet.

Pour plus d’informations, consultez about_Group_Policy_Settings.

PowerShell 7 comprend 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èles 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 les 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 journalisent les événements dans des journaux d’événements distincts. Utilisez la commande suivante pour obtenir la liste des journaux PowerShell.

Get-WinEvent -ListLog *PowerShell*

Pour plus d’informations, consultez about_Logging_Windows.

Amélioration de l’expérience de modification avec Visual Studio Code

Visual Studio Code (VSCode) avec l’extension PowerShell est l’environnement de script pris en charge pour PowerShell 7. Windows PowerShell Integrated Scripting Environment (ISE) prend uniquement en charge Windows PowerShell.

L’extension PowerShell mise à jour comprend les éléments suivants :

  • Nouveau mode de compatibilité ISE
  • PSReadLine dans la console intégrée, notamment la mise en surbrillance de la syntaxe, la modification sur plusieurs lignes et la recherche en arrière
  • Améliorations en matière de stabilité et de performances
  • Nouvelle intégration 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 dans 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 de la palette de commandes, tapez PowerShell et sélectionnez PowerShell : Activez le mode ISE.

Pour revenir à la disposition d’origine, ouvrez la palette de commandes, puis sélectionnez PowerShell : Désactiver le mode ISE (restaurer les valeurs par défaut).

Pour plus d’informations sur la personnalisation de la disposition VSCode pour ISE, consultez Guide pratique de réplication de l’expérience ISE dans Visual Studio Code

Notes

Aucun ajout de fonctionnalité n’est prévu pour l’environnement ISE. Dans les versions les plus récentes de Windows 10 ou Windows Server 2019 et ultérieures, l’environnement ISE est désormais une fonctionnalité qui ne peut pas être installée par l’utilisateur. Il n’est pas prévu de supprimer définitivement l’environnement ISE. L’équipe PowerShell et ses partenaires se concentrent actuellement sur l’amélioration de l’expérience de script dans l’extension PowerShell pour Visual Studio Code.

Étapes suivantes

Maintenant que vous possédez les connaissances requises pour réussir votre migration, installez PowerShell 7 !