[FAQ CENTER トップ]
[Powershell FAQ トップへ]



【Powershell】Powershell プログラムをいきなり始める人にまず読んで欲しいこと



更新日:2019/08/03


Powershellプログラミングを始めるベテランプログラマの方へ


Powershell でコーディングを始める方にまず読んで欲しいことを紹介します。他の言語とことなり特徴や癖がある部分を紹介しています。


比較演算子



比較演算子は以下を使用します。一般的な == や != は使用できません。

-eq:等しい、=
-lt:より小さい、<
-le:以上、<=
-gt:より大きい、>
-ge:以上、、>=

など

正しい例:

$i = 1
if ($i -eq 1)
{
write-host "?¬?÷"
}



誤った例:

$i = 1

if ($i == 1)
{
write-host "?¬?÷"
}



以下のエラーが発生します。

= : 用語 '=' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 C:\temp\test.ps1:3 文字:9
+ if ($i == 1)
+ ~
+ CategoryInfo : ObjectNotFound: (=:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException




関数の呼び出し方法



関数の引数間はカンマは不要です。スペースで区切ります。

正しい例:

#呼ぶ前に定義する
Function myfunc ($a,$b)
{
return $a + $b
}

#引数はスペースで区切る
myfunc 1 2



誤った例:

#呼ぶ前に定義する
Function myfunc ($a,$b)
{
write-host "a"
return $a + $b
}

#引数がスペースで区切られていない
myfunc 1,2




変数名は$から始まる



正しい例:

$i=1



誤った例:

i=1
i=1 : 用語 'i=1' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。
名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください

発生場所 行:1 文字:1
+ i=1
+ ~~~
+ CategoryInfo : ObjectNotFound: (i=1:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException



関数の定義場所


関数のプロトタイプ宣言は不要ですが、関数を使用する前に定義する必要があります。

正しい例:

#呼ぶ前に定義する
Function myfunc ($a,$b)
{
return $a + $b
}


#引数はスペースで区切る
myfunc 1 2




誤った例:
関数を呼ぶ前に関数を定義していないためエラーとなっています。

#関数はスペースで区切る
myfunc3 1 2

#呼ぶ後に定義しているためエラーとなる
Function myfunc3 ($a,$b)
{
return $a + $b
}



以下のエラーが発生します。

myfunc3 : 用語 'myfunc3' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 C:\temp3\test.ps1:2 文字:1
+ myfunc3 1 2
+ ~~~~~~~
+ CategoryInfo : ObjectNotFound: (myfunc3:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException




文字列内での展開




$love = "love"

#ダブルクォート内は変数が展開される
write-host "i ${love} powershell"


#変数は展開されない
write-host 'i ${love} powershell'




実行結果は以下の通りです。


i love powershell
i ${love} powershell



戻り値はオブジェクトの配列で戻されると便利
Powershell の大きなメリットは戻り値を配列やオブジェクトの組み合わせで処理できる点です。一般的なシェルではパイプでテキストを受け取り場合が多く処理が困難です。

例えば Windows サービス一覧を取得する Get-serviceは戻り値を配列で受け取るためループしての処理が容易です。

以下の例ではサービス一覧を変数 $ServiceListで System.Array として受け取っています。そしてここの配列に対してForEachで処理しています。ここのサービスはオブジェクトとして値を保持しているため、Status や Name プロパティで値を取り出しています。


$ServiceList = (get-service)
($ServiceList.Gettype())


$ServiceList | ForEach {
write-host $_.Status $_.Name
}



戻り値の表示形式


Powershell の戻り値は様々ですが、配列やオブジェクトで戻されるケースが多くなります。よって標準出力に表示する場合はテキストと異なり表現方法がそのままではないので注意してください。
また大量に表示される場合は一部が省略して表示されます。

参考:Powershell で省略しないで表示する


パイプ処理


式の戻り値をパイプで接続して処理を継続することが可能ですが、パイプは配列を扱うことが可能です。
以下の例では配列を次々とパイプで渡して処理を行っています。



@(1,2,3,4,5) | foreach { write-output ($_ + 5)} |foreach { write-output ($_ * 2)}



参考:Powershell と コマンドプロンプトの違いを比較表で説明








[Powershell FAQ トップへ]
[FAQ CENTER トップ]


本サイト内掲載されている情報は、著作権法により保護されています。いかなる場合でも権利者の許可なくコピー、配布することはできません。 このページはリンクフリーです。(このページへの直接リンクも可能です。) Copyright(c) tooljp.com 2007-2018