Tuesday, May 27, 2008

今回は、関数をファイル(*.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を以下のようにしてください。

function funcA
{
    Write-Host "funcAです"
}

では、この関数をコマンドラインから、コマンドレットであるかのように関数名を指定するだけで呼び出すにはどうしたら良いでしょうか?

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を終了すると無効になってしまいます。

次回はこの問題を解決する方法について説明したいと思います。

Tuesday, May 27, 2008 10:57:59 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: