博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PowerShell 学习笔记 - 4 Provider, ItemProperty 与 ACL
阅读量:5861 次
发布时间:2019-06-19

本文共 8968 字,大约阅读时间需要 29 分钟。

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

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

PSProvider

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

# 获取现在注册的 PSProvider 列表PS C:\Windows\system32> Get-PSProviderName                 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 RegistryName                 Capabilities                                                     Drives                                                          ----                 ------------                                                     ------                                                          Registry             ShouldProcess, Transactions                                      {HKLM, HKCU}                                                    # 因此可利用驱动器模式进入,即 Set-Location 至 $Drive + ":" 下,之后即可以用文件系统的 cmdlet 进行操作PS C:\Windows\system32> cd HKLM:PS HKLM:\> ls    Hive: HKEY_LOCAL_MACHINEName                           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 .\SYSTEMPS HKLM:\SYSTEM> ls    Hive: HKEY_LOCAL_MACHINE\SYSTEMName                           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).DrivesName           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation----           ---------     --------- --------      ----                                               ---------------C                  51.98         65.07 FileSystem    C:\                                                    Users\chunyE                  28.05         87.19 FileSystem    E:\D                                      FileSystem    D:\# UNIX “单根文件系统架构”,即单个 UNIX 操作系统的管控域下只有一个根,即 rootPS /> (Get-PSProvider FileSystem).DrivesName           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation----           ---------     --------- --------      ----                                               ---------------/                   4.50         54.31 FileSystem    /

ItemProperty

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

PS C:\Users\chuny> (Get-ItemProperty -LiteralPath .\.bash_history).PSProviderName                 Capabilities                                      Drives----                 ------------                                      ------FileSystem           Filter, ShouldProcess, Credentials                {C, E, D}PS C:\Users\chuny> (Get-ItemProperty -LiteralPath .\.bash_history).PSDriveName           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           : 28CurrentUser               : USERNAMEEarlyStartServices        : {RpcSs, Power, BrokerInfrastructure, SystemEventsBroker...}PreshutdownOrder          : {vmms, UsoSvc, DeviceInstall, gpsvc...}SvcHostSplitThresholdInKB : 3670016WaitToKillServiceTimeout  : 5000SystemStartOptions        :  NOEXECUTE=OPTIN  HYPERVISORLAUNCHTYPE=AUTOSystemBootDevice          : multi(0)disk(0)rdisk(0)partition(4)FirmwareBootDevice        : multi(0)disk(0)rdisk(0)partition(2)LastBootSucceeded         : 1LastBootShutdown          : 0DirtyShutdownCount        : 5PSPath                    : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PSParentPath              : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSetPSChildName               : ControlPSDrive                   : HKLMPSProvider                : 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\chunyPath          Owner                 Access----          -----                 ------.bash_history DESKTOP-H5Q0G1S\chuny NT AUTHORITY\SYSTEM Allow  FullControl...PS C:\Users\chuny> (Get-Acl .\.bash_history).AccessFileSystemRights  : FullControlAccessControlType : AllowIdentityReference : NT AUTHORITY\SYSTEMIsInherited       : TrueInheritanceFlags  : NonePropagationFlags  : NoneFileSystemRights  : FullControlAccessControlType : AllowIdentityReference : BUILTIN\AdministratorsIsInherited       : TrueInheritanceFlags  : NonePropagationFlags  : NoneFileSystemRights  : FullControlAccessControlType : AllowIdentityReference : DESKTOP-H5Q0G1S\chunyIsInherited       : TrueInheritanceFlags  : NonePropagationFlags  : None

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

转载地址:http://uzgjx.baihongyu.com/

你可能感兴趣的文章
解决overflow: auto在Ios中滑动不流畅
查看>>
SpringCloud(二):注册中心Eureka
查看>>
启锐 588 打印机每次打印都流出一部分,没有重新切换纸张
查看>>
小程序 获取openid unionid
查看>>
redis info详解
查看>>
高阶特性
查看>>
MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据
查看>>
如何处理Docker的错误消息request canceled:Docker代理问题
查看>>
react(一)基础环境搭建
查看>>
CentOS 7 单用户和救援模式
查看>>
提升不止一点点,Dubbo 3.0 预览版详细解读,还愣着干啥啊?进来啊
查看>>
JAVA 循环结构 - for, while 及 do…while
查看>>
Grpc介绍 — ProToBuf基本使用
查看>>
是maven项目在指定JDK版本下编译和运行
查看>>
封装的一些常用的javascript函数
查看>>
NIO案例
查看>>
log4j的MDC
查看>>
OCR文字识别可以帮助PDF文档处理吗
查看>>
ABBYY FineReader 12 识别文档语言有哪些
查看>>
BarTender打印额外字符的方法
查看>>