Nouveautés de PowerShell 7.1 – –



PowerShell 7.1 peut sembler ne pas apporter de changements spectaculaires de prime abord, mais il y a en réalité beaucoup d’améliorations en profondeur. De plus, un certain nombre de fonctionnalités et d’outils très pratiques sont disponibles, permettant d’optimiser vos scripts et de développer des solutions encore plus performantes. Sorti le 11 novembre 2020, PowerShell 7.1 est rapidement adopté par de nombreux professionnels de l’informatique. Cet article met en évidence plusieurs de ces améliorations, sans prétendre à une liste exhaustive.

Évolutions architecturales

L’amélioration majeure réside dans le fait que PowerShell 7.1 est construit sur la base de .NET 5, une version importante qui poursuit l’unification de .NET traditionnel et .NET Core. Avec .NET 5, les premiers pas vers un noyau unifié sont franchis. PowerShell 7.1 bénéficie ainsi de gains de performance significatifs et d’améliorations au niveau du langage.

Mises à jour des modules de base et améliorations de chargement

PowerShell 7.1 inclut plusieurs mises à jour des modules centraux. En particulier, PSReadLine 2.1.0 intègre désormais IntelliSense prédictif, un moteur de prédiction syntaxique inspiré de Fish shell. De plus, de nombreuses corrections ont été apportées au mode vi et la possibilité de définir le MaximumHistoryCount à partir du profil utilisateur est maintenant offerte.

Pour améliorer le chargement du module WinCompat, les modules PowerShell 7 sont désormais traités avec une priorité plus élevée. Ceci évite l’écrasement accidentel des modules principaux lors de l’utilisation de WinCompat pour permettre aux modules PowerShell 7 non natifs de fonctionner dans cette version mise à jour.

Nouvelles fonctionnalités du moteur

Bien sûr, plusieurs nouvelles fonctionnalités de base sont à noter. Les trois principales sont:

  • PSNullConditionalOperators
  • PSUnixStat
  • Prise en charge de TLS 1.3

Les opérateurs conditionnels nuls ont été introduits dans PowerShell 7 comme fonctionnalité expérimentale. Ils sont maintenant standard et inclus par défaut dans PowerShell 7.1. Il existe deux nouveaux opérateurs, ?? et ??=.

     
      # Remplace généralement une instruction if null et exécute la sortie si la valeur est nulle.
      $Object ?? '$object contient une valeur $null'

      # Si la valeur de la condition est nulle, affecte l'objet à la valeur à droite de la condition.
      $Object ??= 'Cette valeur est attribuée si $object est nul'
     
    

Ensuite, l’option PSUnixStat, qui passe du statut expérimental au statut standard, même si elle peut apparaître comme expérimentale par moments. Cette fonctionnalité est exclusive aux systèmes Linux. Vous pouvez vérifier son statut et l’activer comme suit :

      
        # S'assurer que cette fonctionnalité est activée, redémarrer la session PowerShell est nécessaire.
        Get-ExperimentalFeature -Name 'PSUnixFileStat' | Enable-ExperimentalFeature
      
    

Cette fonctionnalité ajoute une nouvelle propriété UnixMode qui affiche les informations de la commande Unix stat. Ceci est très utile pour ceux qui travaillent fréquemment avec les permissions Linux.

Enfin, la prise en charge de TLS 1.3 est maintenant intégrée dans diverses cmdlets web comme Invoke-RestMethod et Invoke-WebRequest. Pour ceux qui souhaitent bénéficier des améliorations de performance et de sécurité de cette nouvelle version TLS et qui interagissent avec un point de terminaison compatible, c’est un ajout précieux. Si le site prend en charge TLS 1.3, le contenu sera renvoyé et la communication sera établie via le nouveau protocole.

    
      Invoke-RestMethod -Uri '<https://mysite.com>' -SslProtocol Tls13
    
  

Améliorations additionnelles

Plusieurs autres fonctionnalités et améliorations contribuent à augmenter vos capacités et à affiner vos scripts.

  • Dans l’environnement Windows, Start-Process inclura désormais, par défaut, toutes les variables d’environnement de la session en cours. Uniquement en utilisant le paramètre UseNewEnvironment, un nouvel environnement sera créé avec de nouvelles variables de processus.
  • La commande ForEach-Object -Parallel réutilise maintenant les espaces d’exécution, améliorant ainsi la gestion de la mémoire et les performances. Pour ceux qui craignent que l’isolation maximale de l’espace d’exécution ne soit pas atteinte, le paramètre UseNewRunspace permet de créer un nouvel espace d’exécution pour chaque itération du pipeline.
  • La commande Get-Random inclut désormais le paramètre Shuffle. Ceci prendra une collection passée via un pipeline à Get-Random ou via InputObject et renverra la même collection, mais avec les éléments mélangés de manière aléatoire.
  • Le paramètre AsUTC est ajouté à la commande Get-Date, simplifiant ainsi les conversions traditionnelles nécessaires, notamment avec l’objet [DateTime].
  • La cmdlet Stop-Computer est implémentée pour les systèmes Linux et macOS, en s’appuyant sur le binaire /sbin/shutdown. Sur Linux, l’argument passé est now et sur macOS, il est -P now.
  • Similaire à Stop-Computer, Restart-Computer est implémentée pour Linux et macOS, utilisant le binaire /sbin/shutdown et passant l’argument -r now.

Changements cassants

Enfin, il y a quelques changements cassants. Il y en a plus, mais ces deux-là peuvent affecter les scripts plus que d’autres.

  • Le changement de nom de FromUnixTime à UnixTimeSeconds sur la cmdlet Get-Date pour autoriser l’entrée de l’heure Unix peut impacter les scripts qui utilisent cette fonctionnalité et qui devront être mis à jour.
  • Ne pas envelopper le résultat de retour dans PSObject lors de la conversion de ScriptBlock en types délégués. Il s’agit d’une situation rare lors de la conversion d’un scriptblock où vous souhaitez que le type de retour soit l’objet d’origine et non converti en PSObject.

Conclusion

PowerShell 7.1 n’introduit peut-être pas d’énormes nouvelles fonctionnalités en apparence, mais il apporte de nombreuses améliorations progressives et des changements majeurs en profondeur. L’écosystème et le langage PowerShell continuent de s’améliorer à chaque itération et deviennent rapidement un outil essentiel et populaire pour les administrateurs systèmes du monde entier.