今回は、関数をファイル(*.ps1)に作成し、実行する方法について説明したいと思います。
これまでに、PowerShellに関するいろいろなサイトをみてきましたが、この件に関して詳しく解説しているところを見つけられていません。
参考になるサイトを知っている方、是非情報をお寄せください。
まずは、テキストエディタを開いて下記のように入力し、MyFunction.ps1 として保存してください。(説明の都合上C:\Workに保存するものとします。)
function funcA { Write-Host "funcAです" }
では、この MyFunction.ps1 にある funcA を実行するにはどうしたらよいのか?
1つの方法としては、このMyFunction.ps1に下記のように1行追加すると関数funcAを呼び出すことになります。
function funcA { Write-Host "funcAです" } funcA #この行を追加することでfuncAを呼び出す
よって、下記のようMyFunction.ps1を実行すれば、funcAが実行されることとなります。
PS C:\Work> ./MyFunction.ps1 funcAです
関数をコマンドラインから実行する
関数をコマンドラインから呼び出す実験をするために、MyFunction.ps1を以下のようにしてください。
では、この関数をコマンドラインから、コマンドレットであるかのように関数名を指定するだけで呼び出すにはどうしたら良いでしょうか?
PS C:\Work> funcA 用語 'funcA' は、コマンドレット、関数、操作可能なプログラム、またはスクリプト ファイルと して認識されません。用語を確認し、再試行してください。 発生場所 行:1 文字:5 + funcA <<<<
関数名を記述するだけではだめなようです。
では、MyFunction.ps1にあるfuncAなので下記のようにしたらどうなるか?
PS C:\Work> ./MyFunction.ps1 funcA PS C:\Work>
これは、エラーにもならなければ実行もされません。
実は、コマンドラインから呼び出すためには関数名の先頭にglobal修飾子が必要です。MyFunction.ps1を下記のように修正してください。
function global:funcA { Write-Host "funcAです" }
そして、関数を使用するために下記のようにしてPowerShellに関数を登録します。
PS C:\Work> ./MyFunction.ps1 PS C:\Work>
これで準備はOKです。あとはコマンドラインで関数名を記述すれば、実行されます。
PS C:\Work> funcA funcAです
Get-ChildItemコマンドレットを使用することで、関数がPowerShellに登録されているかを確認することができます。
PS C:\Work> Get-ChildItem function: CommandType Name Definition ----------- ---- ---------- Function prompt 'PS ' + $(Get-Location) + $(if ($... Function Clear-Host $spaceType = [System.Management.A... : :長いので省略 : Function funcA Write-Host "funcAです"...
実は、今回の方法で登録した関数はPowerShellを終了すると無効になってしまいます。
次回はこの問題を解決する方法について説明したいと思います。
Theme design by Jelle Druyts
Pick a theme: BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2 BlogXP business calmBlue Candid Blue dasBlog dasblogger DirectionalRedux Discreet Blog Blue Elegante essence Just Html MadsSimple Mobile Mono Movable Radio Blue Movable Radio Heat nautica022 orangeCream Portal Project84 Project84Grass Slate Sound Waves Tricoleur useit.com Voidclass2
Powered by: newtelligence dasBlog 2.0.7226.0
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2009, HIRO
E-mail