powershell 中的 psprovider 是什么?

powershell 中的 psprovider 是什么?

我是 PowerShell 新手,正在尝试理解 psprovider 的概念。我知道我可以Get-PSProvider使用显示可用的 psproviders 列表

我找到的所有帮助都假设我知道一些我不知道的事情。寻找 psprovider 的基本解释。

答案1

这是来自 Get-PSProvider 的帮助文件:

Among other things, Windows PowerShell providers determine which 
data stores you can navigate through.

这里隐藏着两个主要概念。第一个是数据存储的概念,或者你也可以称之为容器。第二个是导航的概念。

数据存储的概念是操作数据的基础。如果您曾经编写过脚本或编程,那么您一定对变量很熟悉。事实上,变量是 Get-PSProvider 列出的数据存储类型之一。如果您曾经使用过数据库或网站,那么您一定对其他类型的数据存储很熟悉。为您列出的第二种可导航数据存储是文件系统。如果您曾经使用过 Windows,那么您一定对文件夹和文件很熟悉,甚至熟悉在文件夹和子文件夹中导航。文件夹在 Powershell 中称为目录,但概念相同。

注册表是另一种类型的数据存储。

对我来说(也许对你来说)新颖的是将所有这些不同类型的数据存储概括为一个通用超类,然后在整个超类上定义某些操作的想法。

例如,Get-ChildItem 是一种基本的导航操作,它允许您遍历按层次结构排列的容器树。但他们没有为文件实现一个专门的 GCI,也没有为注册表项实现另一个 GCI,也没有为变量实现另一个 GCI,等等,而是选择实现一个可以适用于这三个中的任何一个以及其他几个的 GCI。

这只是概念的开始,但我希望它能有所帮助。

答案2

PSProviders 基本上是数据存储。您可以像处理普通数据系统文件夹一样处理它们。get-psproviders将为您提供所有 psproviders 的列表。

例如:cmd.exe无法将当前位置更改为注册表。您可以使用 cmd 更改注册表设置,但不能像目录或cd注册表那样处理它。

在 PowerShell 中,注册表是一个 PSProvider。意味着您可以像访问数据系统文件夹一样访问它。如果您输入,cd hklm:您实际上位于本地计算机注册表内,并且可以使用以下方式访问其内容Get-ChildItem

这样做的好处是,您可以提供实际上指向注册表的 PSDrives 等。

New-PSDrive -name G -PSProvider Registry -Root HKCU:\Software

G:\ 驱动器现已映射到当前用户 > 软件注册表。(仅适用于当前 PSSession)

您可以使用 PSProviders 实现很多功能。您应该执行并阅读get-help about_providers以获取更多信息。

相关内容