Test-Connectionが原点回帰

PowerShell 7.0.0 Preview6で導入された新機能や変更点について取り上げるのは、今回が最後になる。正式リリース前のプレビュー版だが、これまでに紹介したようにPreview6には多数の新機能追加や機能改善が行われている。Windows PowerShellの後継プロダクトに位置づけるための変更が急ピッチで行われた印象だ。

今回取り上げるのは、Test-ConnectionコマンドレットとImport-Moduleコマンドレットに追加された新機能だ。Test-Connectionコマンドレットは、Windows PowerShellに存在する。いわゆるpingコマンドと同じような動作をする機能で、WMI (Windows Management Instrumentation)を使って実装されている。このため、PowerShell Coreとしてオープンソース化された段階で、WMIに依存していたTest-Connectionコマンドレットはいったん削除された。

PowerShell Coreとして公開されてから、コミュニティの手によってTest-Connectionコマンドレットが再実装された。今度は.NET Core APIを使った実装が行われたため、WindowsのみならずmacOSやLinuxでも使用できるコマンドレットになった。

PowerShell 7.0.0 Preview6では、この再実装されたTest-Connectionコマンドレットに改善が加えられている。PowerShell CoreではTest-Connectionコマンドレットが再実装されたものの、Windows PowerShellとは異なる出力になっていた。PowerShell 7.0.0 Preview6ではこの部分が改善され、Windows PowerShellと同じような出力に変更されたのである。Windows PowerShellの後方互換性を向上させたかたちと言えるだろう。

Test-Connectionコマンドレット実行例

次のスクリーンショットは、Windows PowerShellでTest-Connectionコマンドレットを実行した結果だ。Windows PowerShellっぽい出力になっている。

Windows PowerShellでTest-Connectionコマンドレットを実行

一方、次のスクリーンショットはPowerShell CoreでTest-Connectionコマンドレットを実行した結果だ。出力結果がWindows PowerShellのTest-Connectionコマンドレットではなく、よくUNIX系OSで使われているpingコマンドに似ていることがわかる。

PowerShell CoreでTest-Connectionコマンドレットを実行

PowerShell 7.0.0 Preview6になると、Test-Connectionコマンドレットの出力が次のようにWindows PowerShellっぽい感じに戻ってきている。全く同じ出力ではないのだが、pingコマンドが出力するような情報もテーブル形式で出力されるようになっており、Windows PowerShellっぽくもありつつ、これまでよりも扱いやすいコマンドレットに改善されていることがわかる。

Windows 10のPowerShell 7.0.0 Preview6でTest-Connectionコマンドレットを実行

PowerShell Coreのときと同じように改善されたTest-Connectionコマンドレットは、クロスプラットフォームで提供されている。macOSで実行してもLinuxで実行しても、同じような出力を得ることができる。

macOSのPowerShell 7.0.0 Preview6でTest-Connectionコマンドレットを実行

macOSのPowerShell 7.0.0 Preview6でTest-Connectionコマンドレットを実行

開発しているのがMicrosoftのエンジニアだけだった場合、Test-Connectionコマンドレットの再実装やクロスプラットフォーム化にはもっと時間がかかったかもしれない。PowerShellはPowerShell Coreとしてオープンソース化してからコミュニティからのコントリビュートの活用が進んでいる。

Import-Moduleに非WinRM依存のインポート機能

Windows PowerShellからPowerShell Coreとしてオープンソース化された段階で、PowerShell Coreと互換性のないWindows PowerShellモジュールをインポートするための「Windows Compatibility Module」と呼ばれる機能が追加された。この機能は、WinRMと暗黙的なリモート処理を活用して機能を実現している。

PowerShell 7.0.0 Preview6にはImport-Moduleコマンドレットに同じような機能が取り込まれた。ただし、Import-Moduleコマンドレットに導入された機能はWinRMには依存しておらず、代わりにWindows PowerShell 5.1に依存している。つまり、PowerShell Core以降と互換性がないモジュールに関しては自動的にWindows PowerShell 5.1でモジュールを読み込んでリモート処理を行い、その結果をPowerShell 7のセッションに反映するという仕組みを採用しているわけだ。

この機能は、Windows Serverを管理している場合に特に役立つ、エンタープライズ用途では利用価値の高い機能だと言える。一方、Windows 10のようにクライアントとしてしか使っていないPCに対しては、この機能を使うことはあまりないかもしれない。

PowerShell 7リリース前の最後の大きな変更

PowerShell 7.0.0 Preview6はPowerShell 7の正式版をリリースする前の、最後の大きな変更バージョンだとされている。PowerShell 7の正式版リリース後にはまた新機能の追加などが行われるようになるだろうが、それまでしばらくの間はもう少し、緩やかな動きになる見込みだ。

参考資料