次の方法で共有


PowerShell 7.5 の新機能

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-JsonBigInteger を数値としてシリアル化するようになりました (#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)
  • OutFileWebResponseObject プロパティを追加しました (#24047)
  • Invoke-WebRequest -OutFile -Verbose でファイル名を表示できるように修正しました (#24041)
  • -Body が指定されているが ContentType が指定されていない場合の WebCmdlets を修正 (#23952) (貢献者: @CarloToso!)
  • -Resume が指定されたときに正しいサイズを報告するように Invoke-WebRequest を修正 (#20207) (貢献者: @LNKLEO!)
  • WinForm アプリが正常に動作するように Web コマンドレットを修正 (#20606)

その他のコマンドレットの機能強化

  • -NoRestartRegister-PSSessionConfiguration との連携 (#23891)
  • IgnoreComments および AllowTrailingCommas オプションを Test-Json コマンドレットに追加 (#23817) (貢献者: @ArmaanMcleod!)
  • Get-Help は、ValueFromRemainingArguments 属性を持つパラメーターをパイプライン可能として報告する場合がある (#23871)
  • Select-StringLineNumber の型を ulong に変更 (#24075) (貢献者: @Snowman-25!)
  • Get-Process: -IncludeUserName における管理者要件を削除 (#21302) (貢献者: @jborean93!)
  • パスとファイル名で無効な文字の有無が確認されるように Test-Path -IsValid を修正 (#21358)
  • エラー報告の ConciseViewRecommendedAction を追加 (#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)
  • HelpUriRemove-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!)
  • ネットワーク PSDriveDisplayRoot のレンダリングを修正 (#20793)
  • すべてのファイルがコピーされたときにのみ完了と表示するように Copy-Item の進行状況を修正 (#20517)
  • UNC パス補完の回帰を修正 (#20419) (貢献者: @MartinGC94!)
  • 無効な -ExecutionPolicypwsh に渡された場合にエラーを報告 (#20460)
  • 使用状況を追跡するために WinGetCommandNotFound および CompletionPredictor モジュールを追加 (#21040)
  • ConvertFrom-JsonDateKind パラメーターを追加 (#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)
  • モジュール読み込みテレメトリ許可リストに PSAdapterConsoleGuiTools を追加 (#20641)
  • 使用状況を追跡する WinGet モジュールを追加する (#21040)
  • WDAC ETW イベントのログ記録時にファイル名が null でないことを確認 (#20910) (貢献者: @jborean93!)
  • WDAC ログ機能によって発生する 4 つの回帰を修正 (#20913)
  • リダイレクトされない場合は入力、出力、エラーのハンドルを未設定のままにする (#20853)
  • 一般的なパラメーターに対して動作するように暗黙的なリモート処理プロキシ コマンドレットを修正 (#20367)
  • モジュールが見つからないときのエラー メッセージにモジュールのバージョンを含める (#20144) (貢献者: @ArmaanMcleod!)
  • ファイルが実行可能でない場合に setuidsticky を処理するように unixmode を修正 (#20366)
  • アセンブリ パスを構築するときに Path.Combine を使用するためのアセンブリの使用を修正 (#21169)
  • 無効な名前空間の宣言を防ぐために、セマンティック チェック中に名前空間を使用するための値を検証 (#21162)
  • $PSHOME を PATH の先頭に追加するときに、グローバル ツールを特別に処理 (#24228)

実験的な機能

以下の試験的機能は、PowerShell 7.5-rc.1 のメインストリーム機能に変換されました。

PowerShell 7.5-rc.1 には、以下の試験的機能が含まれています。

パフォーマンスの向上

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)