提供者名稱

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:)。

函數提供者支援名稱包含 Item 名詞的所有 Cmdlet (Item Cmdlet),但 Invoke-Item 除外。此外,它也支援 Get-ContentSet-Content Cmdlet。不過,它既不支援名稱包含 ItemProperty 名詞的 Cmdlet (ItemProperty Cmdlet),也不支援任何 Cmdlet 中的 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 Cmdlet 來取得此函數。管線運算子 (|) 會將結果傳送到 Format-Table。

Wrap 參數會將無法放入一行的文字導向到下一行。Autosize 參數會配合文字而調整資料表欄位大小。

get-item -path man | format-table -wrap -autosize

如果您位在不同的磁碟機,請將此磁碟機名稱 (Function:) 新增到路徑中。

-------------------------- 範例 3 --------------------------

這些命令都會取得名稱為 "c:" 的函數。第一個命令可以用於任何磁碟機。第二個命令可以用於 Function: 磁碟機。

因為磁碟機名稱是以冒號作為結尾,而這是磁碟機的語法,所以您必須使用磁碟機名稱限定路徑。在 Function: 磁碟機中,您可以使用任何一種格式。在第二個命令中,點 (.) 代表目前位置。

c:\PS> get-item -path function:c:

PS Function> get-item -path .\c:

建立函數

-------------------------- 範例 1 --------------------------

這個命令會使用 New-Item Cmdlet 來建立名為 "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 Cmdlet 來建立名為 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

當您刪除所有的函數時,命令提示字元就會變更,因為定義命令提示字元內容的提示函數已被刪除。

顯示函數的屬性和方法

-------------------------- 範例 1 --------------------------

這個命令會使用 Get-Item Cmdlet 來取得所有函數。管線運算子會將結果傳送至 Get-Member Cmdlet,再由後者顯示物件的方法和屬性。

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 Cmdlet 來取得代表 "prompt" 函數的物件。管線運算子 (|) 會將結果傳送至 Format-List 命令。Format-List 命令會使用 Property 參數搭配萬用字元 (*) 來格式化並顯示 "prompt" 函數的所有屬性值。

get-item function:prompt | format-list -property *

變更函數的屬性

-------------------------- 範例 1 --------------------------

您可以使用 Set-Item Cmdlet 搭配 Options 動態參數來變更函數的 Options 屬性值。

此命令為 "prompt" 函數設定 AllScope 和 ReadOnly 選項。這個命令會使用 Set-Item Cmdlet 的 Options 動態參數。只有當您搭配 Alias 或 Function 提供者使用 Set-Item 時,才可以在其中使用 Options 參數。

set-item -path function:prompt -options "AllScope,ReadOnly"

-------------------------- 範例 2 --------------------------

此命令使用 Set-Item Cmdlet 將 "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 Cmdlet,將 "help" 函數的名稱變更成 "gh"。

rename-item -path function:help -newname gh

複製函數

-------------------------- 範例 1 --------------------------

這個命令會將 "prompt" 函數複製到 "oldPrompt",有效地為與此提示函數相關聯的指令碼區塊建立新名稱。若您計劃變更函數,可以使用這個命令儲存原始的提示函數。

新函數的 Options 屬性值為 None。若要變更 Options 屬性值,請使用 Set-Item。

copy-item -path function:prompt -destination function:oldPrompt

動態參數

動態參數是 Cmdlet 參數,由 Windows PowerShell 提供者所新增,只有在已啟用提供者之磁碟機上的 Cmdlet 方可使用。

Options <System.Management.Automation.ScopedItemOptions>

決定函數的 Options 屬性值。

Value Description

None

沒有選項預設值為 "None"。

Constant

您無法刪除函數,而且無法變更函數的屬性。只有建立函數時才能使用 Constant。您無法將現有函數的選項變更為 Constant。

Private

函數只會顯示於目前範圍 (不會顯示於子範圍)。

ReadOnly

您無法變更函數的屬性,除非使用 Force 參數。您可以使用 Remove-Item 來刪除函數。

AllScope

將函數複製到所有新建立的範圍。

所支援的 Cmdlet

請參閱




目錄