
の通り、Windows 7 からは標準で PowerShell なるツールが入っている。
Windows 2008 あたりも標準なようで、Windows 2003 はオプションで提供。
と、コマンドライン/DOSプロンプトよりも上位(?)なコマンドベースのツールとして用意されているらしい。
っと、最近、ちょっと使う機会があったので、その際のメモなどを時々書いていきたいと。
ただ、使いながらなので、書くことはバラバラです。^-^;
(1) スクリプト名
拡張子は ps1 らしい。
PowerShell version 1 ということでしょうか。
スクリプト利用をするので、重要です。
(2) コマンドの返り値
PowerShell スクリプト自体の返り値は exit <number> を使う。
ただ、DOSプロンプトなどから PowerShell スクリプトを実行する場合、
> powershell -command script.ps1
という感じで、呼び出しますが、コマンドの返り値は 0 か 1 らしい。
0 ... 正常終了
1 ... 異常終了
そのため、いくら exit 2, exit 100 とかスクリプト内で実行しても意味が無いと。
で、DOSプロンプトから呼び出し時に返り値を取得するには
> powershell -command "script.ps1; exit $LASTEXITCODE"
という形で呼び出すようにするらしい。
そうすると、%ERRORLEVEL% に出力されると。
3) 変数は $なんとか、でオブジェクト
スクリプト内で変数を利用する場合、$hoge のように $ をつける。
一部の変数は予約済み、$args , $error, $null などがある。
このあたりの変数は読み込み専用となっていて、書き込みできない。
変数はオブジェクト扱い。 スクリプト内でそのまま $hoge のように
変数名を実行すると echo $hoge と同じ扱い。
下記のような string の場合、各文字は [<number>]で取れる。
PS C:Users> $string="hoge"
PS C:Users> $string
hoge
PS C:Users> $string[0]
h
PS C:Users> $string[1]
o
PS C:Users> $string[2]
g
PS C:Users> $string[3]
e
ただし、この部分は書き換えはできないみたい。(方法があるのかもしれないけど)
書き換える場合、変数ごとの書き換えが必要(というか、簡単。)
PS C:\Users> $string[3]="t"
型 System.String のオブジェクトにインデックスを付けることはできません。
発生場所 行:1 文字:9
+ $string[ <<<< 3]="t"
+ CategoryInfo : InvalidOperation: (3:Int32) []、RuntimeException
+ FullyQualifiedErrorId : CannotIndex
PS C:\Users> $string="12345"
オブジェクトなので、下記のようなことも可能。
PS C:Users> $string.length
4
$args は コマンド引数, $error は実行時のエラーがリストになっているのだが、扱い方法は基本的に同じ。
っと、今回はこの辺で。
※コメント投稿者のブログIDはブログ作成者のみに通知されます