📖

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

2022/01/01に公開

はじめに

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 の管理など、マイクロソフト製品を使っている限りは 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 でも管理シェルはモジュール化されておらずスナップインのままです。 ↩︎

Discussion