SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows PowerShell 入門

Windows PowerShell 入門(7)-関数編2

変数と関数のスコープ、プロファイルの登録、パイプライン処理

  • このエントリーをはてなブックマークに追加

この連載では、Microsoftが提供している新しいシェル、Windows Power Shellの使い方を解説します。前回に引き続きPowerShellにおける関数の取り扱いとして、変数と関数のスコープ、プロファイルの登録、パイプライン処理などについて取り上げます。

  • このエントリーをはてなブックマークに追加

はじめに

 この連載では、Microsoftが提供している新しいシェル「Windows Power Shell」の使い方を解説します。今回は、関数をファイルに作成する方法、関数のプロファイルへの登録方法、パイプライン引数、begin/process/endについて説明します。

これまでの記事

対象読者

  • Windows PowerShellでコマンドレット操作ができる方
  • 何らかのプログラミング経験があればなお良い

必要環境

  • Windows PowerShell

関数をファイルに作成する

 PowerShellの関数をファイルに作成するには、テキストエディタがあれば十分です。

 まずは、テキストエディタを開いて下記のように入力し、「MyFunction.ps1」として保存してください(説明の都合上、「C:\Work」に保存するものとします)。

MyFunction.ps1
function funcA
{
    Write-Host "funcAです"
}

 では、この「MyFunction.ps1」にあるfuncAを実行するにはどうしたらよいでしょうか?

 1つの方法としては、この「MyFunction.ps1」に下記のように1行追加すると関数funcAを呼び出すことになります。

MyFunction.ps1に1行追加
function funcA
{
    Write-Host "funcAです"
}

funcA    #この行を追加することでfuncAを呼び出す

 この「MyFunction.ps1」は function funcA { ~ } までが関数の定義で、ファイルにこの部分が書かれているだけでは実行されません。関数を実行するには、最後に追加した行のように、関数を呼び出す必要があります。

 「MyFunction.ps1」はfuncAを呼び出すように1行追加したので、下記のようにすれば、funcAが実行されることとなります(PowerShell入門(3) スクリプト編の「スクリプトファイルの実行とセキュリティ」を参照ください)。

関数を実行する
PS C:\Work> ./MyFunction.ps1
funcAです

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

 「C:\Work」の下に「MyFunction.ps1」がある状態で、関数名を記述して[Enter]を押すと、

関数を実行する
PS C:\Work> funcA
用語 'funcA' は、コマンドレット、関数、操作可能なプログラム、またはスクリプト ファイルと
して認識されません。用語を確認し、再試行してください。
発生場所 行:1 文字:5
+ funcA <<<<

 のようにエラーが表示され実行することができません。関数名を記述するだけではだめなようです。

 では、いったいどのようにすればよいでしょうか?

 実は、コマンドラインから直接関数を呼び出すには、関数名の先頭にglobal修飾子が必要です。「MyFunction.ps1」を下記のように修正してください。

global修飾子をつけたfuncA
function global:funcA
{
    Write-Host "funcAです"
}

 そして関数を使用するために、下記のようにしてPowerShellに関数を登録します。

PS C:\Work> ./MyFunction.ps1
PS C:\Work>

 これで準備はOKです。後は下記のように、コマンドラインで関数名を記述すれば実行されます。

PS C:\Work> funcA
funcAです

 このようにして登録を行った関数はGet-ChildItemコマンドレットで確認することができます。

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を終了すると無効になってしまいます。ということで、次はこの問題を解決する方法について説明したいと思います。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
関数をプロファイルに登録する

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Windows PowerShell 入門連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2623 2008/07/03 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング