更新日:2019/08/03
$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