からめもぶろぐ。

SharePoint が得意なフレンズなんだね!すごーい!

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

tech.guitarrapc.com

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


PowerShell との思い出

もともと SharePoint をやってきたので、PowerShell は基本的に SharePoint の管理のためにお世話になっています。SharePoint では 2010 からこれまでの stsadm.exe に代わってサーバー サイドの管理ツールとして SharePoint 管理シェルとして導入されました。*1 最近では SharePoint Online Management Shell だとか PnP-PowerShell だとか、クライアント サイドでの管理ツールも増えてきました。とはいえまだ PowerShell Core には対応されていないので、Windows PowerShell を使っている感じです。*2

SharePoint 以外でも Active Directory の管理や Exchange の管理など、マイクロソフト製品を使っている限りは PowerShell にはお世話になります。かつては ASP.NET から System.Management.Automation.dll を使ってリモートの Exhange に接続して 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 でも管理シェルはモジュール化されておらずスナップインのままです。

*2:PowerShell Core で SharePoint の管理をしたい場合は SPClientCore を使ってね!