SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

Windows PowerShell 入門

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

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

関数をプロファイルに登録する

 PowerShellコンソール上で直接入力して作成した関数は、PowerShellコンソールを閉じてしまうと利用できなくなります。この問題は、関数をプロファイルに登録することで解決することができます。

 まずは、プロファイルについて説明します。プロファイルはPowerShell起動時に1度だけ読み込まれる特別なスクリプトファイルです。このファイルは、あらかじめパスが決まっており、$Profileという自動変数に格納されています。

 試しにコマンドラインで$Profileを確認してみましょう(表示されるパスはお使いの環境によって異なります)。

プロファイルパスの確認
PS > $Profile
C:\Users\HIRO\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

 コマンドラインで下記のように入力し、メモ帳でプロファイルを開いてみましょう。

メモ帳を開く
PS > Notepad $Profile

 後は、下記のように入力して、先ほど確認したパス(ここでは「C:\Users\HIRO\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1」)に保存します。

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

 保存が終わったら、PowerShellを再起動し、funcAを実行してみましょう。

PS > funcA
funcAです

 このように、プロファイルに関数を記述すると、毎回PowerShellに関数を手動で登録する必要がなくなります(スクリプトの実行にはセキュリティ設定が必要ですので、動作しない場合は「関連記事 Windows PowerShell 入門(3)-スクリプト編」を参考に設定してください)。

 しかし、多数の関数を「Microsoft.PowerShell_profile.ps1」に記述するのはメンテナンスが大変です。

 これを解決する方法としてよこけんさんのサイトの「プロファイル活用」でスマートな方法が紹介されています(よこけんさんの承諾を得て掲載しております。よこけんさん、ありがとうございます)。実は、筆者自身もこの方法を採用していて、関数の管理が容易になります。

 ただし、1点だけ注意してもらいたいことがあります。それは、プロファイルに記述する関数はスコープを指定しなくても問題ありませんが、ファイルに記述する関数はglobalスコープが必要であるということです。

 先ほどのfuncAを「MyFunction.ps1」というファイルにグローバルスコープを付けて保存する場合は、

MyFuntion.ps1
function global:funcA
{
    Write-Host "funcAです"
}

 とします。

パイプライン引数

 PowerShellでの関数は、パイプラインからの値を受け取ることが可能です。パイプラインからの渡された値は$inputという自動変数に格納されます。

 まずは、コンソールで下記の通り入力し、pipe-func1という関数をPowerShellに登録しましょう。

pipe-func1
PS > function pipe-func1
>> {
>>     foreach ($a in $input)
>>     {
>>         Write-Host $a
>>     }
>> }
>>

 この関数は、パイプラインで受け取った値をforeachで1つずつ取り出し表示するという単純な関数です。

 次のようにして、この関数を実験してみてください。

PS > 1..10 | pipe-func1
1
2
3
4
5
6
7
8
9
10

 1..10というのは、1から10までを表します(Windows PowerShell 入門(4)-変数と演算子の範囲演算子を参照ください)。結果としてこの関数は、$inputに1から10までの数値を受け取り、その値を表示します。

 もう1つ実験してみましょう。

PS > "apple","banana","orange" | pipe-func1
apple
banana
orange

 こちらは"apple","banana","orange"という3つの値が$inputに渡され、結果その値を表示します。

次のページ
begin, process, end

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

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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー