PowerShell Core 6.1ではコマンドレットごとに細かい機能追加や改善も実施されている。今回はそうしたコマンドレットのうち、Update-Help、Where-Object、New-ModuleManifest、Measure-Objectを取り上げる。

Update-Help

PowerShell Coreには新しいヘルプファイルをダウンロードしてインストールを行うUpdate-Helpコマンドレットがある。

これまでUpdate-Helpコマンドレットの実行には管理者ユーザの権限が必要だったが、PowerShell Core 6.1からはユーザ権限でこのコマンドレットを実行できるようになった。

ユーザ権限で動作するUpdate-Helpコマンドレット

PowerShell Core 6.1のUpdate-Helpコマンドレットはユーザ権限で書き込める領域にヘルプファイルをインストールするため、ユーザ権限で実行が可能になっている。Update-Helpコマンドレットを実行するとダウンロードとインストールの進捗を示す様子がCUIベースの進捗バーで表示される。

Where-Object -Not

PowerShell Core 6.1のWhere-Objectコマンドレットに新しく-Notパラメータが追加された。

-Notパラメータを使うことで存在していないパラメータやNUllまたは空のプロパティ値でのフィルタリングが実行できるようになった。

例えば次のようにGet-Serviceコマンドレットの出力をWhere-Objectにパイプで接続すると、依存定義を持っていないサービスのみが出力されるようになる。

依存サービスが定義されていないサービスのみを表示する処理

Get-Service | Where-Object -Not DependentServices

依存サービスが定義されていないサービスのみを表示

逆に、-Notを指定しないで実行すると依存サービスが定義されているサービスのみが表示されるようになる。

依存サービスが定義されているサービスのみを表示する

Get-Service | Where-Object DependentServices

Where-Object -Not DependentServicesでフィルタリングされる内容と、Where-Object DependentServicesでフィルタリングされる内容はお互いに重複しない内容になっている。Where-Object -Not DependentServicesとWhere-Object DependentServicesの出力結果を合わせると、なにもフィルタリングされていない結果と一致する。

Where-Objectに-Notを指定できるようになったことで、場合によってはこれまでよりもスマートに記述できるようになるだろう。

New-ModuleManifest

MicrosoftはPowerShell Core 6.0からBOMなしUTF-8への移行を進めている。PowerShell Core 6.1ではNew-ModuleManifestコマンドレットがアップデートされ、これまでのUTF-16ではなくBOMなしのUTF-8ドキュメントを出力するようになた。

Windowsアプリケーションのいくつかは文書ファイルの先頭にBOM (Byte Order Mark)というデータを必要としている。しかし、BOMを付けると逆に正しく動作しないアプリケーションもあるほか、macOSやLinuxではBOMなしの文書データを扱うことの方が多い。

オープンソースソフトウェアでマルチプラットフォーム対応となったPowerShell CoreとしてはこれまでのようにBOMを付けたデータを生成するよりもBOMなしのデータを生成する方が好ましいと言える。

Measure-Objectに標準偏差

PowerShell Coreにはオブジェクトの特定の型のプロパティ値を数値計算するMeasure-Objectというコマンドレットが含まれている。Measure-Objectを利用することでカウント、最大値、最小値、積算値、平均値などを求めることができる。PowerShell Core 6.1ではこの計算方式に標準偏差(Standard Deviation)が追加された。

Measure-Objectに標準偏差を追加

Measure-Objectはプロパティを指定して計算する対象を指定することができるほか、どの数値計算を実施するのかも指定することができる。今回、標準偏差が追加されたことでオプションに-StandardDeviationが追加されている。

more

これまでWindowsのPowerShell ではmore.comをラップしたmoreと呼ばれる関数が含まれていたが、PowerShell Core 6.1からはこれが削除され、アプリケーションとしてのmoreが使われるようになった。たとえばWindowsであればmore.comだし、macOSであれば/usr/bin/moreが使われる。

macOSでのmore

Windows 10でのmore

moreは多くのオペレーティングシステムでデフォルトで提供されているページャコマンド。提供されている機能やオプションはオペレーティングシステムごとに異なるが、インタラクティブなページャとして使われる点は共有している。

参考資料