PowerShell 7.5.2 には、次の機能、更新プログラム、および破壊的変更が含まれています。 PowerShell 7.5 は、.NET 9.0.301 リリースで構築されています。
詳細な変更一覧については、GitHub リポジトリの変更ログを参照してください。 .NET 9 の詳細については、「[.NET 9 の新機能][07]」を参照してください。
重大な変更
PathType
と日付範囲を使用する場合のTest-Path
の-OlderThan
および-NewerThan
パラメーターを修正 (#20942) (貢献者: @ArmaanMcleod!)- 以前は、
-OlderThan
を一緒に指定しても無視されていました
- 以前は、
New-FileCatalog -CatalogVersion
の既定値を 2 に変更 (#20428) (貢献者: @ThomasNieto!)- 制限付きリモート処理セッションでネットワークの場所からのヘルプをブロックする (#20593)
- Windows インストーラーは、使用されたインストール オプションを記憶し、それらを使用して次のインストールのオプションを初期化するようになりました (#20420) (貢献者: @reduckted!)
-
ConvertTo-Json
はBigInteger
を数値としてシリアル化するようになりました (#21000) (貢献者: @jborean93!) - .NET 9 では、
BinaryFormatter
コマンドレットで回帰の原因となったOut-GridView
実装が削除されました。Out-GridView
の検索機能は、PowerShell 7.5 では機能しません。 この問題は、問題 #24749で追跡されます。
更新されたモジュール
PowerShell 7.5.0 には、次の更新されたモジュールが含まれています。
- Microsoft.PowerShell.PSResourceGet v1.1.0
- PSReadLine v2.3.6
タブ補完に関する機能強化
タブ補完を改善するすべての作業について、@ArmaanMcleod 氏および他の皆さんに感謝いたします。
- ハッシュテーブルのキーと値を安全な式から取得できない場合に型の推定にフォールバックする (#21184) (貢献者: @MartinGC94!)
$_
の型の推定を行う際の回帰を修正 (#21223) (貢献者: @MartinGC94!)- タブ補完を使用して Windows 上で
~
を$HOME
に展開 (貢献者: #21529) - パラメーター名とクラス メンバーの宣言時には補完を行わない (#21182) (貢献者: @MartinGC94!)
- 型名のタブ補完時に、ファイルの入力候補へのフォールバックを防止 (#20084) (貢献者: @MartinGC94)
Set-StrictMode
の-Version
に引数補完を追加 (#20554) (貢献者: @ArmaanMcleod!)Get-Verb
/Get-Command
に-Verb
引数補完を追加し、Get-Verb
をリファクタリング (#20286) (貢献者: @ArmaanMcleod)Start-Process
に引数-Verb
を追加しました (#20415) (報告/提案: @ArmaanMcleod)*-Variable
、*-Alias
、*-PSDrive
コマンドに-Scope
引数補完を追加 (#20451) (貢献者: @ArmaanMcleod)Save-Help
/Update-Help
コマンドに-Module
補完を追加 (#20678) (貢献者: @ArmaanMcleod)
新しいコマンドレット
ConvertTo-CliXml
コマンドレットとConvertFrom-CliXml
コマンドレットを追加 (#21063) (貢献者: @ArmaanMcleod!)
Web コマンドレットの機能強化
-PassThru
と-Outfile
が連携できるように修正しました (#24086)OutFile
にWebResponseObject
プロパティを追加しました (#24047)Invoke-WebRequest -OutFile -Verbose
でファイル名を表示できるように修正しました (#24041)-Body
が指定されているがContentType
が指定されていない場合の WebCmdlets を修正 (#23952) (貢献者: @CarloToso!)-Resume
が指定されたときに正しいサイズを報告するようにInvoke-WebRequest
を修正 (#20207) (貢献者: @LNKLEO!)WinForm
アプリが正常に動作するように Web コマンドレットを修正 (#20606)
その他のコマンドレットの機能強化
-NoRestart
とRegister-PSSessionConfiguration
との連携 (#23891)IgnoreComments
およびAllowTrailingCommas
オプションをTest-Json
コマンドレットに追加 (#23817) (貢献者: @ArmaanMcleod!)- Get-Help は、
ValueFromRemainingArguments
属性を持つパラメーターをパイプライン可能として報告する場合がある (#23871) Select-String
でLineNumber
の型をulong
に変更 (#24075) (貢献者: @Snowman-25!)-
Get-Process
:-IncludeUserName
における管理者要件を削除 (#21302) (貢献者: @jborean93!) - パスとファイル名で無効な文字の有無が確認されるように
Test-Path -IsValid
を修正 (#21358) - エラー報告の
ConciseView
にRecommendedAction
を追加 (#20826) (貢献者: @JustinGrote!) Remove-Item
コマンドレットに進行状況バーを追加 (#20778) (貢献者: @ArmaanMcleod!)- .NET 8 の変更による
Test-Connection
の修正 (#20369) Get-Service
で強制終了にならないエラー メッセージにカテゴリが含まれるように修正 (#20276)-Empty
および-InputObject
パラメーターをNew-Guid
に追加 (#20014) (貢献者: @CarloToso!)Get-ChildItem
コマンドのパラメーター-Recurse
に別名r
を追加 (#20100) (貢献者: @kilasuit!)- 関数の
LiteralPath
別名にLP
がまだない場合の追加 (#20820) - 暗黙的なローカライズ フォールバックを
Import-LocalizedData
に追加 (#19896) (貢献者: @chrisdent-de!) Get-Help
によって返されるパラメーターのヘルプ コンテンツの書式設定時に表示されるプロパティにAliases
を追加 (#20994)HelpUri
をRemove-Service
に追加 (#20476)- SCCM プロバイダーの完了クラッシュを修正 (#20815、#20919、#20915) (貢献者: @MartinGC94!)
-Tail 0
と-Wait
を一緒に使用したときのGet-Content
での回帰を修正 (#20734) (貢献者: @CarloToso!)- 返された
Process
オブジェクトでExitCode
プロパティにアクセスできることを確実にするためにStart-Process -PassThru
を修正 (#20749) (貢献者: @CodeCyclone!) - 出力に現在のカルチャを使用するように
Group-Object
を修正 (#20608) - 補間文字列を使用して
Group-Object
出力を修正 (#20745) (貢献者: @mawosoft!) - ネットワーク
PSDrive
のDisplayRoot
のレンダリングを修正 (#20793) - すべてのファイルがコピーされたときにのみ完了と表示するように
Copy-Item
の進行状況を修正 (#20517) - UNC パス補完の回帰を修正 (#20419) (貢献者: @MartinGC94!)
- 無効な
-ExecutionPolicy
がpwsh
に渡された場合にエラーを報告 (#20460) - 使用状況を追跡するために WinGetCommandNotFound および CompletionPredictor モジュールを追加 (#21040)
ConvertFrom-Json
に DateKind パラメーターを追加 (#20925) (貢献者: @jborean93!)- New-Item の OutputType に DirectoryInfo を追加 (#21126) (貢献者: @MartinGC94!)
- 配列値の
Get-Error
シリアル化を修正 (#21085) (貢献者:@jborean93!) - UNC パスを使用できるように
Test-ModuleManifest
を修正 (#24115) - 先にデータを収集するのではなく、すぐにパイプラインに書き込むように
Get-TypeData
を修正 (#24236) (貢献者: @MartinGC94) - ワイルドカード隠しファイルをサポートできるように、
Resolve-Path
およびConvert-Path
コマンドレットに-Force
パラメーターを追加 (#20981) (貢献者: @ArmaanMcleod!) -NoNewWindow
でプロセスを開始するときに標準ハンドルを明示的に設定する (#25324)- 継承された保護された内部インスタンス メンバーをクラス スコープでアクセスできるようにします。 (#25547)(感謝 @mawosoft!)
- 古いあいまい検索候補を削除し、ローカル スクリプト ファイル名の候補を修正します (#25330)
PSMethodInvocationConstraints.GetHashCode
メソッドの修正 (#25306) (感謝@crazyjncsu!)
エンジンの機能強化
- メソッド引数に必要な型変換が完了した後に .NET メソッド呼び出しログを移動する (#25357)
WldpCanExecuteFile
後の AppLocker へのフォールバック (#25305)- 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!)
- ファイルが実行可能でない場合に
setuid
とsticky
を処理するようにunixmode
を修正 (#20366) - アセンブリ パスを構築するときに Path.Combine を使用するためのアセンブリの使用を修正 (#21169)
- 無効な名前空間の宣言を防ぐために、セマンティック チェック中に名前空間を使用するための値を検証 (#21162)
$PSHOME
を PATH の先頭に追加するときに、グローバル ツールを特別に処理 (#24228)
実験的な機能
以下の試験的機能は、PowerShell 7.5-rc.1 のメインストリーム機能に変換されました。
- PSCommandNotFoundSuggestion
- PSCommandWithArgs
- PSModuleAutoLoadSkipOfflineFiles(オフラインファイルをスキップして自動ローディングするPSモジュール)
PowerShell 7.5-rc.1 には、以下の試験的機能が含まれています。
- PSRedirectToVariable - 変数へのリダイレクトを許可 (#20381)
- PSNativeWindowsTildeExpansion - Windows ネイティブ実行可能ファイルのチルダ拡張を追加する (#20402) (ありがとうございます @domsleee!)
- PSSerializeJSONLongEnumAsNumber -
ConvertTo-Json
で大きな列挙型を数値として処理 (#20999) (貢献者: @jborean93!)
パフォーマンスの向上
PowerShell 7.5-rc.1 には、 からの @jborean93 が含まれています。これは、オブジェクトの配列に対する +=
演算のパフォーマンスを向上させます。
次の例では、配列に要素を追加するさまざまな方法のパフォーマンスを測定します。
$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
[07]: /dotnet/core/whats-new/dotnet-9/overview)
PowerShell