Function Provider
プロバイダー名
Function
ドライブ
Function:
簡易説明
Windows PowerShell で定義されている関数へのアクセスを提供します。
詳細説明
Windows PowerShell 関数プロバイダーを使用すると、Windows PowerShell で関数やフィルターを取得、追加、変更、クリア、および削除できます。
関数は名前の付いたコード ブロックであり、何らかのアクションを実行します。関数名を入力すると、その関数のコードが実行されます。フィルターは名前の付いたコード ブロックであり、アクションの条件を設定します。フィルター名は、Where-Object コマンドなどの条件の代わりとして使用することができます。
Function: ドライブでは、関数は "Function" というラベルで始まり、フィルターは "Filter" というラベルで始まりますが、適切なコンテキストで使用されれば、ラベルに関係なく適切に動作します。
関数プロバイダーは、関数オブジェクトとフィルター オブジェクトのみで構成されるフラットな名前空間です。関数にもフィルターにも子の項目がありません
各関数は System.Management.Automation.FunctionInfo クラスのインスタンスです。各フィルターは System.Management.Automation.FilterInfo クラスのインスタンスです。
このセクションでは関数の管理方法の例を示しますが、フィルターにも同じ管理方法が適用できます。
関数プロバイダーは、Function: ドライブにデータ ストアを公開します。関数を操作するには、場所を Function: ドライブに変更します ("set-location function:")。または、別の Windows PowerShell ドライブからも操作できます。別の場所から関数を参照するには、パスでドライブ名 (Function:) を指定します。
Function プロバイダーは、Invoke-Item を除き、名前に Item という名詞が含まれるすべてのコマンドレットをサポートします。また、Get-Content および Set-Content コマンドレットもサポートします。ただし、ItemProperty という名詞を含むコマンドレット (ItemProperty コマンドレット)、およびあらゆるコマンドレットの Filter パラメーターはサポートされません。
関数に対するすべての変更は、現在のコンソールにのみ影響します。変更を保存するには、関数を Windows PowerShell プロファイルに追加するか、Export-Console を使用して現在のコンソールを保存します。
例
Function: ドライブに移動する
-------------------------- 例 1 --------------------------
現在の場所を Function: ドライブに変更します。このコマンドは、Windows PowerShell の任意のドライブから使用できます。ファイル システム ドライブに戻るには、そのドライブ名を入力します。たとえば、「set-location c:」と入力します。
set-location function:
関数を取得する
-------------------------- 例 1 --------------------------
このコマンドは、現在のセッションの全関数の一覧を取得します。このコマンドは、Windows PowerShell の任意のドライブから使用できます。
get-childitem -path function:
-------------------------- 例 2 --------------------------
このコマンドは、Function: ドライブから "man" 関数を取得します。また、Get-Item コマンドレットを使用して関数を取得します。結果はパイプライン演算子 (|) によって Format-Table に渡されます。
Wrap パラメーターを指定しているため、行に収まらないテキストは次の行に表示されます。Autosize パラメーターを指定しているため、テキストが収まるように表の列のサイズが調整されます。
get-item -path man | format-table -wrap -autosize
別のドライブから使用する場合は、ドライブ名 (Function:) をパスに追加します。
-------------------------- 例 3 --------------------------
これらのコマンドはどちらも "c:" という関数を取得します。最初のコマンドは任意のドライブで使用できます。2 番目のコマンドは Function: ドライブで使用します。
ドライブの構文上、ドライブ名の最後にコロンがあるため、パスはドライブ名で修飾する必要があります。Function: ドライブ内で使用する場合はどちらの形式も可能です。2 番目のコマンドのピリオド (.) は、現在の場所を表しています。
c:\PS> get-item -path function:c:
PS Function> get-item -path .\c:
関数を作成する
-------------------------- 例 1 --------------------------
次のコマンドは、New-Item コマンドレットを使用して "HKLM:" という関数を作成します。かっこ内の式は、"HKLM:" という関数名で表されるスクリプト ブロックです。
new-item -path function:hklm: -value {set-location hklm:}
Windows PowerShell コマンド ラインに入力して関数を作成することもできます。たとえば、「function:hklm: {set-location hklm:}」と入力します。Function: ドライブから入力する場合は、ドライブ名を省略できます。 New-Item では "Filter" ラベルを指定できないため、フィルターには関数としてラベルが付けられますが、どのラベルが付けられても適切に動作します。"Filter" ラベルを使用してフィルターを作成するには、コマンド ラインでフィルターを入力します。たとえば、「filter:Running {$_.Status -eq "Running"}」と入力します。
-------------------------- 例 2 --------------------------
次のコマンドは、New-Item コマンドレットを使用して Csrss という関数を作成します。Options 動的パラメーターを使用して、関数の Options プロパティの値に ReadOnly を指定しています。
new-item -path function: -name csrss -options readonly -value {get-process csrss}
このコマンドは任意の場所から使用できます。Function: ドライブから使用する場合は、ドット (.) を指定してパスを指定できます。ドット (.) は、現在の場所を表します。
関数を削除する
-------------------------- 例 1 --------------------------
このコマンドは、"hklm:" 関数を現在のセッションから削除します。
remove-item function:hklm:
-------------------------- 例 2 --------------------------
次のコマンドは、Options プロパティの値が Constant である関数を除くすべての関数を現在のセッションから削除します。Force パラメーターが指定されていない場合、Options プロパティの値が ReadOnly である関数は削除されません。
remove-item function:* -force
すべての関数を削除すると、コマンド プロンプトが変わります。これは、コマンド プロンプトの内容を定義する prompt 関数が削除されるためです。
関数のプロパティとメソッドを表示する
-------------------------- 例 1 --------------------------
このコマンドは、Get-Item コマンドレットを使用してすべての関数を取得します。結果がパイプライン演算子によって Get-Member コマンドレットに渡され、オブジェクトのメソッドとプロパティが表示されます。
get-item -path function:* | get-member
パイプを使用してオブジェクトのコレクション (Function: ドライブの関数のコレクションなど) を Get-Member に渡すと、Get-Member はコレクション内の各オブジェクトを個別に評価し、検出した各オブジェクトの型に関する情報を返します。すべてのオブジェクトが同じ型である場合は、その型に関する情報を返します。この例では、関数はすべて FunctionInfo オブジェクトです。 FunctionInfo オブジェクトのコレクションに関する情報を取得するには、Get-Member の InputObject パラメーターを使用します。たとえば、「get-member -InputObject (get-item function:*)」と入力します。InputObject パラメーターが使用された場合、Get-Member はコレクション内のオブジェクトではなく、コレクションを評価します。
-------------------------- 例 2 --------------------------
このコマンドは、"prompt" 関数のプロパティの値を一覧表示します。Get-Item コマンドレットを使用して、"prompt" 関数を表すオブジェクトを取得します。その結果は、パイプライン演算子 (|) によって Format-List コマンドに渡されます。Format-List コマンドは、ワイルドカード文字 (*) が指定された Property パラメーターを使用して、"prompt" 関数のすべてのプロパティの値を書式設定し、表示します。
get-item function:prompt | format-list -property *
関数のプロパティを変更する
-------------------------- 例 1 --------------------------
Set-Item コマンドレットと Options 動的パラメーターを使用すると、関数の Options プロパティの値を変更できます。
このコマンドは、prompt 関数の AllScope オプションと ReadOnly オプションを設定します。このコマンドは、Set-Item コマンドレットの Options 動的パラメーターを使用します。Options パラメーターを Set-Item で使用できるのは、Alias プロバイダーまたは Function プロバイダーと共に使用した場合のみです。
set-item -path function:prompt -options "AllScope,ReadOnly"
-------------------------- 例 2 --------------------------
次のコマンドは、Set-Item コマンドレットを使用してパスの前に時刻を表示するように prompt 関数を変更します。
set-item -path function:prompt -value {'PS '+ $(Get-Date -format t) + " " + $(Get-Location) + '> '}
この変更は、FunctionInfo オブジェクトの Definition プロパティおよび ScriptBlock プロパティに影響します。変更した結果を確認するには、「get-item -path function:prompt | format-list -property *」と入力します。
-------------------------- 例 3 --------------------------
このコマンドは、Rename-Item コマンドレットを使用して、"help" 関数の名前を "gh" に変更します。
rename-item -path function:help -newname gh
関数をコピーする
-------------------------- 例 1 --------------------------
このコマンドは "prompt" 関数を "oldPrompt" にコピーします。これで、prompt 関数と関連付けられたスクリプト ブロックに新しい名前が作成されたことになります。prompt 関数を変更する予定がある場合は、この方法で元の prompt 関数を保存することができます。
新しい関数の Options プロパティの値は None です。Options プロパティの値を変更するには、Set-Item を使用します。
copy-item -path function:prompt -destination function:oldPrompt
動的パラメーター
動的パラメーターとは、Windows PowerShell プロバイダーによって追加されるコマンドレット パラメーターであり、プロバイダーに対応したドライブでコマンドレットが使用されている場合のみ利用できます。
Options <System.Management.Automation.ScopedItemOptions>
関数の Options プロパティの値を決定します。
Value | Description |
---|---|
None |
オプションはありません。既定値は "None" です。 |
Constant |
関数は削除できず、プロパティは変更できません。Constant を指定できるのは、関数を作成するときのみです。既存の関数のオプションを Constant に変更することはできません。 |
Private |
関数は、現在のスコープでのみ表示されます (子スコープでは表示されません)。 |
ReadOnly |
Force パラメーターを使用しない限り、関数のプロパティは変更できません。Remove-Item を使用すると、関数を削除できます。 |
AllScope |
関数は、新たに作成されるすべてのスコープにコピーされます。 |