Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
PowerShell 7.5.4 inclut les fonctionnalités, mises à jour et changements majeurs suivants. PowerShell 7.5.4 repose sur la version .NET 9.0.306.
Pour obtenir la liste complète des changements, consultez CHANGELOG dans le dépôt GitHub. Pour plus d’informations sur .NET 9, consultez Nouveautés de .NET 9.
Changements cassants
- Correction des paramètres
-OlderThanet-NewerThanpourTest-Pathlors de l’utilisation dePathTypeet de la plage de dates (#20942) (merci à @ArmaanMcleod!)- Auparavant,
-OlderThanétait ignoré si les deux paramètres étaient spécifiés ensemble
- Auparavant,
- Définition de 2 comme valeur par défaut de
New-FileCatalog -CatalogVersion(#20428) (merci à @ThomasNieto!) - Blocage de l’accès à l’aide en ligne depuis des emplacements réseau dans les sessions distantes restreintes (#20593)
- Le programme d’installation Windows se souvient désormais des options d’installation utilisées et les emploie pour initialiser les options de l’installation suivante (#20420) (merci à @reduckted!)
-
ConvertTo-Jsonsérialise maintenantBigIntegeren tant que nombre (#21000) (merci @jborean93!)
Modules mis à jour
PowerShell 7.5.4 inclut les modules mis à jour suivants :
- Microsoft.PowerShell.PSResourceGet v1.1.1
- PSReadLine v2.3.6
Amélioration de la saisie semi-automatique par tabulation
Un grand merci à @ArmaanMcleod et à tous les autres pour leur travail visant à améliorer la saisie semi-automatique.
- Repli vers l’inférence de type si la clé-valeur hashtable ne peut pas être extraite depuis une expression sécurisée (#21184) (Merci à @MartinGC94!)
- Correction de la régression lors d’une opération d’inférence de type pour
$_(#21223) (merci à @MartinGC94!) - Expansion du
~en$HOMEsous Windows avec la saisie semi-automatique (#21529) - Pas de saisie semi-automatique lors de la déclaration d’un nom de paramètre et de membre de classe (#21182) (Merci à @MartinGC94!)
- Empêche le repli vers la saisie semi-automatique de fichiers lors de la saisie semi-automatique de noms de types (#20084) (Merci à @MartinGC94)
- Ajout d’un d’argument completer
-VersionpourSet-StrictMode(#20554) (Merci à @ArmaanMcleod!) - Ajout d’un d’argument de compléteur
-VerbpourGet-Verb/Get-Commandet refactorisation deGet-Verb(#20286) (merci à @ArmaanMcleod) - Ajout d’un compléteur d’argument
-VerbpourStart-Process(#20415) (merci à @ArmaanMcleod) - Ajout d’un d’argument de compléteur
-Scopepour les commandes*-Variable,*-Aliaset*-PSDrive(#20451) (merci à @ArmaanMcleod) - Ajout de la saisie semi-automatique
-Modulepour les commandesSave-Help/Update-Help(#20678) (Merci à @ArmaanMcleod))
Nouvelles applets de commande
- Ajout des cmdlets
ConvertTo-CliXmletConvertFrom-CliXml(#21063) (merci @ArmaanMcleod!)
Améliorations apportées aux cmdlets web
- Correction permettant à
-PassThruet-Outfilede fonctionner ensemble (#24086) - Ajoutez la propriété
OutFiledansWebResponseObject(#24047) - Afficher le nom de fichier dans
Invoke-WebRequest -OutFile -Verbose(#24041) - Correction de WebCmdlets quand
-Bodyest spécifié, mais queContentTypene l’est pas (#23952) (merci à @CarloToso!) - Correction de
Invoke-WebRequestafin qu’il signale la taille correcte quand-Resumeest spécifié (#20207) (merci à @LNKLEO!) - Correction des cmdlets web pour permettre aux applications
WinFormde fonctionner correctement (#20606)
Autres améliorations apportées aux cmdlet
- Corriger
Out-GridViewen remplaçant l’utilisation de l’obsolèteBinaryFormatterpar l’implémentation personnalisée (#25559) - Correctif de
-NoRestartpour fonctionner avecRegister-PSSessionConfiguration(#23891) - Ajout des options
IgnoreCommentsetAllowTrailingCommasà la cmdletTest-Json(#23817) (merci à @ArmaanMcleod!) - Get-Help peut signaler des paramètres avec l’attribut
ValueFromRemainingArguments, étant compatible avec le pipeline (#23871) - Modification du type de
LineNumberenulongdansSelect-String(#24075) (merci à @Snowman-25!) -
Get-Process: suppression de l’exigence administrateur pour-IncludeUserName(#21302) (merci à @jborean93!) - Correction de
Test-Path -IsValidpour la vérification de caractères de nom de fichier et de chemin d’accès incorrects (#21358) - Ajout de
RecommendedActiondans laConciseViewdu rapport d’erreur (#20826) (merci à @JustinGrote!) - Barre de progression ajoutée pour la cmdlet
Remove-Item(#20778) (merci à @ArmaanMcleod!) - Correction de
Test-Connectionsuite aux modifications de .NET 8 (#20369) - Correction du message d’erreur d'absence de fin d’exécution
Get-Servicede façon à inclure la catégorie (#20276) - Ajout des paramètres
-Emptyet-InputObjectàNew-Guid(#20014) (merci à @CarloToso!) - Ajout de l’alias
rau paramètre-Recursede la commandeGet-ChildItem(#20100) (merci à @kilasuit!) - Ajout de
LPaux aliasLiteralPathpour les fonctions qui en étaient dépourvues (#20820) - Ajout d’une valeur de secours de localisation implicite à
Import-LocalizedData(#19896) (merci à @chrisdent-de!) - Ajout de
Aliasesaux propriétés affichées lors de la mise en forme du contenu d’aide du paramètre retourné parGet-Help(#20994) - Ajout de
HelpUriàRemove-Service(#20476) - Correction du plantage de la saisie semi-automatique pour le fournisseur SCCM (#20815, #20919, #20915) (Merci à @MartinGC94!))
- Correction de la régression dans
Get-Contentlorsque-Tail 0et-Waitsont utilisés ensemble (#20734) (merci à @CarloToso!) - Correction de
Start-Process -PassThruafin de veiller à ce que la propriétéExitCodesoit accessible pour l’objetProcessretourné (#20749) (merci à @CodeCyclone!) - Correction de
Group-Objectpour qu’il utilise la culture actuelle pour sa sortie (#20608) - Correction de la sortie de
Group-Objectà l’aide de chaînes interpolées (#20745) (merci à @mawosoft!) - Correction du rendu de
DisplayRootpour le réseauPSDrive(#20793) - Correction de la progression de
Copy-Itemde manière à afficher l’achèvement uniquement lorsque tous les fichiers sont copiés (#20517) - Correction d’une régression sur la saisie semi-automatique des chemins UNC (#20419) (Merci à @MartinGC94!)
- Signalement d’une erreur si un
-ExecutionPolicynon valide est transmis àpwsh(#20460) - Ajouter les modules WinGetCommandNotFound et CompletionPredictor pour suivre l’utilisation (#21040)
- Ajouter le paramètre DateKind à
ConvertFrom-Json(#20925) (merci à @jborean93!) - Ajouter DirectoryInfo dans le OutputType pour New-Item (#21126) (merci à @MartinGC94!)
- Correction de la sérialisation de valeurs de tableau
Get-Error(#21085) (merci à @jborean93!) - Correction de
Test-ModuleManifestafin qu’il puisse utiliser un chemin UNC (#24115) - Correction de
Get-TypeDatapour qu’il écrive directement dans le pipeline au lieu de collecter d’abord les données (#24236) (Merci à @MartinGC94) - Ajout d’un paramètre
-Forceaux cmdletsResolve-PathetConvert-Pathpour prendre en charge les fichiers masqués génériques #20981 (merci à @ArmaanMcleod!) - Définir des handles standard explicitement lors du démarrage d’un processus avec
-NoNewWindow(#25324) - Les membres d'instance protégés internes sont désormais hérités dans l'étendue de la classe. (#25547) (Merci @mawosoft!)
- Supprimez l’ancienne suggestion approximative et corrigez la suggestion de nom de fichier de script local (#25330)
- Corriger la méthode
PSMethodInvocationConstraints.GetHashCode(#25306) (Merci @crazyjncsu!)
Améliorations apportées au moteur
- Déplacement de la journalisation des appels de méthode .NET après avoir effectué la conversion de type requise pour les arguments de méthode (#25357)
- Revenir à AppLocker après
WldpCanExecuteFile(#25305) - Activation/désactivation explicite des couleurs ANSI pour les erreurs (#24065) (Merci à @JustinGrote!))
- Amélioration de la définition de surcharge .NET des méthodes génériques (#21326) (merci à @jborean93!)
- Optimisation de l’opération
+=d’une collection lorsqu’il s’agit d’un tableau d’objets (#23901) (merci à @jborean93!) - Ajout de la télémétrie pour vérifier la présence de balises spécifiques lors de l’importation d’un module (#20371)
- Ajout de
PSAdapteretConsoleGuiToolsà la liste verte de télémétrie du module (#20641) - Ajouter un module WinGet pour suivre l’utilisation (#21040)
- Vérification que le nom de fichier n’est pas nul lors de la journalisation des événements ETW WDAC (#20910) (merci à @jborean93!)
- Correction de quatre régressions introduites par la fonctionnalité de journalisation WDAC (#20913)
- Mes handles d’entrée, de sortie et d’erreur sont désormais laissés non définis lorsqu’ils ne sont pas redirigés (#20853)
- Correction des cmdlets de proxy de communication à distance implicite pour qu’ils agissent sur des paramètres communs (#20367)
- Inclusion de la version du module dans les messages d’erreur lorsque le module est introuvable (#20144) (merci à @ArmaanMcleod!)
- Correction de
unixmodepour gérersetuidetstickyquand le fichier n’est pas un exécutable (#20366) - Correction de l’utilisation d’un assembly pour qu’il utilise Path.Combine lors de la construction des chemin d’accès d’assembly (#21169)
- Validation de la valeur pour l’utilisation d’un espace de noms pendant des vérifications sémantiques pour empêcher la déclaration d'espaces de noms invalides (#21162)
- Gestion spéciale des outils globaux lors de l’ajout de
$PSHOMEau PATH (#24228)
Fonctionnalités expérimentales
Les fonctionnalités expérimentales suivantes ont été converties en fonctionnalités principales dans PowerShell 7.5-rc.1 :
Les fonctionnalités expérimentales suivantes sont incluses dans PowerShell 7.5-rc.1 :
- PSRedirectToVariable - Autorise la redirection vers une variable (#20381)
- PSNativeWindowsTildeExpansion - Ajouter l’extension tilde pour les exécutables natifs Windows (#20402) (Merci @domsleee!)
-
PSSerializeJSONLongEnumAsNumber -
ConvertTo-Jsontraite désormais les énumérations volumineuses comme des nombres (#20999) (merci à @jborean93!)
Amélioration des performances
PowerShell 7.5-rc.1 inclut PR#23901 de @jborean93 qui améliore les performances de l’opération += pour un tableau d’objets.
L’exemple suivant mesure les performances de différentes méthodes pour ajouter des éléments à un tableau.
$tests = @{
'Direct Assignment' = {
param($count)
$result = foreach($i in 1..$count) {
$i
}
}
'List<T>.Add(T)' = {
param($count)
$result = [Collections.Generic.List[int]]::new()
foreach($i in 1..$count) {
$result.Add($i)
}
}
'Array+= Operator' = {
param($count)
$result = @()
foreach($i in 1..$count) {
$result += $i
}
}
}
5kb, 10kb | ForEach-Object {
$groupResult = foreach($test in $tests.GetEnumerator()) {
$ms = (Measure-Command { & $test.Value -Count $_ }).TotalMilliseconds
[pscustomobject]@{
CollectionSize = $_
Test = $test.Key
TotalMilliseconds = [Math]::Round($ms, 2)
}
[GC]::Collect()
[GC]::WaitForPendingFinalizers()
}
$groupResult = $groupResult | Sort-Object TotalMilliseconds
$groupResult | Select-Object *, @{
Name = 'RelativeSpeed'
Expression = {
$relativeSpeed = $_.TotalMilliseconds / $groupResult[0].TotalMilliseconds
$speed = [Math]::Round($relativeSpeed, 2).ToString() + 'x'
if ($speed -eq '1x') { $speed } else { $speed + ' slower' }
}
} | Format-Table -AutoSize
}
Lorsque vous exécutez le script dans PowerShell 7.4.6, vous constatez que l’utilisation de l’opérateur += est la méthode la plus lente.
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
5120 Direct Assignment 4.17 1x
5120 List<T>.Add(T) 90.79 21.77x slower
5120 Array+= Operator 342.58 82.15x slower
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
10240 Direct Assignment 0.64 1x
10240 List<T>.Add(T) 184.10 287.66x slower
10240 Array+= Operator 1668.13 2606.45x slower
Lorsque vous exécutez le script dans PowerShell 7.5-rc.1, vous constatez que l’utilisation de l’opérateur += est beaucoup plus rapide que dans PowerShell 7.4.6. Désormais, elle est également plus rapide que l’utilisation de la méthode List<T>.Add(T).
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
5120 Direct Assignment 4.71 1x
5120 Array+= Operator 40.42 8.58x slower
5120 List<T>.Add(T) 92.17 19.57x slower
CollectionSize Test TotalMilliseconds RelativeSpeed
-------------- ---- ----------------- -------------
10240 Direct Assignment 1.76 1x
10240 Array+= Operator 104.73 59.51x slower
10240 List<T>.Add(T) 173.00 98.3x slower