PowerShell 学习笔记 - 4 Provider, ItemProperty 与 ACL

PowerShell 学习笔记 - 4 Provider, ItemProperty 与 ACL

本章主要探讨 PowerShell 中的 Provider 这一基本概念与如何获取文件等依靠 PSProvider 提供的对象所具有的属性等。由于移植进度或底层异构等原因,PSProvider 现今于 PowerShell Core 下不推荐使用,这里的阐述以 Windows PowerShell 为例:

PSProvider

PSProvider 即 PowerShell 提供的文件系统抽象功能,即将其他结构映射至文件系统结构的功能

# 获取现在注册的 PSProvider 列表
PS C:\Windows\system32> Get-PSProvider

Name                 Capabilities                                                     Drives                                                          
----                 ------------                                                     ------                                                          
Registry             ShouldProcess, Transactions                                      {HKLM, HKCU}                                                    
Alias                ShouldProcess                                                    {Alias}                                                         
Environment          ShouldProcess                                                    {Env}                                                           
FileSystem           Filter, ShouldProcess, Credentials                               {C, E, D}                                                       
Function             ShouldProcess                                                    {Function}                                                      
Variable             ShouldProcess                                                    {Variable}      

Registry 即注册表为例,其提供了两个驱动器,即文件系统入口:

PS C:\Windows\system32> Get-PSProvider Registry

Name                 Capabilities                                                     Drives                                                          
----                 ------------                                                     ------                                                          
Registry             ShouldProcess, Transactions                                      {HKLM, HKCU}                                                    

# 因此可利用驱动器模式进入,即 Set-Location 至 $Drive + ":" 下,之后即可以用文件系统的 cmdlet 进行操作
PS C:\Windows\system32> cd HKLM:

PS HKLM:\> ls


    Hive: HKEY_LOCAL_MACHINE


Name                           Property                                                                                                               
----                           --------                                                                                                               
BCD00000000                                                                                                                                           
HARDWARE                                                                                                                                              
SAM                                                                                                                                                   
ls : 不允许所请求的注册表访问权。
所在位置 行:1 字符: 1
+ ls
+ ~~
    + CategoryInfo          : PermissionDenied: (HKEY_LOCAL_MACHINE\SECURITY:String) [Get-ChildItem], SecurityException
    + FullyQualifiedErrorId : System.Security.SecurityException,Microsoft.PowerShell.Commands.GetChildItemCommand
 
SOFTWARE                                                                                                                                              
SYSTEM                                                                                                                                                



PS HKLM:\> cd .\SYSTEM
PS HKLM:\SYSTEM> ls


    Hive: HKEY_LOCAL_MACHINE\SYSTEM


Name                           Property                                                                                                               
----                           --------                                                                                                               
ActivationBroker                                                                                                                                      
ControlSet001                                                                                                                                         
DriverDatabase                 Version       : 167772160                                                                                              
                               SchemaVersion : 65536                                                                                                  
                               Architecture  : 9                                                                                                      
                               UpdateDate    : {32, 198, 183, 38...}                                                                                  
                               OemInfMap     : {191, 128}                                                                                             
...

另一个常用于 Windows 平台下的主要功能,即为发现已经挂载的驱动器

# Windows “多根文件系统架构”,即每个驱动器均可作为“根”
PS C:\Users\chuny> (Get-PSProvider FileSystem).Drives

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
C                  51.98         65.07 FileSystem    C:\                                                    Users\chuny
E                  28.05         87.19 FileSystem    E:\
D                                      FileSystem    D:\

# UNIX “单根文件系统架构”,即单个 UNIX 操作系统的管控域下只有一个根,即 root
PS /> (Get-PSProvider FileSystem).Drives

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
/                   4.50         54.31 FileSystem    /

ItemProperty

事实上,文件系统即为提供于 PSProvider 上面的对象,因此每个文件均存在其对应的根(PSProvider)以及所对应的驱动器:

PS C:\Users\chuny> (Get-ItemProperty -LiteralPath .\.bash_history).PSProvider

Name                 Capabilities                                      Drives
----                 ------------                                      ------
FileSystem           Filter, ShouldProcess, Credentials                {C, E, D}


PS C:\Users\chuny> (Get-ItemProperty -LiteralPath .\.bash_history).PSDrive

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
C                  51.98         65.07 FileSystem    C:\                                                    Users\chuny

上面所涉及到的 Get-ItemProperty 即为获取文件系统路径对应对象属性的基本 cmdlet,由于注册表也被抽象为了一个 PSProvider,我们甚至可以通过路径直接获取注册表中的信息:

PS HKLM:\> Get-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\


BootDriverFlags           : 28
CurrentUser               : USERNAME
EarlyStartServices        : {RpcSs, Power, BrokerInfrastructure, SystemEventsBroker...}
PreshutdownOrder          : {vmms, UsoSvc, DeviceInstall, gpsvc...}
SvcHostSplitThresholdInKB : 3670016
WaitToKillServiceTimeout  : 5000
SystemStartOptions        :  NOEXECUTE=OPTIN  HYPERVISORLAUNCHTYPE=AUTO
SystemBootDevice          : multi(0)disk(0)rdisk(0)partition(4)
FirmwareBootDevice        : multi(0)disk(0)rdisk(0)partition(2)
LastBootSucceeded         : 1
LastBootShutdown          : 0
DirtyShutdownCount        : 5
PSPath                    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\
PSParentPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
PSChildName               : Control
PSDrive                   : HKLM
PSProvider                : Microsoft.PowerShell.Core\Registry

ACL

同时引入的一个重要概念即为 ACL(Access Control List,访问控制列表),对于每一个路径用户亦可以获取其访问权限设置,并检查自身是否可以访问。

以如下的 .\.bash_history 为例,该文件是 DESKTOP-H5Q0G1S 域下的用户 chuny 创建的,且除自身外还允许 BUILTIN\AdministratorsNT AUTHORITY\SYSTEM 两个用户进行完全控制:

PS C:\Users\chuny> Get-Acl .\.bash_history


    目录: C:\Users\chuny


Path          Owner                 Access
----          -----                 ------
.bash_history DESKTOP-H5Q0G1S\chuny NT AUTHORITY\SYSTEM Allow  FullControl...
PS C:\Users\chuny> (Get-Acl .\.bash_history).Access


FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : NT AUTHORITY\SYSTEM
IsInherited       : True
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : BUILTIN\Administrators
IsInherited       : True
InheritanceFlags  : None
PropagationFlags  : None

FileSystemRights  : FullControl
AccessControlType : Allow
IdentityReference : DESKTOP-H5Q0G1S\chuny
IsInherited       : True
InheritanceFlags  : None
PropagationFlags  : None

但 Windows NT 系列的 ACL 系统设计得相当复杂,而进入 Windows AD 后的 ACL 更加复杂,已经脱离本机的 ACL 范围,交由 AD 中心控制(这也是用户名会被标识为域下的用户的原因,如 IdentityReference : DESKTOP-H5Q0G1S\chuny)。这已经超出了本章范畴,详细可以参考 Access Control Model

通过这一个课程的介绍,首先我们就能够去了解到,Powershell 基本的应用场景和特点,然后我们将详细地为大家去说明,Powershell 当中,模块、命令的组织方式,并且了解如何查找和导入模块,使用命令,完成系统信息的查看和配置。然后我们将详细地为大家去说明 Powershell 对象的组件和应用,通过对象管道,灵活和高效的完成信息获取和系统配置的目标。第二节:通过这一节的介绍,首先我们就能够去了解到,Powershell 基本的应用场景和特点,然后我们就可以去查看一下整个课程的基本演示环境;第三节:通过这一节的介绍,首先我们就能够去了解到,Powershell 模块和命令的特点,然后我们就可以在演示的环境当中,完成模块和命令的查看和应用;第四节:通过这一节的介绍,首先我们就能够去了解到,Powershell 模块的来源和特点,然后我们就可以在演示的环境当中,完成模块的查看和配置;第五节:通过这一节的介绍,首先我们就能够去了解到,Powershell 执行策略的应用场景和特点,然后我们就可以在演示的环境当中,完成执行策略的查看和调整;第六节:通过这一节的介绍,首先我们就能够去了解到,Powershell Provider 的应用场景和特点,然后我们就可以在演示的环境当中,完成 Powershell Provider 的配置;第七节:通过这一节的介绍,首先我们就能够去了解到,Powershell 变量的应用场景和特点,然后我们就可以在演示的环境当中,完成 Powershell 变量定义和应用;第八节:通过这一节的介绍,首先我们就能够去了解到,Powershell 对象的组成和特点,然后我们就可以在演示的环境当中,完成 Powershell 对象的查看和应用;第九节:通过这一节的介绍,首先我们就能够去了解到,Powershell 对象管道的应用场景和特点,然后我们就可以在演示的环境当中,完成 Powershell 对象管道的查看和应用;第十节:通过这一节的介绍,首先我们就能够去了解到,Powershell 的运行环境当中,查看和管理对象的基本命令,然后我们就可以在演示的环境当中,完成命令的应用;第十一节:在 Powershell 的运行环境当中,我们可以通过不同的命令,获取到系统当中的不同信息,但是这些信息,是管理员通过交互式的方式获取的,而如果我们希望将这些信息,分享给更多不同的用户或者是存档,那么我们就可以同样的使用 Powershell 的命令,将它们导出成为不同类型的文件;第十二节:为了方便管理员能够适应在 Powershell 的运行环境当中,使用 Powershell 的命令,它提供了很多的别名命令,其实本质上就是 Powershell 命令,而另外的一方面,微软也在不断地替换一些旧的命令行工具,比如网络诊断和配置的命令,逐步地引导管理员比较舒适地熟悉 Powershell 的运行环境;第十三节:在企业的实际生产环境当中,还有很多的常规维护任务,并且这些任务也是定期执行的,那么这种情况之下的话,我们就可以编写 Powershell 的脚本,并且配置计划任务,定期执行,而如果需要的话,还可以在 Powershell 脚本当中,配置邮件通知功能,及时告知管理员执行的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值