Function Provider

提供程序名称

Function

驱动器

Function:

简短说明

提供对 Windows PowerShell 中所定义函数的访问。

详细说明

使用 Windows PowerShell Function 提供程序,您可以获取、添加、更改、清除和删除 Windows PowerShell 中的函数和筛选器。

函数是用于执行某操作的命名代码块。在键入函数名称后,将会运行该函数中的代码。筛选器是用于确定操作条件的命名代码块。可以键入筛选器的名称来代替条件,例如在 Where-Object 命令中。

在 Function: 驱动器中,函数以标签“Function”开头,而筛选器以标签“Filter”开头;不过,无论其标签如何,只要在正确的上下文中使用,两者都可以正常运行。

Function 提供程序是一个仅包含函数和筛选器对象的平面命名空间。函数和筛选器都没有子项。

每个函数都是 System.Management.Automation.FunctionInfo 类的实例。每个筛选器都是 System.Management.Automation.FilterInfo 类的实例。

本节中的示例显示了如何管理函数,而这些方法也可以用于筛选器。

Function 提供程序在 Function: 驱动器中公开其数据存储。若要使用函数,可以将您的位置更改为 Function: 驱动器(“set-location function:”)。或者,您可以从其他 Windows PowerShell 驱动器中使用函数。若要从其他位置引用函数,请在路径中使用驱动器名称 (Function:)。

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。例如,键入“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

在删除所有函数后,命令提示符将会更改,这是由于删除了用于定义命令提示符内容的 prompt 函数。

显示函数的属性和方法

-------------------------- 示例 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 动态参数。只有在将 Options 参数与 Alias 或 Function 提供程序一起使用时,该参数才在 Set-Item 中可用。

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”,其效果相当于为与 prompt 函数相关联的脚本块创建了一个新名称。如果计划更改原始 prompt 函数,您可以使用此命令来保存该函数。

新函数的 Options 属性的值为 None。若要更改 Options 属性的值,请使用 Set-Item。

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

动态参数

动态参数是由 Windows PowerShell 提供程序添加的 cmdlet 参数,且只可用于在启用了提供程序的驱动器中使用 cmdlet 的情况。

Options <System.Management.Automation.ScopedItemOptions>

确定函数的 Options 属性的值。

Value Description

None

无选项。“None”为默认值。

Constant

无法删除函数,也无法更改其属性。Constant 仅在您创建函数时才可用。不能将现有函数的选项更改为 Constant。

Private

函数仅在当前作用域(不包含子作用域)中可见。

ReadOnly

除非使用 Force 参数,否则无法更改函数的属性。可以使用 Remove-Item 删除函数。

AllScope

函数将复制到创建的所有新作用域中。

支持 Cmdlet

另请参阅

概念

about_Functions
about_providers