PowerShell 7.4 の新機能

PowerShell 7.4 には、次の機能、更新、破壊的変更が含まれています。 PowerShell 7.4 は .NET 8.0.0 の上に構築されます。

詳細な変更一覧については、GitHub リポジトリの変更ログを参照してください。

重大な変更

  • Nano Server Docker イメージは、このリリースでは使用できません
  • ProgressAction パラメーターを共通パラメーターに追加
  • 引数が空の文字列である場合に ArgumentNullException ではなく ArgumentException をスローするように一部の PowerShell API を更新 (#19215) (@xtqqczze!) に感謝
  • #requires -pssnapin に関連するコードを削除 (#19320)
  • Test-Json では、Newtonsoft.Json.Schema の代わりに JsonSchema.Net が使用されるようになりました。 この変更により、Test-Json では以前の Draft 4 スキーマはサポートされなくなりました。 (#18141) (@gregsdennis!) に感謝します) JSON スキーマの詳細については、JSON スキーマのドキュメントを参照してください。
  • Test-Connection からの出力に、TCP 接続テストに関するより詳細な情報が含まれるようになりました
  • .NET では、Test-Connection に影響を与える変更が導入されました。 コマンドレットが、カスタム バッファー サイズを使用するときに Linux プラットフォームで sudo を使用する必要性に関するエラーを返すようになりました (#20369)
  • 実験機能 PSNativeCommandPreserveBytePipe がメインストリームになりました。 PowerShell は現在、ネイティブ コマンドの stdout ストリームをファイルにリダイレクトするとき、またはバイト ストリーム データをネイティブ コマンドの stdin ストリームにパイプするときに、バイト ストリーム データを保持できます。
  • RelativeBasePath パラメータを使用する場合の Resolve-Path の相対パスの処理方法を変更します (#19755) (@MartinGC94!)に感謝します
  • 未使用の PSv2 コードの削除 - TabExpansion 関数を削除します (#18337)

インストーラーの更新

Windows MSI パッケージでは、インストール中に PowerShell テレメトリを無効にするオプションが提供されるようになりました。 詳細については、「コマンド ラインから msi パッケージをインストールする」を参照してください。

PSResourceGet と PSReadLine のバージョンを更新しました

PowerShell 7.4 には、Microsoft.PowerShell.PSResourceGet v1.0.1 が含まれています。 このモジュールは、PowerShellGet v2.2.5 と PackageManagement v1.4.8.1 と並行してインストールされます。 詳細については、Microsoft.PowerShell.PSResourceGet のドキュメントを参照してください。

PowerShell 7.4 に、PSReadLine v2.3.4 が含まれるようになりました。 詳細については、PSReadLine のドキュメントを参照してください。

タブ補完の改善

タブ補完の改善に関するすべての作業について @MartinGC94 と他の方々に感謝します。

  • 空の配列式を使用してスクリプトの最初のコマンドを補完するときの問題を修正 (#18355)
  • 位置引数の候補を修正 (#17796)
  • 位置引数を補完するときの既定のパラメーター セットの優先順位付け (#18755)
  • 動的パラメーターの擬似バインディングを改善 (#18030)
  • ハッシュテーブル キーの型の推定を改善 (#17907)
  • 空の return ステートメントの型の推定エラーを修正 (#18351)
  • Get-Random の型の推定を改善 (#18972)
  • すべてのスコープ変数の型の推定を修正 (#18758)
  • パイプラインでの推論された型の列挙を改善 (#17799)
  • 列挙型を比較するときに比較に値の補完を追加 (#17654)
  • 列挙型のプロパティ割り当ての補完を追加 (#19178)
  • PSCustomObject 変数プロパティの補完を修正 (#18682)
  • 属性引数のメンバー補完を修正 (#17902)
  • 補完結果から冗長パラメーター エイリアスを除外 (#19382)
  • 基本型を持つクラスのクラス メンバー補完を修正 (#19179)
  • Using キーワードの補完を追加 (#16514)
  • 変数補完時の TabExpansion2 変数の漏れを修正 (#18763)
  • ScriptBlock スコープ全体での変数の補完を有効化 (#19819)
  • foreach ステートメント変数の補完を修正 (#19814)
  • 変数型の推論の優先順位を修正 (#18691)
  • PowerShell の Enum クラスのメンバー補完を修正 (#19740)
  • メソッド呼び出しのインデックス式の配列リテラルの解析を修正 (#19224)
  • パス補完を改善 (#19489)
  • 空のスクリプト入力に対する CompleteInput の範囲外インデックス作成のエラーを修正 (#19501)
  • 変数補完のパフォーマンスを向上 (#19595)
  • 型制約付き変数割り当て、入れ子になったハッシュテーブルなどのハッシュテーブル キー補完を改善 (#17660)
  • 外部アプリケーションの出力を文字列として推論 (#19193)
  • ValidateRange 属性によって許可されていない値を除外するように列挙型のパラメーター補完を更新 (#17750) (次の方に感謝: @fflaten!)。
  • 動的パラメーター補完を修正 (#19510)
  • Data ステートメントによって割り当てられた変数の補完を追加 (#19831)

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

Web コマンドレットの改善に関するすべての作業について @CarloToso と他の方々に感謝します。

  • Brotli を含むように Web コマンドレットの展開を修正しました (#17955) (次の方に感謝: @iSazonov!)
  • Webcmdlets へのコードをリダイレクトするための 308 の追加および軽微な修正 (#18536)
  • ダウンロードが完了または取り消されたときに、Invoke-WebRequest の進行状況バーのレンダリングを完了 (#18130)
  • 状態コードが 429 の場合に Web コマンドレットが応答ヘッダーから Retry-After 間隔を取得する (#18717)
  • Web コマンドレットが既定の文字セット エンコードを UTF8 に設定する (#18219)
  • WebSession.MaximumRedirection が変更されないようにする (#19190)
  • WebCmdlets で XML 宣言を解析してエンコード値を取得する (存在する場合)。 (#18748)
  • エンコードなしの webcmdlets での xml -Body の使用を修正 (#19281)
  • WebCmdlets の既定のコンテンツ タイプについて PUT メソッドの動作を POST に調整 (#19152)
  • WebCmdlets の Headers の ContentType を考慮する (#19227)
  • Web コマンドレットに -PreserveHttpMethodOnRedirect を追加することで元の HTTP メソッドを保持できるようにする (#18894)
  • Webcmdlets で https から http へのリダイレクトでエラーが表示される (#18595)
  • Web コマンドレットに AllowInsecureRedirect を追加 (#18546)
  • コンテンツの長さが不明な場合の Web コマンドレットの詳細メッセージを改善 (#19252)
  • Invoke-WebRequest の応答からリンクの相対 URI を構築 (#19092)
  • WebCmdlets の -CustomMethod POST のリダイレクトを修正 (#19111)
  • Webcmdlets の以前の応答を破棄 (#19117)
  • Invoke-WebRequest XML および JSON エラー形式を改善 (#18837)
  • WebCmdlets の OutFileInFile パラメーターに ValidateNotNullOrEmpty を追加 (#19044)
  • HttpKnownHeaderNames でヘッダー リストを更新 (#18947)
  • Invoke-RestMethod -FollowRelLink がコンマを含むリンクを修正 (#18829)
  • Web コマンドレットのリダイレクトと KeepAuthorization の管理に関するバグを修正 (#18902)
  • HttpResponseExceptionStatusCode を追加 (#18842)
  • Web コマンドレットの HTTP の永続的な接続をサポート (#19249) (@stevenebutler!) に感謝
  • Invoke-RestMethod の軽微な修正 (#19490)
  • WebCmdlets の詳細メッセージが正しい HTTP バージョンを表示するように改善 (#19616)
  • WebCmdlets の MultipartFileContentFileNameStar を追加 (#19467)
  • WebCmdlets が Retry-After ヘッダーから再試行間隔を取得するための HTTP ステータスを 409 から 429 に修正。 (#19622) (次の方に感謝: @mkht!)
  • -TimeoutSec-ConnectionTimeoutSeconds に変更し、Web コマンドレットに -OperationTimeoutSeconds を追加 (#19558) (次の方に感謝: @stevenebutler!) その他のコマンドレット
  • WebCmdlets でのデータの読み取り中に接続がハングした場合の Ctrl + c キーをサポート (#19330) (次の方に感謝: @stevenebutler!)
  • WebCmdlets での Unix ドメイン ソケットをサポート (#19343)

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

  • Test-Connection が、カスタム バッファー サイズを使用するときに Linux プラットフォームで sudo を使用する必要性に関するエラーを返すようになりました (#20369)
  • Format コマンドに出力の種類を追加 (#18746) (次の方に感謝: @MartinGC94!)
  • Get-WinEvent の出力型属性を追加 (#17948) (次の方に感謝: @MartinGC94!)
  • Test-Json コマンドレットに PathLiteralPath パラメーターを追加 (#19042) (@ArmaanMcleod!) に感謝
  • ConvertTo-Csv コマンドレットと Export-Csv コマンドレットに NoHeader パラメーターを追加 (#19108) (@ArmaanMcleod!) に感謝
  • Confirm パラメーターと WhatIf パラメーターを Stop-Transcript に追加 (#18731) (感謝します @JohnLBevan!)
  • FuzzyMinimumDistance パラメーターを Get-Command に追加 (#18261)
  • Encoding パラメーターを使用して PowerShell で ANSI エンコードを実行できるようにする (#19298) (@CarloToso!) に感謝
  • Copy-Item への進行状況の追加 (#18735)
  • Update-Help では、米国以外のシステムで暗黙的なカルチャを使用するとエラーが報告されるようになりました。 (#17780) (感謝します @dkaszews!)
  • 完了した進行状況レコードを作成するときにアクティビティを必須にしなくなりました (#18474) (次の方に感謝: @MartinGC94!)
  • Get-Content コマンドレット パラメーターの -Head および -Tail に負の値を許容しない (#19715) (次の方に感謝: @CarloToso!)
  • 現在のカルチャが言語に関連付けられていない場合に、Update-Help に適切なエラーをスローさせるようにしました (#19765) (次の方に感謝: @josea!)
  • Select-Object コマンドレットで -Skip-SkipLast パラメーターの組み合わせを許可。 (#18849) (次の方に感謝: @ArmaanMcleod!)
  • Get-SecureRandom コマンドレットを追加 (#19587)
  • リモート使用用途の Set-Clipboard -AsOSC52 (#18222) (次の方に感謝: @dkaszews!)
  • Resolve-Path の相対パス解決を高速化 (#19171) (次の方に感謝: @MartinGC94!)
  • switch パラメーター -CaseInsensitiveSelect-Object コマンドレットと Get-Unique コマンドレットに追加 (#19683) (@ArmaanMcleod!) に感謝
  • Unix で sudo を使用して実行していない場合、Restart-ComputerStop-Computer はエラーで失敗します (#19824)

エンジンの機能強化

の更新$PSStyle

  • Dim プロパティと DimOff プロパティを追加 (#18653)
  • 前景と背景の ConsoleColor 値を ANSI エスケープ シーケンスにマップする静的メソッドを PSStyle クラスに追加 (#17938)
  • 計算フィールドのテーブル ヘッダーは、既定では斜体に書式設定されます
  • リモート ホストでの $PSStyle.OutputRendering の優先のサポートを追加 (#19601)
  • CrescendoBuilt モジュールの使用を含むようにテレメトリ データを更新しました (#20371)

その他のエンジンの更新

  • NoRunspaceAffinity 属性の宣言時に PowerShell クラスを Runspace に関連付けないようにする (#18138)
  • ValidateNotNullOrWhiteSpace 属性を追加 (#17191) (感謝します @wmentha!)
  • レガシ引数渡しのリストに sqlcmd を追加 (#18559)
  • 関数 cd~ を追加 (#18308) (感謝します @GigaScratch!)
  • ジェネリック型での配列型の解析を修正 (#19205) (次の方に感謝: @MartinGC94!)
  • デバイス パスのルートでのワイルドカード グロビングを修正 (#19442) (次の方に感謝: @MartinGC94!)
  • PSModulePath 要素の場所を取得するためのパブリック API を追加 (#19422)
  • 型変換における正しくない文字列を修正 (#19560) (次の方に感謝: @MartinGC94!)
  • 多数のブレークポイントが使用されている場合の実行速度の低下を修正 (#14953) (次の方に感謝: @nohwnd!)
  • #requires -pssnapin に関連するコードを削除 (#19320)

試験的な機能

PowerShell 7.4 では、次の試験的な機能が導入されています。

  • PSFeedbackProvider - ハードコーディングされた提案フレームワークを拡張可能なフィードバック プロバイダーに置き換えます。
    • また、この機能によって FeedbackNameFeedbackTextFeedbackAction プロパティが $PSStyle.Formatting に追加され、これによりフィードバック メッセージの書式設定を変更できます。
  • PSModuleAutoLoadSkipOfflineFiles - モジュールの検出で、クラウド プロバイダーによって完全にディスク上にないとしてマークされたファイルがスキップされるようになりました。
  • PSCommandWithArgs - 単一の文字列としてコマンドに引数を渡すためのサポートを追加

次の試験的な機能がメインストリームになりました。

PowerShell 7.4 では、次の試験的な機能が変更されました。

  • PSCommandNotFoundSuggestion - この機能では、ハードコーディングされた提案ではなく拡張可能なフィードバック プロバイダーが使用されるようになりました (#18726)

試験的な機能の詳細については、試験的機能の使用に関するページを参照してください。