PowerShell 7.5がリリースされました
しばたです。
昨年11月の.NET 9のリリースから約2ヶ月を経て、今週になってPowerShell 7.5がリリースされました。
残念ながらまだPowerShell Teamブログでの案内はありません[1]が、既にGitHub等からインストールして実際に試すことが可能です。
本記事では公開情報から新機能などをお伝えしたいと思います。
リリース種別とサポートサイクル
PowerShell 7.5は基盤に.NET 9を使用しておりサポートサイクルも.NET 9のそれに従います。
本日時点では以下のサポート予定です。
バージョン | サポートポリシー | EOL |
---|---|---|
7.5 | Stable (non-LTS) | 2026年5月12日 |
7.4 | LTS (Current) | 2026年11月10日 |
7.3 | - | サポート切れ |
7.2 | LTS (Previous) | サポート切れ |
7.1 | - | サポート切れ |
7.0 | LTS (Previous) | サポート切れ |
.NET 9は非LTSバージョンのためPowerShell 7.5も非LTSとなります。
サポート終了日も現在のLTSバージョンである7.4より短いのでご留意ください。
なお、PowerShell 7.4以前のバージョンは全てサポート終了済みなので古いバージョンをお使いの方は適宜バージョンアップをしてください。
PowerShell 7.5の入手方法、更新方法
PowerShell 7.5の入手方法やアップデート方法はPowerShell 7 ~ 7.4の時と基本的に同じです。
GitHubリポジトリおよび各種パッケージマネージャからインストール可能です。
詳細な手順はGitHubにある手順をご覧ください。
ちなみにですが、PowerShell 7.5からarm版Windows環境向けのMSIインストーラー(win-arm64.msi
)が提供されています。
(PowerShell 7.4以前のバージョンにもバックポート済み)
これまでarm版のPowerShellはMicrosoftストアからしかインストールできなかった点が改善されています。
対応プラットフォーム
PowerShell 7.5を利用可能なプラットフォームは7.4と同じ様です。
プラットフォーム毎の詳細についてはMicrosoftのドキュメントでご確認ください。
PowerShell 7.5 新機能・破壊的変更
PowerShell 7.5 RC1リリース当時のブログがあるのでこちらを紹介しておきます。
また、新機能についてはMicrosoft Learnのドキュメントでも詳細がまとめられています。
本記事ではこれらのドキュメントからいくつかピックアップして紹介します。
全体的な所感
PowerShell 7.5もPowerShell 7.4から大きく変わらず既存機能の改善やバグフィックスがメインとなっています。
そして.NET 9自体が過去バージョンに対するパフォーマンス改善を謳っておりPowerShellもこの改善の恩恵を受けています。
PSReadlineとPSResourceGetのバージョン
PowerShell本体に同梱される各モジュールは最新バージョンとなっています。
- PSReadLine v2.3.6
- Microsoft.PowerShell.PSResourceGet v1.1.0
PowerShell 7.4からPSResourceGet(旧 PowerShellGet v3)が同梱される様になりましたが、PowerShell 7.5では更新版のv1.1.0になっています。
PSReadLine v2.3.6、PSResourceGet v1.1.0両者ともバグフィックスのみで目立った新機能はありませんでした。
コマンドレットの追加
PowerShell 7.5では新たにConvertTo-CliXmlとConvertFrom-CliXmlの2つのコマンドレットが増えました。
CLIXMLはPowerShell内部オブジェクトのシリアライズに使うXML形式であり、コマンドレットの実行結果をファイルに保存して別ホストで復元するといったことができます。
従来はファイルに対する入出力を行うExport-Clixml
とImport-Clixml
のみ存在していたのですが、ファイルを介さない処理も欲しいという要望に基づいて新しいコマンドレットが増えました。
要望自体はPowerShell Core 6リリース前のかなり昔に起票されているのですが、2025年の今になって実装された理由は正直よくわかりません...
一応GitHubのIssueでは定期的に利用者からの声が上がっていた様なのでそれを受けてのことなのでしょう。
コマンドレットの改善
その他コマンドレットの改善はかなり細かくバグフィックスと言えるものも多いです。
個別の内容についてはWhat's Newを確認していただくのが良いでしょう。
エンジンの改善
エンジンの改善としては配列に対する+=
演算子の性能改善が目立つ感じです。
こちらはWhat's newに専用のセクションが設けられているので詳細はそちらで確認頂くと良いでしょう。
従来のバージョンでList<T>.Add(T)
メソッドと比べてかなり遅かった+=
演算子による処理がこの改善によりList<T>.Add(T)
メソッドを超えるまでになっています。
配列に対する+=
演算子の性能は以前から考慮事項として記載されていたので、ここが改善されるのは喜ばしい限りです。
あとWindows環境においてWinGet関連のPowerShellモジュールの利用状況をテレメトリに追加しているのですが、恐らくこれは意図した結果になっていない気がします。
(Microsoft.WinGet.CommandNotFoundに対するテレメトリを増やそうとしてSteveL-MSFT/WinGetCommandNotFoundの方を増やしてる予感...)
試験的な機能からの昇格
PowerShell 7.5では3つの試験的な機能が本機能に昇格しています。
1. PSCommandNotFoundSuggestion
こちらは実行コマンドが見つからない場合に候補をリストアップする機能です。
Linuxにおけるcommand-not-found
に相当するやつです。
# コマンドが見つからない場合に候補をリストアップしてくれる様に
PS C:\> cm
cm: The term 'cm' is not recognized as a name of a cmdlet, function, script file, or executable program.
Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
[general]
The most similar commands are:
➤ gcm, gm, cp, rm, cd
2. PSCommandWithArgs
こちらはPowerShell本体(pwsh.exe
, pwsh
)の起動引数に-CommandWithArgs
が増え、引数指定でコマンドライン文字列を渡せる様になりました。
以下の例を見て頂ければイメージは掴めるかと思います。
# -CommandWithArgs パラメーターでコマンドライン文字列に引数を渡せる様に
pwsh -CommandWithArgs '$args | % { "arg: $_" }' arg1 arg2
3. PSModuleAutoLoadSkipOfflineFiles
PowerShellは起動時にPSModulePath
で指定されるフォルダ内のモジュールを走査しオートロードの対象とします。
このオートロードの際にフォルダ内のファイルにアクセスしますが、ファイルがOneDriveのファイルオンデマンドの様なクラウドストレージから同期するタイプで未ダウンロードの状態であれば処理をスキップします。
これによりクラウドストレージからの不要なダウンロードを回避できる様になりました。
破壊的変更
PowerShell 7.5における破壊的変更は以下とされています。
Test-Path
コマンドで-PathType
を指定した際の-OlderThan
、-NewerThan
パラメーターの挙動を改善- 基本的には
-OlderThan
パラメーターが無視されるバグに対する修正なのですが、従来と結果が変わるため破壊的変更に含まれています
- 基本的には
New-FileCatalog
コマンドにおける-CatalogVersion
パラメーターのデフォルト値が1
から2
に更新- 以前からカタログバージョンv1は非推奨であり、Windows 7、Windows Server 2008 R2までのサポートであるため更新されました
- JEA等の制限されたリモートセッション上でヘルプファイルへのネットワークアクセスをブロックする様に
- セキュリティ上の制限の様です。詳細はGitHubのプルリクエスト(#20593)でご確認ください
- MSIインストーラーが前回のインストールオプションを記憶する様に改善
ConvertTo-Json
コマンドでBigInteger
型の値を数値としてシリアライズできる様に改善- 従来
BigInteger
型の値はオブジェクト扱いされ各種プロパティがシリアライズの対象になっていました
- 従来
ドキュメント上はこれだけですが、基盤が.NET 9になったことにより.NET 9の破壊的変更に由来する挙動の変化もあるかもしれません。
以下のDiscussionsで情報を集めようとしている人もいるので併せてチェックすると良いでしょう。
最後に
以上となります。
PowerShell 7.4から引き続いて内部的な改善が多い印象です。
新しいバージョンを利用するのに問題の無い環境であれば積極的にPowerShell 7.5を使っていくと良いでしょう。
今回はLTSバージョンではないので次のLTS(PowerShell 7.6)に向けた検証や新機能のお試し用にするのもアリだと思います。
これまでのバージョンだとリリース日にブログでのアナウンスも行われるのが通例だったのですが今回は遅れています。理由も特に明言されていません。 ↩︎