Migration de Windows PowerShell 5.1 vers PowerShell 7Migrating from Windows PowerShell 5.1 to PowerShell 7

Conçu pour les environnements cloud, locaux et hybrides, PowerShell 7 intègre de nombreuses améliorations et nouvelles fonctionnalités.Designed for cloud, on-premises, and hybrid environments, PowerShell 7 is packed with enhancements and new features.

  • S’installe et s’exécute côte à côte avec Windows PowerShellInstalls and runs side-by-side with Windows PowerShell
  • Meilleure compatibilité avec les modules Windows PowerShell existantsImproved compatibility with existing Windows PowerShell modules
  • Nouvelles fonctionnalités de langage, notamment les opérateurs ternaires et ForEach-Object -ParallelNew language features, like ternary operators and ForEach-Object -Parallel
  • performances amélioréesImproved performance
  • Communication à distance basée sur SSHSSH-based remoting
  • Interopérabilité multiplateformeCross-platform interoperability
  • Prise en charge des conteneurs DockerSupport for Docker containers

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.PowerShell 7 works side-by-side with Windows PowerShell letting you easily test and compare between editions before deployment. La migration est simple, rapide et sécurisée.Migration is simple, quick, and safe.

PowerShell 7 est pris en charge sur les systèmes d'exploitation Windows suivants :PowerShell 7 is supported on the following Windows operating systems:

  • Windows 8.1 et 10Windows 8.1 and 10
  • Windows Server 2012, 2012 R2, 2016 et 2019Windows Server 2012, 2012 R2, 2016, and 2019

PowerShell 7 s’exécute également sur macOS et plusieurs distributions Linux.PowerShell 7 also runs on macOS and several Linux distributions. 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.For a list of supported operating systems and information about the support lifecycle, see the PowerShell Support Lifecycle.

Installation de PowerShell 7Installing 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.For flexibility and to support the needs of IT, DevOps engineers, and developers, there are several options available to install PowerShell 7. Dans la plupart des cas, les options d’installation peuvent se limiter aux méthodes suivantes :In most cases, the installation options can be reduced to the following methods:

Notes

Le package MSI peut être déployé et mis à jour avec des produits de gestion, notamment System Center Configuration Manager (SCCM).The MSI package can be deployed and updated with management products such as System Center Configuration Manager (SCCM). Téléchargez les packages à partir de la page de mise en production GitHub.Download the packages from GitHub Release page.

Le déploiement du package MSI nécessite une autorisation d’administrateur.Deploying the MSI package requires Administrator permission. Le package ZIP peut être déployé par n’importe quel utilisateur.The ZIP package can be deployed by any user. 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.The ZIP package is the easiest way to install PowerShell 7 for testing, before committing to a full installation.

Utilisation de PowerShell 7 côte à côte avec Windows PowerShell 5.1Using PowerShell 7 side-by-side with Windows PowerShell 5.1

PowerShell 7 est conçu pour coexister avec Windows PowerShell 5.1.PowerShell 7 is designed to coexist with Windows PowerShell 5.1. Les fonctionnalités suivantes protègent votre investissement dans PowerShell et simplifient la migration vers PowerShell 7.The following features ensure that your investment in PowerShell is protected and your migration to PowerShell 7 is simple.

  • Chemins d’installation et noms d’exécutables distinctsSeparate installation path and executable name
  • PSModulePath distinctSeparate PSModulePath
  • Profils distincts pour chaque versionSeparate profiles for each version
  • Compatibilité améliorée des modulesImproved module compatibility
  • Nouveaux points de terminaison de communication à distanceNew remoting endpoints
  • Prise en charge de la stratégie de groupeGroup policy support
  • Journaux d’événements distinctsSeparate Event logs

Chemins d’installation et noms d’exécutables distinctsSeparate installation path and executable name

PowerShell 7 s’installe dans un nouveau répertoire, permettant une exécution côte à côte avec Windows PowerShell 5.1.PowerShell 7 installs to a new directory, enabling side-by-side execution with Windows PowerShell 5.1.

Emplacements d’installation par version :Install locations by version:

  • Windows PowerShell 5.1 : $env:WINDIR\System32\WindowsPowerShell\v1.0Windows PowerShell 5.1: $env:WINDIR\System32\WindowsPowerShell\v1.0
  • PowerShell Core 6.x : $env:ProgramFiles\PowerShell\6PowerShell Core 6.x: $env:ProgramFiles\PowerShell\6
  • PowerShell 7 : $env:ProgramFiles\PowerShell\7PowerShell 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.The new location is added to your PATH allowing you to run both Windows PowerShell 5.1 and PowerShell 7. Si vous effectuez une migration de PowerShell Core 6.x vers PowerShell 7, PowerShell 6 est supprimé et le chemin d’accès remplacé.If you're migrating from PowerShell Core 6.x to PowerShell 7, PowerShell 6 is removed and the PATH replaced.

Dans Windows PowerShell, l’exécutable PowerShell est nommé powershell.exe.In Windows PowerShell, the PowerShell executable is named powershell.exe. Dans la version 6 et versions ultérieures, l’exécutable est nommé pwsh.exe.In version 6 and above, the executable is named pwsh.exe. Le nouveau nom facilite la prise en charge de l’exécution côte à côte des deux versions.The new name makes it easy to support side-by-side execution of both versions.

PSModulePath distinctSeparate PSModulePath

Par défaut, Windows PowerShell et PowerShell 7 stockent les modules à différents emplacements.By default, Windows PowerShell and PowerShell 7 store modules in different locations. PowerShell 7 combine ces emplacements dans la variable d’environnement $Env:PSModulePath.PowerShell 7 combines those locations in the $Env:PSModulePath environment variable. Lors de l’importation d’un module par nom, PowerShell vérifie l’emplacement spécifié par $Env:PSModulePath.When importing a module by name, PowerShell checks the location specified by $Env:PSModulePath. Cela permet à PowerShell 7 de charger à la fois les modules de base et de bureau.This allows PowerShell 7 to load both Core and Desktop modules.

Étendue InstallInstall Scope Windows PowerShell 5.1Windows PowerShell 5.1 PowerShell 7.0PowerShell 7.0
Modules PowerShellPowerShell modules $env:WINDIR\system32\WindowsPowerShell\v1.0\Modules $PSHOME\Modules
Installé par l’utilisateurUser installed
Étendue AllUsersAllUsers scope
$env:ProgramFiles\WindowsPowerShell\Modules $env:ProgramFiles\PowerShell\Modules
Installé par l’utilisateurUser installed
Étendue CurrentUserCurrentUser scope
$HOME\Documents\WindowsPowerShell\Modules $HOME\Documents\PowerShell\Modules

Les exemples suivants montrent les valeurs par défaut de $Env:PSModulePath pour chaque version.The following examples show the default values of $Env:PSModulePath for each version.

  • Pour Windows PowerShell 5.1 :For 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 :For 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.Notice that PowerShell 7 includes the Windows PowerShell paths and the PowerShell 7 paths to provide autoloading of 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.Additional paths may exist if you have changed the PSModulePath environment variable or installed custom modules or applications.

Pour plus d’informations, consultez PSModulePath dans about_Environment_Variables.For more information, see PSModulePath in about_Environment_Variables.

Pour plus d'informations sur les modules, consultez about_Modules.For more information about Modules, see about_Modules.

Profils distinctsSeparate profiles

Un profil PowerShell est un script qui s’exécute au démarrage de PowerShell.A PowerShell profile is a script that executes when PowerShell starts. Ce script personnalise votre environnement en ajoutant des commandes, des alias, des fonctions, des variables, des modules et des lecteurs PowerShell.This script customizes your environment by adding commands, aliases, functions, variables, modules, and PowerShell drives. Le script de profil rend ces personnalisations disponibles dans chaque session, sans avoir à les recréer manuellement.The profile script makes these customizations available in every session without having to manually recreate them.

Le chemin d’accès vers l’emplacement du profil a changé dans PowerShell 7.The path to the location of the profile has changed in PowerShell 7.

  • Dans Windows PowerShell 5,1, l’emplacement du profil est $HOME\Documents\WindowsPowerShell.In Windows PowerShell 5.1, the location of the profile is $HOME\Documents\WindowsPowerShell.
  • Dans PowerShell 7, l’emplacement du profil est $HOME\Documents\PowerShell.In PowerShell 7, the location of the profile is $HOME\Documents\PowerShell.

Les noms des fichiers de profil ont également changé :The profile filenames have also changed:

PS> $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.For more information about_Profiles.

Compatibilité de PowerShell 7 avec les modules Windows PowerShell 5.1PowerShell 7 compatibility with Windows PowerShell 5.1 modules

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.Most of the modules you use in Windows PowerShell 5.1 already work with PowerShell 7, including Azure PowerShell and 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.We're continuing to work with other teams to add native PowerShell 7 support for more modules including Microsoft Graph, Office 365, and others. Pour obtenir la liste actuelle des modules pris en charge, consultez Compatibilité des modules PowerShell 7.For the current list of supported modules, see PowerShell 7 module compatibility.

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.On Windows, we've also added a UseWindowsPowerShell switch to Import-Module to ease the transition to PowerShell 7 for those using incompatible modules. Pour plus d’informations sur cette fonctionnalité, consultez about_Windows_PowerShell_Compatibility.For more information on this functionality, see about_Windows_PowerShell_Compatibility.

Communication à distance PowerShellPowerShell Remoting

La communication à distance PowerShell, vous permet d'exécuter n'importe quelle commande PowerShell sur un ou plusieurs ordinateurs distants.PowerShell remoting lets you run any PowerShell command on one or more remote computers. Vous pouvez établir des connexions persistantes, démarrer des sessions interactives et exécuter des scripts sur ordinateurs distants.You can establish persistent connections, start interactive sessions, and run scripts on remote computers.

Communication à distance WS-ManagementWS-Management remoting

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 PowerShell 5.1 and below use the WS-Management (WSMAN) protocol for connection negotiation and data transport. Windows Remote Management (WinRM) utilise le protocole WSMAN.Windows Remote Management (WinRM) uses the WSMAN protocol. 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.If WinRM has been enabled, PowerShell 7 uses the existing Windows PowerShell 5.1 endpoint named Microsoft.PowerShell for remoting connections. Pour mettre à jour PowerShell 7 afin d’inclure son propre point de terminaison, exécutez l’applet de commande Enable-PSRemoting.To update PowerShell 7 to include its own endpoint, run the Enable-PSRemoting cmdlet. Pour plus d’informations sur la connexion à des points de terminaison spécifiques, consultez Communication à distance WS-Management dans PowerShell CoreFor information about connecting to specific endpoints, see WS-Management Remoting in PowerShell Core

Pour utiliser la communication à distance Windows PowerShell, l'ordinateur distant doit être configuré pour la gestion à distance.To use Windows PowerShell remoting, the remote computer must be configured for remote management. Pour obtenir plus d’informations, notamment des instructions, voir about_Remote_Requirements.For more information, including instructions, see About Remote Requirements.

Pour plus d'informations sur l’utilisation de la communication à distance, consultez À propos de la communication à distanceFor more information about working with remoting, see About Remote

Communication à distance basée sur SSHSSH-based remoting

La communication à distance basée sur SSH a été ajoutée dans PowerShell Core 6.x pour prendre en charge d’autres systèmes d’exploitation qui ne peuvent pas utiliser des composants natifs Windows comme WinRM.SSH-based remoting was added in PowerShell Core 6.x to support other operating systems that can't use Windows native components like WinRM. La communication à distance SSH crée un processus hôte PowerShell sur l’ordinateur cible en tant que sous-système SSH.SSH remoting creates a PowerShell host process on the target computer as an SSH subsystem. 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.For details and examples on setting up SSH-based remoting on Windows or Linux, see: PowerShell remoting over SSH.

Notes

PowerShell Gallery (PSGallery) contient un module et une applet de commande qui configure automatiquement la communication à distance basée sur SSH.The PowerShell Gallery (PSGallery) contains a module and cmdlet that automatically configures SSH-based remoting. Installez le module Microsoft.PowerShell.RemotingTools à partir de PSGallery, puis exécutez l’applet de commande Enable-SSH.Install the Microsoft.PowerShell.RemotingTools module from the PSGallery and run the Enable-SSH cmdlet.

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.The New-PSSession, Enter-PSSession, and Invoke-Command cmdlets have new parameter sets to support SSH connections.

[-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.To create a remote session, specify the target computer with the HostName parameter and provide the user name with UserName. Lors de l’exécution des cmdlets de manière interactive, vous êtes invité à entrer un mot de passe.When running the cmdlets interactively, you're prompted for a password.

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.Alternatively, when using the HostName parameter, provide the username information followed by the at sign (@), followed by the computer name.

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.You may set up SSH key authentication using a private key file with the KeyFilePath parameter. Pour plus d’informations, consultez Gestion des clés OpenSSH.For more information, see OpenSSH Key Management.

Stratégie de groupe prise en chargeGroup Policy supported

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.PowerShell includes Group Policy settings to help you define consistent option values for servers in an enterprise environment. Ces paramètres comprennent ce qui suit :These settings include:

  • Configuration de session de console : définit un point de terminaison de configuration dans lequel PowerShell est exécuté.Console session configuration: Sets a configuration endpoint in which PowerShell is run.
  • Activer la journalisation des modules : définit la propriété LogPipelineExecutionDetails des modules.Turn on Module Logging: Sets the LogPipelineExecutionDetails property of modules.
  • Activer la journalisation de blocs de scripts PowerShell : active la journalisation détaillée de tous les scripts PowerShell.Turn on PowerShell Script Block Logging: Enables detailed logging of all PowerShell scripts.
  • Activer l’exécution des scripts : définit la stratégie d'exécution de PowerShell.Turn on Script Execution: Sets the PowerShell execution policy.
  • Activer la transcription PowerShell : active la capture d’entrée et de sortie de commandes PowerShell dans des transcriptions textuelles.Turn on PowerShell Transcription: enables capturing of input and output of PowerShell commands into text-based transcripts.
  • 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.Set the default source path for Update-Help: Sets the source for Updatable Help to a directory, not the Internet.

Pour plus d’informations, consultez about_Group_Policy_Settings.For more information, see about_Group_Policy_Settings.

PowerShell 7 comprend des modèles de stratégie de groupe et un script d’installation dans $PSHOME.PowerShell 7 includes Group Policy templates and an installation script in $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.Group Policy tools use administrative template files (.admx, .adml) to populate policy settings in the user interface. Cela permet aux administrateurs de gérer les paramètres de stratégie basés sur le registre.This allows administrators to manage registry-based policy settings. Le script InstallPSCorePolicyDefinitions.ps1 installe les modèles d’administration PowerShell Core sur l’ordinateur local.The InstallPSCorePolicyDefinitions.ps1 script installs PowerShell Core Administrative Templates on the local machine.

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 distinctsSeparate Event Logs

Windows PowerShell et PowerShell 7 journalisent les événements dans des journaux d’événements distincts.Windows PowerShell and PowerShell 7 log events to separate event logs. Utilisez la commande suivante pour obtenir la liste des journaux PowerShell.Use the following command to get a list of the PowerShell logs.

Get-WinEvent -ListLog *PowerShell*

Pour plus d’informations, consultez about_Logging_Windows.For more information, see about_Logging_Windows.

Amélioration de l’expérience de modification avec Visual Studio CodeImproved editing experience with Visual Studio Code

Visual Studio Code (VSCode) avec l’extension PowerShell est l’environnement de script pris en charge pour PowerShell 7.Visual Studio Code (VSCode) with the PowerShell Extension is the supported scripting environment for PowerShell 7. Windows PowerShell Integrated Scripting Environment (ISE) prend uniquement en charge Windows PowerShell.The Windows PowerShell Integrated Scripting Environment (ISE) only supports Windows PowerShell.

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

  • Nouveau mode de compatibilité ISENew ISE compatibility mode
  • 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èrePSReadLine in the Integrated Console, including syntax highlighting, multi-line editing, and back search
  • Améliorations en matière de stabilité et de performancesStability and performance improvements
  • Nouvelle intégration CodeLensNew CodeLens integration
  • Amélioration de la saisie semi-automatique du cheminImproved path auto-completion

Pour faciliter la transition vers Visual Studio Code, utilisez la fonction Activer le mode ISE, disponible dans la palette de commandes.To make the transition to Visual Studio Code easier, use the Enable ISE Mode function available in the Command Palette. Cette fonction bascule VSCode dans une disposition de style ISE.This function switches VSCode into an ISE-style layout. La disposition de style ISE vous offre toutes les nouvelles fonctionnalités et capacités de PowerShell dans une expérience utilisateur familière.The ISE-style layout gives you all the new features and capabilities of PowerShell in a familiar user experience.

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.To switch to the new ISE layout, press Ctrl+Shift+P to open the Command Palette, type PowerShell and select PowerShell: Enable ISE Mode.

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).To set the layout to the original layout, open the Command Palette, select PowerShell: Disable ISE Mode (restore to defaults).

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 CodeFor details about customizing the VSCode layout to ISE, see How to Replicate the ISE Experience in Visual Studio Code

Notes

Aucune mise à jour de l’environnement ISE avec de nouvelles fonctionnalités n’est prévue.There no plans to update the ISE with new features. L’environnement ISE est désormais une fonctionnalité qui n’est pas installée par l’utilisateur dans les dernières versions de Windows 10 et Windows Server.The ISE is now a user-uninstallable feature in the latest versions of Windows 10 and Windows Server. Il n’est pas prévu de supprimer définitivement l’environnement ISE.There are no plans to permanently remove the 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.The PowerShell Team and its partners are focused on improving the scripting experience in the PowerShell extension for Visual Studio Code.

Étapes suivantesNext Steps

Maintenant que vous possédez les connaissances requises pour réussir votre migration, installez PowerShell 7 !Armed with the knowledge to effectively migrate, install PowerShell 7 now!