『PowerShell実践ガイドブック』吉崎生(Kindle版)をPC版Kindleで読む

関数の書き方を復習する目的で“『PowerShell実践ガイドブック』吉崎生(Kindle版)”を購入してみて、Kindle版の感想というかKindleの操作方法に関してメモしておこう。
ピンポイントで情報を取得したい場合はネットは便利だが、情報が断片的であるため体系的に学習する場合には本の方が時間を節約できる。
そして紙の本の方が読みやすいが、Kindle版にしたのはNote PC (Windows10)での持ち運びを優先したためである。『PowerShell実践ガイドブック』は分厚く重いのである。

kindle edition

著者による紹介

PowerShell実践ガイドブック』に関しては以下のリンクに著者による紹介がある。
tech.guitarrapc.com

PC版Kindleの設定

PC版Kindleはいつも起動が遅いので閉口していたが、自動更新しないようにすれば少し速くなるようなので、
「ツール」→「オプション」→「一般」で「更新がある場合は自動的にインストールする」のチェックボックスを外しておこう。
私のNote PCは13.3インチの解像度1920×1080のFull HDディスプレイだが、全画面表示で拡大しないとちょっと文字が小さく読むのが難しい。
タブレットにできるような機種だとより読みやすくできるのかもしれないが、表示を横から縦に変更しようとするとマウスカーソルの挙動が怪しかったので諦めた。
全画面表示にしたらマウスを画面の下の方へ移動させると、ページ表示の切り替えボタンや拡大、縮小ボタンが表示されるので、好みの表示にしよう。

index image

スペースキーでページ移動できる点は便利だが、なにせ私にはデフォルトの表示では、少々、文字が小さかったので、1ページ表示にして、横幅が画面に収まる最大のサイズにした。

こうした状態で、スペースキーでページ移動してしまうと画面に表示されていない部分を読まずに次のページに移ってしまうので、忍耐強くスクロールで移動することになる。

Advanced Function

さて、関数の書き方を復習しよう。

Advanced Function
Advanced functions allow you create cmdlets that are written as a PowerShell function. Advanced functions make it easier to create cmdlets without having to write and compile a binary cmdlet. Binary cmdlets are .NET classes that are written in a .NET language such as C#.

about Functions Advanced - PowerShell | Microsoft Docs

関数は高度化させるため param()に[CmdletBinding()]属性を付加する。
そして、当面の必要がなくてもパイプラインから値を受け取るようにしよう。

Parameter()の指定

  • Mandatory=$True この引数は必須
  • ValueFromPipeline=$True パイプラインから値を受け取ることができる

ちなみに、パイプラインとパラメーターでは処理の仕方が変わってくることに注意を促している。
本書の441ページで説明されていたので、ちょっと紹介しよう。

Function Test-Function {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory=$True,
                   ValueFromPipeline=$True)]
        [ValidateNotNullOrEmpty()]
        [int[]]$item
    )

    begin {
        write-output "begin : $item"
    }

    process {
        write-output "proces : $item"
    }

    end {
        write-output "end : $item"
    }
}

パラメーター指定での実行例。引数は配列のまま渡される。

PS >test-function -item(1..3)
begin : 1 2 3
proces : 1 2 3
end : 1 2 3

パイプラインでの実行例。パイプラインでは配列の各要素が逐次処理される。

PS >(1..3) | test-function
begin :
proces : 1
proces : 2
proces : 3
end : 3

このような挙動の違いがどのような状況で問題になるのか思いつかないが、頭の隅にとどめておこう(きっと忘れてしまうと思うが・・・)。

やはり関数は、パイプラインを使う予定がなくても、この "Advanced Function" スタイルで関数を定義するのが良いのではないかと思う。
初心者が本書をいっきに消化するのは厳しいかもしれないが、ある程度、経験のあるユーザーが体系的に学ぶには良いと思う。ちなみに私は消化不良の状態で、いまだに"Advanced Function"の解説がある第4章「スクリプティングと自動化」を読み終えることができないでいる・・・

『PowerShell実践ガイドブック』吉崎生(著)を読んだときのメモ - willwealth’s diary

2022/08/06 追記
パラメーター指定とパイプラインとの挙動の違いはメールを送信するときなどに利用できるかもしれない。
Qiitaの記事を参考にPowerShellでGmailを送信するスクリプトを書いてみたときのメモ - willwealth’s diary