PowerShell 7.5 の新機能
PowerShell 7.5-rc.1 には、次の機能、更新プログラム、および重大な変更が含まれています。 PowerShell 7.5 は、.NET 9.0.100 GA リリース上に構築されています。
詳細な変更一覧については、GitHub リポジトリの変更ログを参照してください。
重大な変更
-OlderThan
と日付範囲を使用する場合の-NewerThan
のTest-Path
およびPathType
パラメーターを修正 (#20942) (感謝します: @ArmaanMcleod!)- 以前は、
-OlderThan
を一緒に指定しても無視されていました
- 以前は、
New-FileCatalog -CatalogVersion
の既定値を 2 に変更 (#20428) (感謝します: @ThomasNieto!)- 制限付きリモート処理セッションでのネットワークの場所からのヘルプの表示をブロックする (#20593)
- Windows インストーラーは、使用されたインストール オプションを記憶し、それらを使用して次のインストールのオプションを初期化するようになりました (#20420) (@reduckted!) に感謝します
ConvertTo-Json
はBigInteger
を数値としてシリアル化するようになりました (#21000) (@jborean93!) に感謝します
更新されたモジュール
PowerShell 7.5-rc.1 には、次の更新されたモジュールが含まれています。
- Microsoft.PowerShell.PSResourceGet v1.1.0-RC2
- PSReadLine v2.3.6
タブ補完の改善
タブ補完の改善に関するすべての作業について @ArmaanMcleod と他の方々に感謝します。
- ハッシュテーブルのキーと値を安全な式から取得できない場合に型の推定にフォールバックする (#21184) (@MartinGC94!) に感謝します
$_
の型の推定を行う際の回帰を修正する (#21223) (@MartinGC94!) に感謝します- タブ補完を使用して Windows 上で
~
を$home
に展開する (#21529) - パラメーター名とクラス メンバーの宣言時には補完を行わない (#21182) (@MartinGC94!) に感謝します
- 型名のタブ補完時に、ファイルの入力候補へのフォールバックを防止する (#20084) (感謝します: @MartinGC94)
-Version
のSet-StrictMode
に引数の入力候補を追加する (#20554) (感謝します: @ArmaanMcleod!)-Verb
Get-Verb
/ のGet-Command
引数の入力候補を追加し、Get-Verb
をリファクタリングする (#20286) (感謝します: @ArmaanMcleod)-Verb
のStart-Process
引数の入力候補を追加する (#20415) (感謝します: @ArmaanMcleod)-Scope
、*-Variable
、*-Alias
コマンドの*-PSDrive
引数の入力候補を追加する (#20451) (感謝します: @ArmaanMcleod)-Module
Save-Help
/ コマンドのUpdate-Help
の入力候補を追加する (#20678) (感謝します: @ArmaanMcleod)
新しいコマンドレット
ConvertTo-CliXml
コマンドレットとConvertFrom-CliXml
コマンドレットを追加する (#21063) (感謝します: @ArmaanMcleod!)
Web コマンドレットの機能強化
-PassThru
と-Outfile
が連携できるように修正しました (#24086)WebResponseObject
にOutFile
プロパティを追加する (#24047)Invoke-WebRequest -OutFile -Verbose
でファイル名を表示する (#24041)-Body
は指定されているがContentType
は指定されていない場合の Web コマンドレットを修正する (#23952) (感謝します: @CarloToso!)Invoke-WebRequest
指定時に正しいサイズを報告するように-Resume
を修正 (#20207) (感謝します: @LNKLEO!)WinForm
アプリが正常に動作するように Web コマンドレットを修正 (#20606)
他のコマンドレットの機能強化
-NoRestart
がRegister-PSSessionConfiguration
と連携できるようにする (#23891)IgnoreComments
コマンドレットにAllowTrailingCommas
オプションとTest-Json
オプションを追加する (#23817) (@ArmaanMcleod!) に感謝します- Get-Help は、
ValueFromRemainingArguments
属性を持つパラメーターをパイプライン可能として報告する場合があります (#23871) LineNumber
の種類をulong
でSelect-String
に変更する (#24075) (@Snowman-25!) に感謝しますGet-Process
:-IncludeUserName
における管理者要件を削除する (#21302) (@jborean93!) に感謝しますTest-Path -IsValid
が無効なパスとファイル名の文字がないか確認を行うように修正する (#21358)- エラー報告の
RecommendedAction
にConciseView
を追加する (#20826) (@JustinGrote!) に感謝します Remove-Item
の進行状況バーを追加しました (#20778) (@ArmaanMcleod!) に感謝します- .NET 8 の変更による
Test-Connection
の修正 (#20369) Get-Service
の強制終了にならないエラー メッセージにカテゴリが含まれるように修正 (#20276)-Empty
および-InputObject
パラメーターをNew-Guid
に追加 (#20014) (感謝します: @CarloToso!)r
コマンドのパラメーター-Recurse
に別名Get-ChildItem
を追加 (#20100) (感謝します: @kilasuit!)- 関数の
LP
別名にLiteralPath
がまだない場合は追加 (#20820) - 暗黙的なローカライズのフォールバックを
Import-LocalizedData
に追加 (#19896) (感謝します: @chrisdent-de!) Aliases
によって返されるパラメーターのヘルプ コンテンツの書式設定時に表示されるプロパティにGet-Help
を追加 (#20994)HelpUri
をRemove-Service
に追加 (#20476)- SCCM プロバイダーの完了クラッシュを修正 (#20815、#20919、#20915) (感謝します: @MartinGC94!)
Get-Content
と-Tail 0
を一緒に使用したときの-Wait
での回帰を修正 (#20734) (感謝します: @CarloToso!)- 返された
Start-Process -PassThru
オブジェクトでExitCode
プロパティにアクセスできることを確実にするためのProcess
の修正 (#20749) (感謝します: @CodeCyclone!) - 出力に現在のカルチャを使用するように
Group-Object
を修正 (#20608) - 補間された文字列を使った
Group-Object
出力を修正 (#20745) (感謝します: @mawosoft!) - ネットワーク
DisplayRoot
のPSDrive
のレンダリングを修正 (#20793) - すべてのファイルがコピーされたときにのみ完了と表示するように
Copy-Item
の進行状況を修正 (#20517) - UNC パス補完の回帰を修正 (#20419) (感謝します: @MartinGC94!)
- 無効な
-ExecutionPolicy
がpwsh
に渡された場合はエラーを報告する (#20460) - 使用状況を追跡する WinGetCommandNotFound および CompletionPredictor モジュールを追加 (#21040)
- に
ConvertFrom-Json
パラメーターを追加 (#20925) (次の方に感謝: @jborean93!) - New-Item の OutputType に DirectoryInfo を追加 (#21126) (次の方に感謝: @MartinGC94!)
- 配列値の
Get-Error
のシリアル化を修正 (#21085) (次の方に感謝: - UNC パスを使用できるように
Test-ModuleManifest
を修正 (#24115) - 最初にデータを収集するのではなく、パイプラインにすぐに書き込むように
Get-TypeData
を修正 (#24236) (次の方に感謝: @MartinGC94) - ワイルドカード隠しファイルをサポートするための
-Force
およびResolve-Path
コマンドレットにConvert-Path
パラメーターを追加する #20981 (次の方に感謝: @ArmaanMcleod!)
エンジンの機能強化
- ANSI エラー カラーを明示的に開始および停止する (#24065) (次の方に感謝: @JustinGrote!)
- ジェネリック メソッドの .NET オーバーロード定義を改善する (#21326) (次の方に感謝: @jborean93!)
- コレクションがオブジェクト配列の場合に
+=
操作を最適化する (#23901) (次の方に感謝: @jborean93!) - モジュールのインポート時に特定のタグの有無を確認するテレメトリを追加する (#20371)
- モジュール読み込みテレメトリ許可リストに
PSAdapter
とConsoleGuiTools
を追加 (#20641) - 使用状況を追跡する Winget モジュールを追加 (#21040)
- WDAC ETW イベントのログ記録時にファイル名が null でないことを確認する (#20910) (感謝します: @jborean93!)
- WDAC ログ機能によって発生する 4 つの回帰を修正 (#20913)
- リダイレクトされない場合は入力、出力、エラーのハンドルを未設定のままにする (#20853)
- 一般的なパラメーターに対して動作するように暗黙的なリモート処理プロキシ コマンドレットを修正 (#20367)
- モジュールが見つからないときのエラー メッセージにモジュールのバージョンを含める (#20144) (感謝します: @ArmaanMcleod!)
- ファイルが実行可能でない場合に
unixmode
とsetuid
を処理するようにsticky
を修正 (#20366) - アセンブリ パスを構築するときに Path.Combine を使用するためのアセンブリの使用を修正 (#21169)
- セマンティック チェック中に名前空間を使用して無効な名前空間が宣言されないようにする値を検証 (#21162)
- PATH の先頭に
$PSHome
を追加した場合に、グローバル ツールを特に処理する (#24228)
実験的な機能
次の試験的な機能は、PowerShell 7.5-rc.1 のメインストリーム機能に変換されました。
PowerShell 7.5-rc.1 には、次の試験的な機能が含まれています。
- PSRedirectToVariable - 変数へのリダイレクトを許可する (#20381)
- PSNativeWindowsTildeExpansion - Windows ネイティブ実行可能ファイルのチルダ拡張を追加する (#20402) (次の方に感謝: @domsleee!)
- PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json
が大きな列挙型を数値として扱うようになりました (#20999) (次の方に感謝: @jborean93!)
パフォーマンスの向上
PowerShell 7.5-rc.1 には、オブジェクトの配列に対する
次の例では、配列に要素を追加するさまざまな方法のパフォーマンスを測定します。
$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
}
PowerShell 7.4.6 でスクリプトを実行すると、+=
演算子の使用が最も遅い方法であることがわかります。
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
PowerShell 7.5-rc.1 でスクリプトを実行すると、+=
演算子の使用が PowerShell 7.4.6 よりもはるかに高速であることがわかります。 これで、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
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
PowerShell