Partager via


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 :

  • Déployer PowerShell à l’aide du package MSI
  • Déployer PowerShell à l’aide du package ZIP

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-PSSessionet 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 et indiquez le nom d’utilisateur avec nom d’utilisateur. Lorsque vous exécutez les applets de commande de manière interactive, vous êtes invité à entrer un mot de passe.

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