提供程序和驱动器
PowerShell系列好久没更新了,主要原因是懒有些主题涉及的内容太多了,一时间不知道怎么整理成文章发出来。近期刚好因为一点小问题又折腾了一下PowerShell,就顺便整理出这么一篇文章,介绍一下PowerShell中很重要的提供程序和驱动器。
提供程序(Provider)
Provider这个词在很多中文资料中被翻译为“提供程序”,刚开始学习PowerShell时看到这个词的我是这样子的:
要理解这个概念,其实只要读一读它的英文名就可以了。Provider,提供者,提供什么呢?在PowerShell中,Provider提供的是数据。它提供的数据可以是文件,也可以是环境变量,也可以是注册表信息。说到这里你可能还是有点懵(内心:这玩意儿到底嘎哈用的?),不过没关系,你只要记住它是提供数据的就行了,请继续往下读。
驱动器(Drive)
那驱动器又是什么?说到驱动器,大多数人首先会想到的应该是各种“CDEF盘”,不过PowerShell中的驱动器可没有那么简单。如果说提供程序提供了数据,那么驱动器就是提供了索引数据的方式,也可以说驱动器通过一个特定的提供程序连接到存储数据的介质。
举个例子:FileSystem是PowerShell一个内置的提供程序,它提供了文件系统相关的数据,而C盘就是属于FileSystem的一个驱动器,通过C:\path\to\file
的形式我们可以索引到提供程序提供的数据(文件或文件夹)。
PowerShell中的驱动器跟提供程序是多对一的关系,就像一个提供文件数据的提供程序可以对应多个文件系统驱动器(CDEF盘)一样。
项(Item)
仔细看看文件系统、注册表、环境变量等数据源的构成,我们能发现其实这些系统之间有很多相似之处:
- 它们都是树型结构
- 每一项数据都能对应一个路径,像文件路径和注册表项路径(这个特性是基于其树形结构的)
- 每一项数据都是由名字、内容和属性构成的
所以PowerShell又引入了另一个概念——项(Item)。PowerShell将提供程序提供的数据抽象为一个个的项(文件是项,文件夹是项,注册表项是项,环境变量也是项),将数据统一以项的形式表现。
PowerShell通过这种形式,将数据以一致的形式公开,这样我们可以以相同的方式对这些不同类型的数据进行管理了!试想一下,你可以用与修改文件内容相同的方式修改环境变量,是不是很有意思呢?
内置提供程序和驱动器
PowerShell内置了以下的提供程序和驱动器:
Provider | Drive | Data store |
---|---|---|
Alias | Alias: | cmdlet别名 |
Certificate | Cert: | 数字签名证书 |
Environment | Env: | 环境变量 |
FileSystem | * | 文件和文件夹 |
Function | Function: | PowerShell函数 |
Registry | HKLM:, HKCU: | 注册表,其中的两个驱动器HKLM:对应注册表的HKEY_LOCAL_MACHINE,HKCU:对应HKEY_CURRENT_USER |
Variable | Variable: | PowerShell中的变量 |
WSMan | WSMan: | WS-Management配置信息 |
使用这些内置的驱动器,就可以访问并管理提供程序提供的数据了:
PS > Set-Content Env:\Test test
PS > Get-Content Env:\Test
test
PS > Get-Content Variable:\PID
27631
注意路径中驱动器名字要加冒号(:),Windows上的路径分隔符是使用反斜杠(\)的。
相关cmdlet
获取Provider
Get-PSProvider [[-PSProvider] <String[]>] [<CommonParameters>]
使用Get-PSProvider
命令用于获取提供程序对象(System.Management.Automation.ProviderInfo)。参数-PSProvider<