Windows PowerShell の基本メモ

日記「Windows PowerShell が便利な件 - oknknicの日記」で軽く触れて依頼のPowerShell
日記「Windows Server 2012 ムービ見たのでメモ - oknknicの日記」で記載の通り、Windows Server 2012 では、2008R2と比較して10倍以上のコマンドレットが提供されるということで、興味が再燃。

ということで、まずはWindows Server 2008R2 の PowerShell V2 について、基本的な部分を重点的に学んだのでメモ。

起動

CMDで、

概要のイメージ(適当なので参考まで)

基本

構成は、

  • コマンドレット:組み込みコマンド。「動詞-名詞」形式。コマンドなので、引数指定に括弧不要。
  • エイリアス:コマンドレットに定義する別名。
  • PowerShellプロバイダ:階層構造をもつデータ(ファイルシステムレジストリなど)にアクセスするための機能?
  • オブジェクト:コマンドレット呼び出し結果として返されるもの。所謂オブジェクト指向の。
  • クラスライブラリ:.NET Frameworkが提供するクラスライブラリ。ネームスペースで分類されている。実体はDLLで、たとえば System.Data の実体は System.Data.dll ファイル。
  • アセンブリ.NET Frameworkにおける、DLLやEXEファイルのこと。PowerShell環境にロードすることで利用可能になる。
  • モジュール(?)

連携は、

  • コマンドレット間は、パイプ(|)を使って連携、あるいはオプションにコマンド実行結果オブジェクトを指定して連携。
  • コマンドレット呼び出しを括弧で囲う(or 変数に代入する)ことで、戻り値オブジェクトを扱える(例:(Get-Date).getType())。

書き方のポイントは、

  • 静的メンバ呼び出し:「[クラス名]::静的メンバ」(例:[System.Console]::Beep() )
  • 改行のエスケープ?:`
  • 文字列をコマンドレットとして実行:& を先頭に付与
  • 配列定義:@(要素1,要素2,...)
  • 連想配列定義:@(キーワード1=要素1;キーワード2=要素2;...)
  • データ型指定変数:[データ型]$変数名 (例:[System.Int32]$val)
  • スコープ指定変数:$スコープ:変数名 (例:$local:val)
    • local:スクリプトブロック内なら、子ブロック内からもアクセス可能
    • global:どのスクリプトブロックからでもアクセス可能(プロンプトで定義する場合のデフォルト)
    • private:スクリプトブロック内のみ(子ブロックからはアクセス不可)
    • script:スクリプトファイル内ならどこからでもアクセス可能
  • 文字列演算:
  • 比較演算:
    • -eq
    • -ne
    • -gt
    • -ge
    • -lt
    • -le
  • 論理演算子
    • -and
    • -or
    • -xor
    • -not あるいは !
  • 制御構文
    • ForEach(変数 in コレクション){}
    • For(変数=初期値;条件;カウントアップ){}
    • While(条件){}
    • Do{}While(条件)
    • Do{}Until(条件)
    • If(条件){}ElseIf(条件){}Else{}
    • Switch  割愛
  • 関数
  • アセンブリのロード:[Reflection.Assembly]::LoadWithPartialName("ネームスペース(例:System.Windows.Forms)")
  • モジュールのインポート:Import-Module
  • ロケーションの指定:「Set-Location PSドライブ名:」(例:Set-Location env: )
情報取得
  • コードアシスト:TABキー
  • コマンドレット一覧表示:Get-Command
  • コマンドレット一覧と各ヘルプトピック表示:Get-Help *
  • 指定コマンドレットのヘルプ表示:help あるいは Get-Help ※詳細表示オプションは -Detailed
  • エイリアス一覧表示:Get-Alias
  • 利用可能なモジュール一覧表示:Get-Module -ListAvailable
  • PowerShellプロバイダの一覧表示:Get-PSProvider
  • PowerShellプロバイダのルート表示:Get-PSDrive
  • 自動変数一覧表示:Get-Variable
  • 指定オブジェクトのメンバー一覧表示:Get-Member
  • 指定オブジェクトのメンバを整形して表示:Format-List
  • オブジェクトのタイプ表示:getType()
  • ロード済みアセンブリ一覧表示:[System.AppDomain]::CurrentDomain.GetAssemblies()
  • 実行ポリシーの表示:Get-ExecutionPolicy

コマンド例

Getで始まるコマンドレットの情報を一覧表示
  • 方法①:ゴリゴリ書く
foreach($hoge in (Get-Command)){
  if($hoge.commandType -eq "Cmdlet" -and $hoge.name -like "Get*"){
    Write-Output $hoge
  }
}
  • 方法②:Where-Objectコマンドレットで絞る
Get-Command | Where-Object {$_.commandType -eq "Cmdlet" -and $_.name -like "Get*"}
単純なループ
for($i = 0; $i -lt 100; $i++){
  echo ($i)
}

サイトメモ

(2012/07/15追記)
MS > スクリプト センター > ラーニング > Windows PowerShell でのスクリプティング

参考文献