about_Providers

简短说明

介绍 PowerShell 如何提供不能通过命令行轻松访问的数据和组件的访问权限。 数据以类似于文件系统驱动器的一致格式显示。

长说明

PowerShell 提供程序是 .NET 程序,提供对专用数据存储的访问权限,以便用户更轻松地查看和管理数据。 数据显示在驱动器中,可以像在硬盘驱动器上那样以路径的形式访问数据。 可以使用提供程序支持的任何内置 cmdlet 来管理提供程序驱动器中的数据。 此外,可以使用专为数据设计的自定义 cmdlet。

提供程序还可以将动态参数添加到内置 cmdlet。 仅当将 cmdlet 与提供程序数据一起使用时,这些参数才可用。

内置提供程序

PowerShell 包括一组内置提供程序,这些提供程序提供对不同类型的对象的访问权限。

  • Alias 提供程序
    • 驱动器 - Alias:
    • 对象类型 - System.Management.Automation.AliasInfo
  • Certificate 提供程序
    • 驱动器 - Cert:
    • 对象类型 - Microsoft.PowerShell.Commands.X509StoreLocationSystem.Security.Cryptography.X509Certificates.X509Certificate2
  • 环境提供程序
    • 驱动器 - Env:
    • 对象类型 - System.Collections.DictionaryEntry
  • FileSystem 提供程序
    • 驱动器 - C: 和其他取决于硬件
    • 对象类型 - System.IO.FileInfoSystem.IO.DirectoryInfo
  • 函数提供程序
    • 驱动器 - Function:
    • 对象类型 - System.Management.Automation.FunctionInfo
  • 注册表提供程序
    • 驱动器 - HKLM:HKCU:
    • 对象类型 - Microsoft.Win32.RegistryKey
  • 变量提供程序
    • 驱动器 - Variable:
    • 对象类型 - System.Management.Automation.PSVariable
  • WSMan 提供程序
    • 驱动器 - WSMan:
    • 对象类型 - Microsoft.WSMan.Management.WSManConfigContainerElement

既可以创建自己的 PowerShell 提供程序,也可以安装其他人开发的提供程序。 若要列出会话中可用的提供程序,请键入:

Get-PSProvider

注意

证书注册表WSMan 提供程序仅在 Windows 平台上可用。

安装和删除提供程序

提供程序通常通过 PowerShell 模块安装。 导入模块会将提供程序加载到会话中。 无法卸载内置提供程序。 可以卸载其他模块加载的提供程序。

可以使用 Remove-Module cmdlet 从当前会话中卸载提供程序。 此 cmdlet 不会卸载提供程序,但它使提供程序在会话中变为不可用。

还可以使用 Remove-PSDrive cmdlet 从当前会话中删除任何驱动器。 驱动器上的此数据不受影响,但该驱动器在该会话中不再可用。

查看提供程序

若要查看计算机上的 PowerShell 提供程序,请键入:

Get-PSProvider

输出列出了已添加到会话的内置提供程序和提供程序。

提供程序 cmdlet

以下 cmdlet 用于处理由任何提供程序公开的数据。 可以采用相同的方式使用相同的 cmdlet 来管理提供程序公开的不同类型的数据。 学会管理一个提供程序的数据之后,就可以使用相同程序来管理任何提供程序的数据。

例如,New-Item cmdlet 创建新项。 在 FileSystem 提供程序支持的 C: 驱动器中,可以使用 New-Item 创建新的文件或文件夹。 在“注册表”提供程序支持的驱动器中,可以使用 New-Item 创建新的注册表项。 在 Alias: 驱动器中,可以使用 New-Item 创建新的别名。

若要获取有关以下任何 cmdlet 的详细信息,请键入:

Get-Help <cmdlet-name> -Detailed

ChildItem cmdlets

内容 Cmdlets

项 Cmdlets

ItemProperty cmdlets

位置 cmdlet

路径 cmdlet

PSDrive cmdlets

PSProvider Cmdlets

查看提供程序数据

提供程序的主要好处是,它以熟悉且一致的方式公开其数据。 数据呈现的模型是文件系统驱动器。

提供程序允许查看、导航和更改数据存储中的项,就像它们是文件系统中的数据一样。 数据存储通过它支持的驱动器的名称进行访问。

驱动器在 Get-PSProvider cmdlet 的默认显示中列出,但你可以使用 Get-PSDrive cmdlet 获取有关提供程序驱动器的信息。 例如,若要获取 Function: drive 的所有属性,请键入:

Get-PSDrive Function | Format-List *

可以像在文件系统驱动器上一样查看和移动提供程序驱动器中的数据。

若要查看提供程序驱动器的内容,请使用 Get-ItemGet-ChildItem cmdlet。 键入驱动器名称后跟冒号 (:)。 例如,若要查看 Alias: 驱动器的内容,请键入:

Get-Item alias:

可以通过在路径中包含驱动器名称,从另一个驱动器查看和管理任何驱动器中的数据。 例如,若要从另一个驱动器查看 HKLM: 驱动器中的 HKLM\Software 注册表项,请键入:

Get-ChildItem HKLM:\SOFTWARE\

若要打开驱动器,请使用 Set-Location cmdlet。 指定驱动器路径时,请记住冒号。 例如,若要将位置更改为 Cert: 驱动器的根目录,请键入:

Set-Location cert:

然后,若要查看 Cert: 驱动器的内容,请键入:

Get-ChildItem

在分层数据中移动

可以像硬盘驱动器一样在提供程序驱动器中移动。 如果数据在项内的项层次结构中排列,请使用反斜杠 (\) 来指示子项。 使用以下格式:

drive:\location\child-location\...

例如,若要将位置更改为 HKLM\Software 注册表项,请键入 Set-Location 命令,例如:

Set-Location HKLM:\SOFTWARE\

如果完全限定名称中的任何元素包含空格,则必须将此名称用双引号 (") 括起来。 以下示例演示包含空格的完全限定路径。

"C:\Program Files\Internet Explorer\iexplore.exe"

还可以使用对位置的相对引用。 一个点 (.) 表示当前位置。 例如,如果位于 HKLM:\Software\Microsoft 注册表项中,并且想要列出 HKLM:\Software\Microsoft\PowerShell 键中的注册表子项,请键入以下命令:

Get-ChildItem .\PowerShell

此外,两个点 (..) 表示目录或容器直接位于当前位置上方。 可以使用双点 (..) 在提供程序层次结构中导航。

PS HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters\> cd ..\..\LanmanWorkstation\Parameters
PS HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters>

提供程序主页

提供程序还有一个“主页”位置。 此位置由提供程序支持的所有 PSDrives 共享。 可以通过查看提供程序的“主页”属性来检索它。

Get-PSProvider | Format-Table Name, Home
Name        Home
----        ----
Registry
Alias
Environment
FileSystem  C:\Users\username
Function
Variable
Certificate

FileSystem 提供程序是唯一一个具有“主页”默认值的提供程序。 与 $HOME 相同的值。 有关详细信息,请参阅 about_Automatic_Variables

可以使用提供程序的属性为提供程序设置“主页”目录。

(Get-PSProvider FileSystem).Home = "C:\"

~ 字符可用于表示提供程序的主目录。 如果提供程序没有设置“主页”位置,则会看到错误。

Cert:\> Set-Location ~
Set-Location : Home location for this provider isn't set. To set the home
location, call "(get-psprovider 'Certificate').Home = 'path'".
At line:1 char:1
+ Set-Location ~
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Set-Location],
                              PSInvalidOperationException
...

查找动态参数

动态参数是提供程序添加到 cmdlet 中的 cmdlet 参数。 仅当 cmdlet 与添加它们的提供程序一起使用时,这些参数才可用。

例如,Cert: 驱动器将“CodeSigningCert”参数添加到 Get-ItemGet-ChildItem cmdlet。 仅当在 Cert: 驱动器中使用 Get-ItemGet-ChildItem 时,才能使用此参数。

有关提供程序支持的动态参数的列表,请参阅提供程序的帮助文件。 类型:

Get-Help <provider-name>

例如:

Get-Help certificate

了解提供程序

尽管所有提供程序数据都显示在驱动器中,并且可以使用相同的方法在不同驱动器之间移动,但相似之处也仅限于此。 提供程序公开的数据存储根据 Active Directory 位置和 Microsoft Exchange Server 邮箱而异。

如需了解有关单个 PowerShell 提供程序的信息,请键入:

Get-Help <ProviderName>

例如:

Get-Help registry

有关提供程序的帮助主题列表,请键入:

Get-Help * -Category Provider

另请参阅