Windows Power Shell は、 Windows をコマンドラインから、あるいは、 スクリプトを使って管理するために作られた新しいシェル環境です。
作られた目的のせいか、 Power Shell を解説する書籍・ウェブサイトには、 「管理者向けの TIPS、実例集」 (レジストリの値の変え方とか、WMI の呼び出し方とか) みたいな物が多かったりします。
でも、Power Shell を調べてみた感じ、 Power Shell 用のスクリプト言語や、 コマンドレットの動作・作り方など、 プログラミング的にも結構面白そうな感じなので、 その辺りを中心に話をしてみようかと思います。
(注: コマンドの実行結果など、 ページ表示の収まりをよくするため、 ところどころ省略している部分があります。 )
(書きかけ) 以下、そのうちどこかに追加しようとしてる話のメモ書き。
• command -- -string とすると、command "-string" 扱い。
• cd c:\program` files と cd "c:\program files"
• オプション write-host -Object:test みたいな書き方も可能
• 名前つきパラメータの方が位置パラメータよりも優先
• パイプラインから入力された値のプロパティをパラメータにバインドできる?
• format-* 系 Cmdlet
○ format-table 画面の幅いっぱいを使用 幅を推測
○ format-list オブジェクト毎に詳細を それを逐次リストアップ
○ format-wide 固定幅で 改行なし
○ format-custom カスタムオブジェクトの構造をそのまま表示 デバッグ用で冗長
• out-* 系 out-default, out-null (cmd > $null)
• 文字列中の "string $(statements)" の statements の部分には for とかまで書ける
• $ExcutionContext.InvokeCommand.ExpandString('a is $a')
• invoke-expression Cmdlet
• ヒア文字列の @" の後と "@ の前には改行文字が必要
• ハッシュテーブルのインデクサにコレクション $hash[$key1, $key2]
• $user[ [string[]] ($user.keys | sort)]
• 型名エイリアス
○ single, regex, array, xml, scriptblock, switch, hashtable, psobject, type
• $OFS output field separator
• 型変換の仕組み
○ PowerShell 組み込み変換 (p. 93 の表)
○ PSTypeConverter 等のカスタム変換 (types.ps1.xml 内の <TypeConverter>
タグ)
§ ↑コンストラクタ呼び出しや、explict/implicit キャストもあれば呼ぶみたい
• 演算子 左手の法則、左オペランドにあわせて型変換される
• ハッシュテーブルにも + での連結
○ ただし、キーが被ると駄目
• 配列にも *、反復連結
• - / % は数値に限り変換、左手の法則当てはまらず。どちらか一方が数値ならもう一方も数値に
• PowerShell自体によって定義された演算と、op_Division とかのメソッドで定義された演算あり
○ PowerShell 自体が定義を持ってない場合は、↑のメソッドを探す
• 多重代入 $a, $b = 1, 2 みたいなのは多重代入というらしい
○ $c, $p = ($c + $p), $c みたいな代入が可能
○ 型指定 $a, [int]$b, [int]$c = 'a', 1, 2 みたいな
• 代入文、$a = ($b = 3) + 1 とか可能
• -contains, -notcontains
• $a -replace $b, $c が置換 $a -replace $b は削除
• $matches
○ $ -matches (?<aaa>pattern) とかやると、$matches.aaa
Since: .