Nouveautés de PowerShell 7.0

PowerShell 7.0 est une édition de multiplateforme open source (Windows, macOS et Linux) conçue pour gérer des environnements hétérogènes et le cloud hybride.

Dans cette version, nous présentons plusieurs fonctionnalités, notamment les suivantes :

  • Parallélisation de pipeline avec ForEach-Object -Parallel
  • Nouveaux opérateurs :
    • Opérateur ternaire : a ? b : c
    • Opérateurs de chaîne de pipeline : || et &&
    • Opérations conditionnelles Null : ?? et ??=
  • Un affichage des erreurs simplifié et dynamique ainsi qu’une cmdlet Get-Error pour étudier plus facilement les erreurs
  • Une couche de compatibilité qui permet aux utilisateurs d’importer des modules dans une session Windows PowerShell implicite
  • Notifications automatiques en cas de nouvelles versions
  • La possibilité d’appeler des ressources DSC directement à partir de PowerShell 7 (stade expérimental)

Pour afficher une liste complète des fonctionnalités et des correctifs, consultez les journaux des modifications.

Où puis-je installer PowerShell ?

PowerShell 7 prend actuellement en charge les systèmes d’exploitation suivants sur x64, notamment :

  • Windows 8.1 et 10
  • Windows Server 2012, 2012 R2, 2016 et 2019
  • macOS 10.13+
  • Red Hat Enterprise Linux (RHEL) / CentOS 7
  • Fedora 30+
  • Debian 9
  • Ubuntu LTS 16.04+
  • Alpine Linux 3.8+

En outre, PowerShell 7.0 prend en charge les versions ARM32 et ARM64 de Debian, Ubuntu et ARM64 Alpine Linux.

Consultez les instructions d’installation pour votre système d’exploitation par défaut Windows, macOS ou Linux.

Bien qu’ils ne soit pas officiellement pris en charge, la communauté a également fourni des packages pour Arch et Kali Linux.

Notes

Debian 10 et CentOS 8 ne prennent actuellement pas en charge la communication à distance WinRM. Pour plus d’informations sur la configuration de la communication à distance basée sur SSH, consultez Communication à distance PowerShell via SSH.

Pour plus d’informations à jour sur les systèmes d’exploitation pris en charge et le cycle de vie de support, consultez le cycle de vie du support PowerShell.

Exécution de PowerShell 7

PowerShell 7 s’installe dans un répertoire distinct de Windows PowerShell. Cela vous permet d’exécuter PowerShell 7 côte à côte avec Windows PowerShell 5.1. Pour PowerShell 6.x, PowerShell 7 est une mise à niveau sur place qui supprime PowerShell 6.x.

  • PowerShell 7 est installé sur %programfiles%\PowerShell\7
  • Le dossier %programfiles%\PowerShell\7 est ajouté à $env:PATH

Le package d’installation PowerShell 7 met à niveau les versions précédentes de PowerShell 6.x :

  • PowerShell 6.x sur Windows : %programfiles%\PowerShell\6 est remplacé par %programfiles%\PowerShell\7
  • Linux : /opt/microsoft/powershell/6 est remplacée par /opt/microsoft/powershell/7
  • macOS : /usr/local/microsoft/powershell/6 est remplacée par /usr/local/microsoft/powershell/7

Notes

Dans Windows PowerShell, l’exécutable permettant de lancer PowerShell est nommé powershell.exe. Dans la version 6 et les versions ultérieures, le nom de l’exécutable est modifié pour prendre en charge l’exécution côte à côte. Le nouveau nom de l’exécutable permettant de lancer PowerShell 7 est pwsh.exe. Les builds préliminaires sont conservées en tant que pwsh-preview au lieu de pwsh sous le répertoire 7-préversion.

Compatibilité descendante avec Windows PowerShell améliorée

PowerShell 7.0 marque un passage à .NET Core 3.1, ce qui permet d’améliorer significativement la compatibilité descendante avec les modules Windows PowerShell existants. Ceci inclut de nombreux modules sur Windows qui nécessitent une fonctionnalité GUI comme Out-GridView et Show-Command, ainsi que de nombreux modules de gestion des rôles fournis avec Windows.

Pour Windows, un nouveau paramètre de commutateur UseWindowsPowerShell est ajouté à Import-Module. Ce commutateur crée un module proxy dans PowerShell 7, qui utilise un processus Windows PowerShell local pour exécuter implicitement toutes les cmdlets contenues dans ce module. Pour plus d’informations sur Import-Module.

Pour plus d’informations sur les modules Microsoft fonctionnant avec PowerShell 7.0, consultez le tableau de compatibilité des modules.

Exécution parallèle ajoutée à ForEach-Object

La cmdlet ForEach-Object, qui itère des éléments dans une collection, dispose maintenant d’un parallélisme intégré avec le nouveau paramètre Parallèle.

Par défaut, les blocs de scripts parallèles utilisent le répertoire de travail actuel de l’appelant qui a démarré les tâches parallèles.

Dans cet exemple, 50 000 entrées de 5 journaux système sont récupérées sur un ordinateur local Windows :

$logNames = 'Security','Application','System','Windows PowerShell','Microsoft-Windows-Store/Operational'

$logEntries = $logNames | ForEach-Object -Parallel {
    Get-WinEvent -LogName $_ -MaxEvents 10000
} -ThrottleLimit 5

$logEntries.Count

50000

Le paramètre Parallèle spécifie le bloc de script exécuté en parallèle pour chaque nom du journal d’entrée.

Le nouveau paramètre ThrottleLimit limite le nombre de blocs de scripts exécutés en parallèle à un moment donné. La valeur par défaut est 5.

Utilisez la variable $_ pour représenter l'objet d’entrée actuel dans le bloc de script. Utilisez l’étendue $using: pour transférer des références de variable vers le bloc de script en cours d’exécution.

Pour plus d’informations sur ForEach-Object.

Opérateur ternaire

PowerShell 7.0 introduit un opérateur ternaire qui se comporte comme une instruction if-else simplifiée. L’opérateur ternaire de PowerShell est étroitement modélisé à partir de la syntaxe C# de l’opérateur ternaire :

<condition> ? <if-true> : <if-false>

L’expression de condition est toujours évaluée et son résultat est converti en booléenne pour déterminer la prochaine branche à évaluer :

  • L’expression <if-true> est exécutée si l’expression <condition> a la valeur true
  • L’expression <if-false> est exécutée si l’expression <condition> a la valeur false

Par exemple :

$message = (Test-Path $path) ? "Path exists" : "Path not found"

Dans cet exemple, si le chemin existe, Le chemin existe s’affiche. Si le chemin n’existe pas, Chemin introuvable s’affiche.

Pour plus d’informations À propos de Si.

Opérateurs de chaîne de pipeline

PowerShell 7 implémente les opérateurs && et || pour attacher des pipelines de manière conditionnelle. Ces opérateurs sont connus dans PowerShell en tant qu’« opérateurs de chaîne de pipeline » et sont similaires à des listes AND et OR dans des interpréteurs de commandes tels que Bash et Zsh, de même que des symboles de traitement conditionnel dans l’interface de commande Windows (cmd.exe).

L’opérateur && exécute le pipeline droit si l’exécution du pipeline gauche a réussi. Inversement, l’opérateur || exécute le pipeline droit si l’exécution du pipeline gauche a échoué.

Notes

Ces opérateurs utilisent les variables $? et $LASTEXITCODE pour déterminer si un pipeline a échoué. Cela vous permet de les utiliser avec des commandes natives, et pas seulement avec des cmdlet ou des fonctions.

Ici, la première commande réussit et la deuxième commande est exécutée :

Write-Output 'First' && Write-Output 'Second'
First
Second

Ici, la première commande échoue et la deuxième commande n’est pas exécutée :

Write-Error 'Bad' && Write-Output 'Second'
Write-Error: Bad

Ici, la première commande réussit, la deuxième commande n’est pas exécutée :

Write-Output 'First' || Write-Output 'Second'
First

Ici, la première commande échoue, donc la deuxième commande est exécutée :

Write-Error 'Bad' || Write-Output 'Second'
Write-Error 'Bad'
Second

Pour plus d'informations À propos des opérateurs de chaîne de pipeline.

Coalesence Null, assignation et opérateurs conditionnels

PowerShell 7 inclut l’opérateur de coalescence Null ??, l’assignation conditionnelle Null ??= et les opérateurs d’accès conditionnel des membres ?. et ?[].

Opérateur de coalescence Null ??

L’opérateur de coalescence Null ?? retourne la valeur de son opérande gauche s’il n’est pas Null. Dans le cas contraire, il évalue l’opérande droit et retourne son résultat. L’opérateur ?? n’évalue pas son opérande droit si l’opérande gauche a la valeur non Null.

$x = $null
$x ?? 100
100

Dans l’exemple suivant, l’opérande droit n’est pas évalué :

[string] $todaysDate = '1/10/2020'
$todaysDate ?? (Get-Date).ToShortDateString()
1/10/2020

Opérateur d’assignation conditionnelle Null ??=

L’opérateur d’assignation conditionnelle Null ??= assigne la valeur de son opérande droit à son opérande gauche uniquement si l’opérande gauche a la valeur Null. L’opérateur ??= n’évalue pas son opérande droit si l’opérande gauche a la valeur non null.

$x = $null
$x ??= 100
$x
100

Dans l’exemple suivant, l’opérande droit n’est pas évalué :

[string] $todaysDate = '1/10/2020'
$todaysDate ??= (Get-Date).ToShortDateString()
1/10/2020

Opérateurs d’accès conditionnel des membres Null ?. et ?[] (Expérimental)

Notes

Il s’agit d’une fonctionnalité expérimentale nommée PSNullConditionalOperators. Pour plus d’informations, consultez Utilisation des fonctionnalités expérimentales.

Un opérateur conditionnel Null n’autorise les membres, ?., ou les éléments, ?[], à accéder à son opérande que si cet opérande a la valeur non Null ; sinon, il retourne la valeur Null.

Notes

Étant donné que PowerShell permet à ? de faire partie du nom de la variable, la spécification formelle du nom de la variable est requise pour l’utilisation de ces opérateurs. Il est donc nécessaire d’utiliser {} autour des noms de variables comme ${a} ou lorsque ? fait partie du nom de la variable ${a?}.

Dans l’exemple suivant, la valeur de la propriété de membre État est retournée :

$Service = Get-Service -Name 'bits'
${Service}?.status
Stopped

L’exemple suivant retourne la valeur Null, sans essayer d’accéder au nom du membre État :

$service = $Null
${Service}?.status

De même, avec ?[], la valeur de l’élément est retournée :

$a = 1..10
${a}?[0]
1

Et lorsque l’opérande a la valeur Null, l’élément n’est pas accessible et la valeur Null est retournée :

$a = $null
${a}?[0]

Pour plus d’informations About_Operators.

Nouvelle vue ConciseView et cmdlet Get-Error

PowerShell 7.0 optimise l’affichage des messages d’erreur pour améliorer la lisibilité des erreurs de script et interactives avec un nouvel affichage par défaut ConciseView. Les affichages peuvent être sélectionnées par l’utilisateur via la variable de préférence $ErrorView.

Avec ConciseView, si une erreur ne provient pas d’un script ou d’un analyseur, le message d’erreur a une seule ligne :

Get-Childitem -Path c:\NotReal
Get-ChildItem: Cannot find path 'C:\NotReal' because it does not exist

Si l’erreur se produit pendant l’exécution du script ou s’il s’agit d’une erreur d’analyse, PowerShell retourne un message d’erreur de plusieurs lignes contenant l’erreur, un pointeur et un message d’erreur qui indique l’emplacement de l’erreur dans cette ligne. Si le terminal ne prend pas en charge les séquences d’échappement de couleur ANSI (VT100), les couleurs ne sont pas affichées.

Affichage d’erreur à partir d’un script

L’affichage par défaut dans PowerShell 7 est ConciseView. La vue par défaut précédente était NormalView et vous pouvez la sélectionner en définissant la variable de préférence $ErrorView.

$ErrorView = 'NormalView' # Sets the error view to NormalView
$ErrorView = 'ConciseView' # Sets the error view to ConciseView

Notes

Une nouvelle propriété ErrorAccentColor est ajoutée à $Host.PrivateData pour prendre en charge la modification de la couleur d’accentuation du message d’erreur.

Une nouvelle cmdlet Get-Error fournit un affichage détaillé de l’erreur complète si vous le souhaitez. Par défaut, la cmdlet affiche les détails complets, notamment les exceptions internes, de la dernière erreur qui s’est produite.

Afficher à partir de la Get-Error

La cmdlet Get-Error prend en charge l’entrée du pipeline à l’aide de la variable intégrée $Error. Get-Error affiche toutes les erreurs communiquées.

$Error | Get-Error

La cmdlet Get-Error prend en charge le paramètre le plus récent, ce qui vous permet de spécifier le nombre d’erreurs de la session active que vous souhaitez afficher.

Get-Error -Newest 3 # Displays the lst three errors that occurred in the session

Pour plus d’informations sur Get-Error.

Notification en cas de nouvelle version

PowerShell 7 utilise des notifications de mise à jour pour avertir les utilisateurs de l’existence de mises à jour de PowerShell. Une fois par jour, PowerShell interroge un service en ligne pour déterminer si une version plus récente est disponible.

Notes

La vérification des mises à jour a lieu pendant la première session sur une période donnée de 24 heures. Pour des raisons de performances, la vérification des mises à jour démarre 3 secondes après le début de la session. La notification s’affiche uniquement au début des sessions suivantes.

Par défaut, PowerShell s’abonne à l’un des deux canaux de notification différents en fonction de sa version/branche. Les versions de PowerShell prises en charge généralement disponibles ne retournent de notifications que pour les versions mises à jour en disponibilité générale (GA). La préversion et la version finale (RC) informent des mises à jour de la préversion, de la version finale (RC) et de la version en disponibilité générale (GA).

Le comportement de notification de mise à jour peut être modifié à l’aide de la variable d’environnement $Env:POWERSHELL_UPDATECHECK. Les valeurs suivantes sont admises :

  • Par défaut revient à ne pas définir $Env:POWERSHELL_UPDATECHECK
    • Les versions en disponibilité générale (GA) informent des mises à jour des versions GA
    • La préversion/les versions finales (RC) informent des mises à jour des versions en disponibilité générale (GA) et des préversions.
  • Désactiver désactive la fonctionnalité de notification de mise à jour
  • LTS signale uniquement les mises à jour des versions GA LTS (Long-Term-Servicing)

Notes

La variable d’environnement $Env:POWERSHELL_UPDATECHECK n’existe pas tant qu’elle n’est pas définie pour la première fois.

Pour définir la notification de version pour les versions de LTS uniquement :

$Env:POWERSHELL_UPDATECHECK = 'LTS'

Pour définir la notification de version pour le comportement Default uniquement :

$Env:POWERSHELL_UPDATECHECK = 'Default'

Pour plus d'informations À propos des notifications de mise à jour.

Nouvelle prise en charge des ressources DSC avec Invoke-DSCResource (expérimental)

Notes

Il s’agit d’une fonctionnalité expérimentale nommée PSDesiredStateConfiguration.InvokeDscResource. Pour plus d’informations, consultez Utilisation des fonctionnalités expérimentales.

La cmdlet Invoke-DscResource exécute une méthode d’une ressource Desired State Configuration (DSC) PowerShell spécifiée.

Cette cmdlet appelle directement une ressource DSC sans créer de document de configuration. À l’aide de cette cmdlet, les produits de gestion de la configuration peuvent gérer Windows ou Linux à l’aide de ressources DSC. Cette cmdlet de commande permet également de déboguer des ressources lorsque le moteur DSC s’exécute avec le débogage activé.

Cette commande appelle la méthode Set d’une ressource nommée WindowsProcess et fournit les propriétés obligatoires Path et Arguments pour démarrer le processus Windows spécifié.

Invoke-DscResource -Name WindowsProcess -Method Set -ModuleName PSDesiredStateConfiguration -Property @{
  Path = 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'
  Arguments = ''
}

Pour plus d’informations sur Invoke-DSCResource.

Dernières modifications et améliorations

Dernières modifications

  • Prise en charge de LTS et des canaux par défaut par la notification de mise à jour (#11132)
  • Mise à jour de Test-Connection pour qu’elle fonctionne de façon plus similaire à Windows PowerShell (#10697) (merci à @vexx32!)
  • Preserve $? pour ParenExpression, SubExpression et ArrayExpression (#11040)
  • Définition du répertoire de travail en répertoire actuel dans Start-Job (#10920) (merci à @iSazonov!)
  • Reflet cohérent par $PSCulture des changements de culture dans la session (#10138) (merci à @iSazonov!)

Mises à jour et correctifs du moteur

  • Améliorations des API de point d’arrêt pour les scénarios distants (#11312)
  • Correction de la fuite de définition de classe PowerShell dans une autre instance d’exécution (#11273)
  • Correction d’une régression dans la mise en forme provoquée par la primitive FirstOrDefault ajoutée à 7.0.0-Preview1 (#11258)
  • Modules Microsoft supplémentaires à suivre dans la télémétrie PS7 (#10751)
  • Transformation des fonctionnalités approuvées en fonctionnalités non expérimentales (#11303)
  • Mise à jour de ConciseView pour utiliser TargetObject le cas échéant (#11075)
  • Correction de NullReferenceException dans les méthodes publiques CompletionCompleters (#11274)
  • Correction de la vérification de l’état du cloisonnement de threads sur les plateformes non-Windows (#11301)
  • Mise à jour du paramètre PSModulePath pour concaténer les variables d’environnement du processus et de l’ordinateur (#11276)
  • Passage de .NET Core à 3.1.0 (#11260)
  • Correction de la détection de $PSHOME devant $env:PATH (#11141)
  • Autorisation pour pwsh d’hériter de $env:PSModulePath et d’activer powershell.exe pour démarrer correctement (#11057)
  • Passage à .NET Core 3.1 préversion 1 (#10798)
  • Refactorisation des vérifications d’étiquettes d’analyse dans le fournisseur du système de fichiers (#10431) (merci à @iSazonov!)
  • Remplacement de CR et de la nouvelle ligne par un caractère 0x23CE dans la journalisation des scripts (#10616)
  • Correction d’une fuite de ressources en annulant l’inscription du gestionnaire d’événements dans AppDomain.CurrentDomain.ProcessExit (#10626)
  • Ajout à ActionPreference.Break d’une prise en charge de l’arrêt dans le débogueur quand des messages de débogage, d’erreur, d’information, de progression, de commentaires ou d’avertissement sont générés (#8205) (merci à @KirkMunro!)
  • Activation du démarrage des compléments du panneau de configuration dans PowerShell sans spécifier une extension .CPL. (#9828)
  • Prise en charge des nombres négatifs dans l’opérateur -split (#8960) (merci à @ece-jacob-scott!)

Mises à jour et correctifs d’applets de commande générales

  • Correction du problème sur Raspbian pour la définition de la date des modifications de fichier dans la fonctionnalité expérimentale UnixStat (#11313)
  • Ajout de -AsPlainText à ConvertFrom-SecureString (#11142)
  • Vérification de la version de WindowsPS ajoutée pour WinCompat (#11148)
  • Correction des rapports d’erreur dans certains scénarios WinCompat (#11259)
  • Ajout d’un résolveur binaire natif (#11032) (merci à @iSazonov!)
  • Mise à jour du calcul de la largeur de char pour respecter correctement les chars CJK (#11262)
  • Ajout d’Unblock-File pour macOS (#11137)
  • Correction de la régression dans Get-PSCallStack (#11210) (merci à @iSazonov!)
  • Suppression du chargement automatique du module ScheduledJob lors de l’utilisation de cmdlets de tâches (#11194)
  • Ajout d’OutputType à la cmdlet Get-Error et conservation du nom de type (#10856)
  • Correction de la référence null dans la propriété SupportsVirtualTerminal (#11105)
  • Ajout de la vérification de la limite dans Get-WinEvent (#10648) (merci à @iSazonov!)
  • Correction du runtime de telle manière que StopUpstreamCommandsException ne soit pas rempli dans -ErrorVariable (#10840)
  • Définition de l’encodage de sortie sur [console]::OutputEncoding pour les commandes natives (#10824)
  • Prise en charge des blocs de code multilignes dans les exemples (#10776) (merci à @Greg-Smulko!)
  • Ajout d’un paramètre de culture à la cmdlet Select-String (#10943) (merci à @iSazonov!)
  • Correction du chemin du répertoire de Start-Job avec la barre oblique inverse de fin (#11041)
  • ConvertFrom-Json : Désencapsulage des collections par défaut (#10861) (merci à @danstur!)
  • Utilisation d’une table de hachage respectant la casse pour la cmdlet Group-Object avec les commutateurs -CaseSensitive et -AsHashtable (#11030) (merci à @vexx32!)
  • Gestion d’exception en cas d’échec de l’énumération des fichiers lors de la reconstruction du chemin pour obtenir une casse correcte (#11014)
  • Correction de ConciseView pour afficher l’activité au lieu de myCommand (#11007)
  • Possibilité pour les cmdlets web d’ignorer les états d’erreur HTTP (#10466) (merci à @vdamewood!)
  • Correction de la canalisation de plusieurs CommandInfo vers Get-Command (#10929)
  • Rajout de l’applet de commande pour Windows (#10933)
  • Traitement de [AutomationNull]::Value et [NullString]::Value en tant que $null par ConvertTo-JSON (#10957)
  • Suppression des crochets de l’adresse ipv6 pour la communication à distance SSH (#10968)
  • Correction d’incident si la commande envoyée à pwsh est simplement un espace blanc (#10977)
  • Ajout de Get-Clipboard et Set-Clipboard multiplateformes (#10340)
  • Correction du paramètre du chemin d’origine de l’objet système de fichiers pour qu’il n’ait pas de barre oblique de fin supplémentaire (#10959)
  • Prise en charge de $Null pour ConvertTo-Json (#10947)
  • Rajout de la commande Out-Printer sur Windows (#10906)
  • Correction de Start-Job-WorkingDirectory avec un espace blanc (#10951)
  • Retourner la valeur par défaut lors de l’obtention de Null pour un paramètre dans PSConfiguration.cs (#10963) (merci à @iSazonov!)
  • Gestion de l’exception d’E/S comme étant sans fin d’exécution (#10950)
  • Ajout d’un assembly GraphicalHost pour activer Out-GridView, Show-Command et Get-Help-ShowWindow (#10899)
  • Prise en compte de ComputerName via pipeline dans Get-HotFix (#10852) (merci à @kvprasoon!)
  • Correction de la saisie semi-automatique des paramètres via la touche Tab pour afficher les paramètres communs disponibles (#10850)
  • Correction de GetCorrectCasedPath() pour commencer par vérifier si des entrées de fichier système sont retournées avant d’appeler First() (#10930)
  • Définition du répertoire de travail en répertoire actuel dans Start-Job (#10920) (merci à @iSazonov!)
  • Modification de TabExpansion2 pour ne pas demander -CursorColumn et traitement en tant que $InputScript.Length (#10849)
  • Gestion au cas où l’hôte ne peut pas retourner des lignes ou des colonnes d’écran (#10938)
  • Correction de l’utilisation des couleurs d’accentuation pour les hôtes qui ne les prennent pas en charge (#10937)
  • Rajout de la commande Update-List (#10922)
  • Mise à jour de l’ID FWLink pour Clear-RecycleBin (#10925)
  • Lors de la saisie semi-automatique via la touche Tab, ignorer le fichier si la lecture de ses attributs est impossible (#10910)
  • Rajout de Clear-RecycleBin pour Windows (#10909)
  • Ajout de $env:__SuppressAnsiEscapeSequences pour contrôler s’il faut avoir une séquence d’échappement VT dans la sortie (#10814)
  • Ajout du paramètre NoEmphasize pour colorier la sortie de Select-String (#8963) (merci à @derek-xia!)
  • Rajout de la cmdlet Get-HotFix (#10740)
  • Add-Type rendu utilisable dans les applications qui hébergent PowerShell (#10587)
  • Utilisation d’un ordre d’évaluation plus efficace dans LanguagePrimitives.IsNullLike() (#10781) (merci à @vexx32!)
  • Amélioration de la gestion de l’entrée redirigée de collection mixte et des flux d’entrée redirigés dans Format-Hex (#8674) (merci à @vexx32!)
  • Utilisation de la conversion de type dans les tables de hachage SSHConnection quand la valeur ne correspond pas au type attendu (#10720) (merci à @SeeminglyScience!)
  • Correction du comportement de Get-Content -ReadCount 0 quand -TotalCount est défini (#10749) (merci à @eugenesmlv!)
  • Message d’erreur d’accès de reformulation refusé dans Get-WinEvent (#10639) (merci à @iSazonov!)
  • Activation de la saisie semi-automatique via la touche Tab pour l’affectation de variable qui est une énumération ou un type avec restriction (#10646)
  • Suppression de la propriété de communication à distance SourceLength inutilisée provoquant des problèmes de mise en forme (#10765)
  • Ajout du paramètre -Delimiter à ConvertFrom-StringData (#10665) (merci à @steviecoaster!)
  • Ajout du paramètre de position pour ScriptBlock quand Invoke-Command est utilisé avec SSH (#10721) (merci à @machgo!)
  • Affichage d’informations de contexte de ligne s’il y a plusieurs lignes, mais pas de nom de script pour ConciseView (#10746)
  • Ajout de la prise en charge des chemins \wsl$\ vers le fournisseur de système de fichiers (#10674)
  • Ajout du jeton manquant pour TokenKind.QuestionMark dans l’analyseur (#10706)
  • Définition du répertoire de travail actuel de chaque script d’exécution ForEach-Object-Parallel au même emplacement que le script appelant. (#10672)
  • Remplacement de api-ms-win-core-file-l1-2-2.dll par Kernell32.dll pour les API FindFirstStreamW et FindNextStreamW (#10680) (merci à @iSazonov!)
  • Adaptation du script d’aide à la mise en forme pour une meilleure tolérance StrictMode (#10563)
  • Ajout du paramètre -SecurityDescriptorSDDL à New-Service (#10483) (merci à @kvprasoon!)
  • Suppression de la sortie d’information, consolidation de l’utilisation du test ping dans Test-Connection (#10478) (merci à @vexx32!)
  • Lecture des points d’analyse spéciaux sans y accéder (#10662) (merci à @iSazonov!)
  • Sortie directe de Clear-Host sur le terminal (#10681) (merci à @iSazonov!)
  • Rajout d’une nouvelle ligne pour le regroupement avec Format-Table et -Property (#10653)
  • Suppression de [ValidateNotNullOrEmpty] de -InputObject sur Get-Random pour autoriser une chaîne vide (#10644)
  • Algorithme de distance de la chaîne système rendu insensible à la casse (#10549) (merci à @iSazonov!)
  • Correction de l’exception de référence Null dans le traitement de l’entrée ForEach-Object-Parallel (#10577)
  • Ajout de définitions de stratégie de groupe PowerShell (#10468)
  • Mise à jour de l’hôte de la console pour prendre en charge les séquences de contrôle XTPUSHSGR/XTPOPSGR VT utilisées dans les scénarios de composabilité. (#10208)
  • Ajout du paramètre WorkingDirectory à Start-Job (#10324) (merci à @davinci26!)
  • Suppression du gestionnaire d’événements à l’origine de la réplication erronée des modifications de point d’arrêt dans le débogueur de l’instance d’exécution de l’hôte (#10503) (merci à @KirkMunro!)
  • Remplacement de api-ms-win-core-job-12-1-0.dll par Kernell32.dll dans l’API Microsoft.PowerShell.Commands.NativeMethods P/Invoke (#10417) (merci à @iSazonov!)
  • Correction de la sortie incorrecte pour New-Service dans l’affectation de variable et -OutVariable (#10444) (merci à @kvprasoon!)
  • Résolution des problèmes d’outils globaux autour du code de sortie, des paramètres de ligne de commande et du chemin avec des espaces (#10461)
  • Correction de la récursivité dans OneDrive : modification de FindFirstFileEx() pour utiliser le type SafeFindHandle (#10405)
  • Chargement automatique de PSReadLine sur Windows ignoré si le lecteur d’écran NVDA est actif (#10385)
  • Passage des versions de module built-with-PowerShell vers 7.0.0.0 (#10356)
  • Ajout de la levée d’une erreur dans Add-Type si un type portant le même nom existe déjà (#9609) (merci à @iSazonov!)

Performances

  • Éviter d’utiliser la fermeture dans Parser.SaveError (#11006)
  • Amélioration de la mise en cache lors de la création d’instances Regex (#10657) (merci à @iSazonov!)
  • Amélioration du traitement des données de type PowerShell intégrées detypes.ps1xml, typesV3.ps1xml et GetEvent.types.ps1xml (#10898)
  • Mise à jour de PSConfiguration.ReadValueFromFile pour l’accélérer et augmenter l’efficacité de la mémoire (#10839)
  • Ajout d’améliorations mineures des performances pour l’initialisation de l’instance d’exécution (#10569) (merci à @iSazonov!)
  • Accélération de ForEach-Object pour ses scénarios couramment utilisés (#10454) et résolution du problème de performance ForEach-Object-Parallel avec de nombreuses instances d’exécution (#10455)

Nettoyage du code

  • Modification du texte des commentaires et des éléments pour respecter les normes Microsoft (#11304)
  • Problèmes de style de nettoyage dans Compiler.cs (#10368) (merci à @iSazonov!)
  • Suppression du convertisseur de type inutilisé pour CommaDelimitedStringCollection (#11000) (merci à @iSazonov!)
  • Style de nettoyage dans InitialSessionState.cs (#10865) (merci à @iSazonov!)
  • Nettoyage du code pour la classe PSSession (#11001)
  • Suppression de la fonctionnalité « exécuter Update-Help de Get-Help lorsque Get-Help s’exécute pour la première fois » (#10974)
  • Résolution des problèmes de style (#10998) (merci à @iSazonov!)
  • Nettoyage : utilisation de l’alias de type intégré (#10882) (merci à @iSazonov!)
  • Suppression de la clé de paramètre inutilisée ConsolePrompting et évitement d’une création de chaîne inutile lors de l’interrogation du paramètre ExecutionPolicy (#10985)
  • Désactivation du contrôle de notification de mise à jour pour les builds quotidiennes (#10903) (merci à @bergmeister!)
  • Rétablissement de l’API de débogage perdue dans #10338 (#10808)
  • Suppression de la référence WorkflowJobSourceAdapter qui n’est plus utilisée (#10326) (merci à @KirkMunro!)
  • Nettoyage des interfaces COM dans le code de la liste des sauts en corrigeant les attributs PreserveSig (#9899) (merci à @weltkante!)
  • Ajout d’un commentaire décrivant la raison pour laquelle -ia n’est pas l’alias du paramètre commun -InformationAction (#10703) (merci à @KirkMunro!)
  • Renommage d’InvokeCommandCmdlet.cs en InvokeExpressionCommand.cs (#10659) (merci à @kilasuit!)
  • Ajout des nettoyages de code mineurs relatifs aux notifications de mise à jour (#10698)
  • Suppression de la logique de workflow dépréciée des scripts d’installation de communication à distance (#10320) (merci à @KirkMunro!)
  • Mise à jour du format de l’aide pour utiliser la casse appropriée (#10678) (merci à @tnieto88!)
  • Nettoyage des problèmes de style de CodeFactor se produisant dans les validations pour le mois dernier (#10591) (merci à @iSazonov!)
  • Correction de la faute de frappe dans la description de la fonctionnalité expérimentale PSTernaryOperator (#10586) (merci à @bergmeister!)
  • Conversion de la valeur de l’énumération ActionPreference.Suspend en un état réservé non pris en charge et suppression de la restriction de l’utilisation de ActionPreference.Ignore dans les variables de préférence (#10317) (merci à @KirkMunro!)
  • Remplacement d’ArrayList par List<T> pour obtenir un code plus lisible et plus fiable sans modifier les fonctionnalités (#10333) (merci à @iSazonov!)
  • Corrections de style de code dans TestConnectionCommand (#10439) (merci à @vexx32!)
  • Nettoyage d’AutomationEngine et suppression de l’appel de méthode SetSessionStateDrive supplémentaire (#10416) (merci à @iSazonov!)
  • Renommage de ParameterSetName par défaut en séparateur pour ConvertTo-Csv et ConvertFrom-Csv (#10425)

Outils

  • Ajout du paramètre par défaut pour la propriété SDKToUse afin qu’elle soit générée dans VS (#11085)
  • Install-Powershell.ps1 : ajout d’un paramètre pour utiliser l’installation MSI (#10921) (merci à @MJECloud!)
  • Ajout d’exemples de base pour install-PowerShell.ps1 (#10914) (merci à @kilasuit!)
  • Possibilité de gestion d’une chaîne vide par Install-PowerShellRemoting.ps1 dans le paramètre PowerShellHome (#10526) (merci à @Orca88!)
  • Passage de /etc/lsb-release à /etc/os-release dans install-powershell.sh (#10773) (merci à @Himura2la!)
  • Vérification de pwsh.exe et de pwsh dans la version quotidienne sur Windows (#10738) (merci à @centreboard!)
  • Suppression de l’actionnement inutile dans installpsh-osx.sh (#10752)
  • Mise à jour d’install-PowerShell.ps1 pour vérifier la build quotidienne déjà installée (#10489)

Tests

  • Mise en attente du test DSC non fiable (#11131)
  • Correction du test StringData pour valider correctement les clés de tables de hachage (#10810)
  • Déchargement des modules de test (#11061) (merci à @iSazonov!)
  • Augmentation du temps entre les nouvelles tentatives de test d’URL (#11015)
  • Mise à jour les tests pour décrire précisément les actions de test. (#10928) (merci à @romero126!)
  • Le test non fiable TestAppDomainProcessExitEvenHandlerNotLeaking est temporairement ignoré (#10827)
  • Stabilisation du test de fuite du gestionnaire d'événements (#10790)
  • Synchronisation de la mise en majuscules dans CI YAML (#10767) (merci à @RDIL!)
  • Ajout d’un test pour la correction de fuite du gestionnaire d'événements (#10768)
  • Ajout du test Get-ChildItem (#10507) (merci à @iSazonov!)
  • Remplacement du langage ambigu pour les tests du commutateur au paramètre pour la précision (#10666) (merci à @romero126!)
  • Ajout d’une vérification expérimentale aux tests ForEach-Object-Parallel (#10354) (merci à @KirkMunro!)
  • Mise à jour des tests de validation Alpine (#10428)

Améliorations des builds et des packages

  • Correction de la signature de package NuGet pour la génération de packages coordonnés (#11316)
  • Mise à jour des dépendances de PowerShell Gallery et de NuGet (#11323)
  • Passage de Microsoft.ApplicationInsights 2.11.0 à 2.12.0 (#11305)
  • Passage de Microsoft.CodeAnalysis.CSharp de 3.3.1 à 3.4.0 (#11265)
  • Mise à jour des packages pour Debian 10 et 11 (#11236)
  • Activation des fonctionnalités expérimentales antérieures à la version RC uniquement (#11162)
  • Mise à jour de la version macOS minimale (#11163)
  • Passage de NJsonSchema de 10.0.27 à 10.0.28 (#11170)
  • Mise à jour des liens dans README.md et metadata.json pour la préversion 5 (#10854)
  • Sélection des fichiers pour les tests de compatibilité détenus par PowerShell (#10837)
  • Autorisation de la génération du package win7x86 msix. (Interne 10515)
  • Autorisation du passage des versions sémantiques à la fonction NormalizeVersion (#11087)
  • Passage de l’infrastructure .NET Core à la version 3.1-preview.3 (#11079)
  • Passage de PSReadLine de 2.0.0-beta5 à 2.0.0-beta6 dans/src/Modules (#11078)
  • Passage de Newtonsoft.Json de 12.0.2 à 12.0.3 (#11037) (#11038)
  • Ajout des packages Debian 10, 11 et CentOS 8 (#11028)
  • Chargement du fichier Json Build-info avec le champ ReleaseDate (#10986)
  • Passage de l’infrastructure .NET Core à la version 3.1-preview.2 (#10993)
  • Activation de la build du package MSIX x86 (#10934)
  • Mise à jour de l’URL du script d’installation du kit de développement logiciel (SDK) dotnet dans build.psm1 (#10927)
  • Passage de Markdig.Signed de 0.17.1 à 0.18.0 (#10887)
  • Passage de ThreadJob de 2.0.1 à 2.0.2 (#10886)
  • Mise à jour du manifeste AppX et du module de packaging pour respecter les exigences du MS Store (#10878)
  • Mise à jour de la référence de package pour le kit de développement logiciel (SDK) PowerShell vers preview.5 (interne 10295)
  • Mise à jour de ThirdPartyNotices.txt (#10834)
  • Passage de Microsoft. PowerShell.Native à 7.0.0-preview.3 (#10826)
  • Passage de Microsoft.ApplicationInsights 2.10.0 à 2.11.0 (#10608)
  • Passage de NJsonSchema de 10.0.24 à 10.0.27 (#10756)
  • Ajout de la prise en charge de MacPorts au système de build (#10736) (merci à @Lucius-Q-User!)
  • Passage de PackageManagement de 1.4.4 à 1.4.5 (#10728)
  • Passage de NJsonSchema de 10.0.23 à 10.0.24 (#10635)
  • Ajout d’une variable d’environnement pour différencier la télémétrie client/serveur dans MSI (#10612)
  • Passage de PSDesiredStateConfiguration de 2.0.3 à 2.0.4 (#10603)
  • Passage de Microsoft.CodeAnalysis.CSharp de 3.2.1 à 3.3.1 (#10607)
  • Mise à jour vers .Net Core 3.0 RTM (#10604) (merci à @bergmeister!)
  • Mise à jour du packaging MSIX pour que la version réponde aux exigences du Windows Store (#10588)
  • Passage de la version PowerShellGet de 2.2 à 2.2.1 (#10382)
  • Passage de PackageManagement de 1.4.3 à 1.4.4 (#10383)
  • Mise à jour de README.md et de metadata.json vers 7.0.0-preview.4 (interne 10011)
  • Mise à niveau de la version de .NET Core 3.0 de Preview 9 à RC1 (#10552) (merci à @bergmeister!)
  • Correction de la génération de la liste ExperimentalFeature (interne 9996)
  • Passage de la version de PSReadLine de 2.0.0-beta4 à 2.0.0-beta5 (#10536)
  • Correction du script de build de version pour définir la balise de mise en production
  • Mise à jour de la version de Microsoft.PowerShell.Native vers 7.0.0-preview.2 (#10519)
  • Mise à niveau vers Netcoreapp3.0 preview9 (#10484) (merci à @bergmeister!)
  • Assurez-vous que la build coordonnée quotidienne sait qu’il s’agit d’une build quotidienne (#10464)
  • Mise à jour de la build du package combiné pour publier les builds quotidiennes (#10449)
  • Suppression de la référence appveyor (#10445) (merci à @RDIL!)
  • Passage de la version de NJsonSchema de 10.0.22 à 10.0.23 (#10421)
  • Suppression de l’effacement du dossier de build Linux-x64, car certaines dépendances pour Alpine en ont besoin (#10407)

Contenu de la documentation et de l'aide

  • Refactorisation des journaux de modification dans un seul journal par version (#11165)
  • Correction de FWLinks pour les documents d’aide en ligne de PowerShell 7 (#11071)
  • Mise à jour de CONTRIBUTING.md (#11096) (merci à @mklement0!)
  • Correction des liens du document d’installation dans README.md (#11083)
  • Ajout d’exemples au script install-powershell.ps1 (#11024) (merci à @kilasuit!)
  • Correction de l’accentuation de Select-String et d’Import-DscResource dans CHANGELOG.md (#10890)
  • Suppression du lien obsolète de powershell-beginners-guide.md (#10926)
  • Fusion des journaux de modification stables et de maintenance (#10527)
  • Mise à jour de la version .NET utilisée dans les documents de build (#10775) (merci à @Greg-Smulko!)
  • Remplacement les liens de MSDN par docs.microsoft.com dans powershell-beginners-guide.md (#10778) (merci à @iSazonov!)
  • Correction du lien de vue d’ensemble DSC rompu (#10702)
  • Mise à jour de Support_Question.md pour créer un lien vers Stack Overflow comme une autre ressource de la communauté (#10638) (merci à @mklement0!)
  • Ajout d’une architecture de processeur au modèle de demande de distribution (#10661)
  • Ajout d’un nouveau livre PowerShell MoL aux documents d’apprentissage PowerShell (#10602)
  • Mise à jour de README.md et des métadonnées pour les versions v6.1.6 and v6.2.3 (#10523)
  • Correction d’une faute de frappe dans README.md (#10465) (merci à @vedhasp!)
  • Ajout d’une référence au module PSKoans à la documentation des ressources de formation (#10369) (merci à @vexx32!)
  • Mise à jour de README.md et de metadata.json vers 7.0.0-preview.3 (interne 10393)