Microsoftは2022年末に「PowerShell 7.3」のリリースを予定している。いくつかはまだアイデアの段階だが、新機能の開発や変更など、すでに行われている興味深い取り組みもある。最終的にどの機能がPowerShell 7.3に取り込まれるかは今後の進展次第だが、MicrosoftがPowershellチームのページ「PowerShell and OpenSSH team investments for 2022 - PowerShell Team」である程度説明をまとめているので、今回はその内容を簡単に紹介したい。

PowerShell 7.3

Microsoftは、1年に1回のペースでマイナーバージョンアップデートのリリースを計画している。現在のバージョンは「PowerShell 7.2」系であり、このバージョンは長期サポートバージョンと位置付けられている。先日、最新版となる「PowerShell 7.2.2」がリリースされたばかりだ。

  • PowerShell 7.2.2

    PowerShell 7.2.2

Microsoftは今年も例年通りのリリースを予定しており、2022年の年末には「PowerShell 7.3」を公開予定だ。PowerShell 7.3は通常のリリースであり、公開されてから1年間のサポートが予定されている。

.NET 6から.NET 7への移行

Microsoftは.NETとPowerShellのリリースの歩調を合わせるようにしている。PowerShell 7.2系が採用しているのは.NET 6で、年末にリリースが予定されているPowerShell 7.3では.NET 7の採用が予定されている。

Microsoftはもともと、PowerShell 7.3のプレビュー版を.NET 7と共に出荷する予定だったものの、.NET 7 preview 1にいくつかの問題が出たことから.NET 7を同梱したPowerShell 7.3 preview 2の出荷は行われなかった。

.NETはバージョンが上がると機能も追加される。そして、PowerShellは.NETをベースに開発されているため、.NETの機能強化はそのままPowerShellの機能強化にもつながる。.NETの発展は、PowerShellにとっても重要なのだ。

WindowsにPowerShell 7を同梱する取り組み

Microsoftは、WindowsにおけるシェルとしてPowerShell 7以降の利用を推奨している。Windowsに同梱されているのはWindows PowerShell 5.1だが、このバージョンは互換性目的のみでの提供となっており、基本的にはPowerShell 7の利用が推奨されている。

にもかかわらず、これまでMicrosoftはWindowsへのPowerShell 7の同梱に取り組んでこなかった。Microsoftはその理由として、PowerShell 7が依存している.NETのライフサイクルとWindowsのライフサイクルに違いがあることと、サイズの制約などを挙げている。こうしたことから、MicrosoftとしてはPowerShell 7の利用を推奨しつつ、デフォルトでは同梱されていないというちぐはぐな状態が続いている。

PowerShellチームは当初、この困った状況を解決する現実的な落としどころとして、ブートストラップの導入を考えていたという。しかし、これは実現するのに多大な労力がかかることがわかったため、現在ではWindows PowerShellにPowerShell 7を簡単にインストールするためのコマンドレットを同梱して出荷することを検討しているという。この件に関しては、新しいRFCを発行する予定だ。

現在の進み具合を考えると、仮にこのアイデアがうまく行ったとしても、Windows 11のWindows PowerShell 5.1にPowerShell 7をインストールするためのコマンドレットが同梱されるのはかなり先の話になる可能性が高い。しばらくは、開発者やユーザーが自らPowerShell 7をインストールしなければならない状況が続くことになりそうだ。

新機能を表示するGet-WhatsNewコマンドレット

PowerShell 7の新しいバージョンや新しいモジュールには多くの新機能が導入されていることが多い。ただし、現在、ブログを読んだりTwitterをフォローするなどしていないと、手軽に新機能について知るのは難しいのが実情だ。Microsoftはこれを改善する取り組みとして、何が新しくなったかを知るためのコマンドレット「Get-WhatsNew」の導入を予定している。近くRFCの発行が予定されているため、うまく進めば将来、どこかのバージョンでこのコマンドレットが導入されることが期待できる。

入力予測機能の開発機能

Microsoftは現在、入力補完機能のみならず入力予測機能の開発を行っている。現在取り込まれているのはコマンド履歴に基づいた入力予測機能だが、チームが自分たちの必要とする入力予測機能を開発できるように取り組みを進めている。これに関しては、近いうちにサンプルの公開が予定されている。

Windows版OpenSSH

MicrosoftはOpenSSHをWindowsへ移植して使っており、現在も最新版の移植を行っている。こうした取り組みは今後も継続されるとのことだが、特に「There’s some other exciting work happening with SSH that we aren’t quite ready to discuss yet. (SSHについては他にもエキサイティングなことが進んでいるのだが、まだ説明するための準備が整っていない)」というメッセージが興味深い。今後どのような発表が行われるのか、注目しておきたい。

PowerShell VSCode拡張機能

Visual Studio CodeのPowerShell拡張機能が改善される。パフォーマンスの向上と信頼性向上のために、スレッドの動作に関していくつかの重要な変更が実施される予定だ。引き続きバグ修正リリースを続け、プレビューリリースからより安定したリリース版への移行を目指すとしている。

Windows ARM64のサポート強化

Windows ARM64が普及するに連れて、顧客やパートナーからARM64版サポートの要望が出ているという。特にインストール用のMSIパッケージの提供が求められており、Windows ARM64版のインストールパッケージやMicrosoft Updateに対応させる追加作業に取り組んでいくとしている。

Local SessionConfiguration機能のサポート

SSHリモーティングで使用できるように、pwshの開始時に使用するローカルセッション設定ファイルが指定できる機能がサポートされる。ただし、WinRMに組み込まれている仮想アカウントでの実行やグループアカウントでの実行といった一部の機能はサポート対象外となる見通しだ。

Azure Marinerの追加サポート

MicrosoftはAzureが動作するLinuxを必要としているMicrosoftチームに対して、「Azure Mariner」と呼ばれるLinuxディストーションを提供している。このAzure Marinerディストリビューションには、すでにPowerShell 7のサポートが同梱されているが、Windows ARM64といったアーキテクチャのサポートも追加していくという。

Custom ConnectionInfo機能

PowerShellのリモートインフラストラクチャの機能を拡張するための取り組みが「Custom ConnectionInfo」だ。Microsoftは現在、PowerShellのリモーティングインフラストラクチャの機能をコミュニティが拡張できるようにするアイデアを出している。この仕組みを利用することで、例えばAzure Active Directory認証を実行してSSH接続を確立し、その接続を介してPowerShellでリモート実行を行うようなコマンドレットを開発できるようになるとされている。

AMSIおよびWDACの機能強化

AMSIおよびWDACのチームと協力し、セキュリティ態勢の改善に取り組んでいくという。Windows AntimalwareチームとWindows Application Controlチームがセキュリティ機能の強化に取り組むのに合わせて、それら機能を活用するようにPowerShell 7の機能強化に取り組んでいくとしている。

モジュール独立性への取り組み

PowerShell 7の利用が増えるにつれて、使用するモジュールの依存関係で衝突が発生しているという報告を受けることが増えてきたという。.NETは1度に読み込めるアセンブリバージョンを1つだけ許可しているため、異なるバージョンのモジュールに依存している場合にはモジュールのロードに失敗する事態が発生する。.NETの提供するAssemblyLoadContextを利用することで、複数のバージョンのアセンブリを同時に読み込むことはできるとされているものの、この機能は複雑だとされている。現在、これをより簡単にするためのいくつかの改良に取り組んでいるとしている。

PowerShellGet 3.0

モジュールのインストールや管理において重要な役割を担っている「PowerShellGet」の各種問題を解決するために、完全に書き直した新しいPowerShellGet 3.0に取り組んでいるという。すでに何度かプレビュー版を公開しており、リリース候補の段階へ近づいていると言える。

macOSサポートの改善

MicrosoftはPowerShell Core 6.0の時代からmacOS向けのPowerShellを提供しているものの、「macOS Notarization」には対応させていない。新しいバージョンのインストールをスムーズにするにはこのNotarizationへの対応が必要であり、今後取り組んでいきたいとしている。

PowerShellギャラリーの大幅な変更

PowerShellのモジュールなどを登録するサービス「PowerShellギャラリー」は、7年以上前に発表されたものだが、Microsoftの予想を上回る勢いで利用者が増えているという。MicrosoftはPowerShellギャラリーの継続的な成長と利用を考え、次の7年以上のシナリオをサポートするためにPowerShellギャラリーのアーキテクチャを大幅に変更することを検討している。詳しい情報は、後日公開するとされている。

なお、これらの情報がまとめられたページでは、新機能に関する説明ではないが、サイバーセキュリティに関する大統領令「Executive Order on Improving the Nation's Cybersecurity | The White House」へ対応していくといった旨の説明も行われていた。