📖

PowerShell 実践ガイドブック 書籍レビュー

に公開

はじめに

https://tech.guitarrapc.com/entry/2018/05/09/213035

気になったので応募したところ当選しました。ぎたぱそ氏およびマイナビ出版の方にはこの場を借りてお礼を申し上げます。今回は書籍レビューです。

https://book.mynavi.jp/ec/products/detail/id=90597

PowerShell との思い出

もともと SharePoint を扱っていたため、PowerShell は SharePoint の管理に使ってきました。SharePoint では 2010 から、これまでの stsadm.exe に代わりサーバー サイドの管理ツールとして導入されました。[1] 最近では SharePoint Online Management Shell や PnP-PowerShell など、クライアント サイドの管理ツールも増えています。ただし、これらはまだ PowerShell Core には対応していないため、Windows PowerShell を使っています。

SharePoint 以外にも Active Directory や Exchange の管理など、Microsoft 製品を使っている限り PowerShell にはお世話になっています。ASP.NET から System.Management.Automation.dll を使い、リモートの Exchange に接続して New-MailBox を呼び出したこともありました。

客先で借り受けた PC に開発環境が何も入っていない場合、標準で搭載されている PowerShell でコードを書いたこともあります。最悪の場合でも .NET が使え、コンパイラ不要な言語として扱えるので助かりました。

Git の CUI としても活用しています。posh-git と GitPad の組み合わせは便利です。

前置きが長くなりましたが、ここから本題のレビューです。

よかったところ

動作環境は PowerShell Core が前提です。クロス プラットフォームを意識しており、特にコマンド プロンプトや bash との比較が印象的でした。Windows ユーザーはコマンド プロンプトの後継製品として PowerShell を理解しています。しかし、Linux や Mac OS のユーザーは PowerShell への関心がそれほど高くありません。bash との比較があることで、これまでやってきたことや今後やりたいことが具体的にイメージしやすいと感じました。

PowerShell Core 限定というよりは PowerShell 全般に関する内容も多く、Windows PowerShell を使っている方にも役立つ内容が多く含まれています。私は PowerShell を Hey, Scripting Guy! やぎたぱそ氏のブログも含む個人ブログを参考に学習してきました。やりたいことを満たすための習得にはそれで十分ですが、知識が偏りがちになるため、網羅的に学習するには本書は良い教材です。トランスクリプトについては正直知りませんでした。

また、経験に裏打ちされたベスト プラクティスが随所に記載されています。個人的には、結果を Write-Output に流さないための書き方のベンチマークが参考になりました。なんとなく PowerShell らしい書き方として Out-Null を使っていましたが、パイプラインは時間がかかるという点は衝撃でした。今後は他の方法で記述したいです。このようなテクニックは第 5 章にまとめられているので、ある程度 PowerShell を理解していて全体を読むのが大変な方は、第 5 章だけでも読むことをおすすめします。

気になったところ

よかった点と相反する形になりますが、他のスクリプト言語と比較する際にコマンド プロンプトや bash が適切だったかについては疑問が残ります。確かに PowerShell は対話型のシェルとしても使えますが、コマンド プロンプトや bash よりも高級言語の側面があります。比較対象としては、Windows であれば VBScript、Linux であれば awk、sed、Perl などが適していると考えます。特に VBScript や VBA はパワーユーザー向けの言語であり、PowerShell への移行が推奨されます。これらの言語へのサポートがあれば、より PowerShell の普及に役立つのではないかと感じました。

細かい点ですが、配列の項目で固定長配列の宣言方法についての記載がありませんでした。特にバイナリ処理で利用することがあるため、記載があるとより親切だと感じました。

$buffer = New-Object byte[] 1024

誤字が目立った点について改訂版が出る際には修正されることを期待します。

また、もともと本書に期待することではありませんが、C# との相互運用についてさらに多く記載してほしかったです。本書でも C# でコマンドレットを作成する方法は紹介されています。さらに踏み込んで、C# から RunSpace を作成して PowerShell のコマンドレットを呼び出す方法などもあるため、今後そのような内容の書籍が出版されることを期待します。

脚注
  1. ちなみにそのような経緯もあり、SharePoint 2016 でも管理シェルはモジュール化されておらずスナップインのままです。 ↩︎

Discussion