Windows PowerShell の基本メモ
日記「Windows PowerShell が便利な件 - oknknicの日記」で軽く触れて依頼のPowerShell。
日記「Windows Server 2012 ムービ見たのでメモ - oknknicの日記」で記載の通り、Windows Server 2012 では、2008R2と比較して10倍以上のコマンドレットが提供されるということで、興味が再燃。
ということで、まずはWindows Server 2008R2 の PowerShell V2 について、基本的な部分を重点的に学んだのでメモ。
起動
CMDで、
- powershell
- powershell .command "&{コマンド}"
- powershell -file ps1ファイルのパス
- powershell -ImportSystemModules ※利用可能な全モジュールをインポートの上で起動
- powershell_ise ※PowerShell ISEの起動
概要のイメージ(適当なので参考まで)
基本
構成は、
- コマンドレット:組み込みコマンド。「動詞-名詞」形式。コマンドなので、引数指定に括弧不要。
- エイリアス:コマンドレットに定義する別名。
- 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)
- 文字列演算:
- 比較演算:
- -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 でのスクリプティング
参考文献
WINDOWS POWERSHELL 実践システム管理ガイド (マイクロソフト公式解説書―マイクロソフトITプロフェッショナルシリーズ)
- 作者: 目時秀典,横田秀之
- 出版社/メーカー: 日経BP社
- 発売日: 2009/09/03
- メディア: 単行本
- 購入: 2人 クリック: 37回
- この商品を含むブログ (6件) を見る