[玩转系统] 如何使用 PowerShell 管理 NTFS 权限
作者:精品下载站 日期:2024-12-14 13:02:20 浏览:17 分类:玩电脑
如何使用 PowerShell 管理 NTFS 权限
如果您是一名 IT 专业人员,并且发现自己在为组织设置文件系统权限方面遇到困难,那么您很幸运。使用 GUI 管理 NTFS 权限非常耗时,尤其是在处理许多用户或组时。幸运的是,我们有 PowerShell 来让这一切变得更好。如何? Microsoft.PowerShell.Security 模块。
PowerShell 有两个专门用于处理 ACL 的 cmdlet,分别为 Get-ACL
和 Set-ACL
。这两个 cmdlet 可以检索和分配任意数量的 NTFS 权限,您将在本教程中了解所有这些内容。如果您想在管理 NTFS 权限方面变得更加高效且立即有用,请继续阅读。
没时间读书?没问题!请观看下面来自 TechSnips.io 的 Anthony Howell 的配套视频:
先决条件
要按照本教程中的示例进行操作,您需要:
- PowerShell 7 或 Windows PowerShell 5.1
- 对 NTFS 文件和文件夹权限的基本了解
创建要测试的文件/文件夹
本教程将围绕一个简单的“实验室”或单个文件夹构建。您将了解如何在 PowerShell 中从头开始使用 NTFS 权限;您无需做任何额外的工作。
- 首先,以管理员身份打开 PowerShell 会话。
- 在文件系统上的某个位置创建一个名为 Share 的空文件夹。在以下示例中,我们假设该文件夹位于C:\Share。这将使示例变得更短并且更容易理解。您可以通过复制以下代码来创建该目录:
New-Item -ItemType Directory -Path 'C:\Share'
3. 创建一个名为C:\Share\Assets的文件夹。
New-Item -ItemType Directory -Path 'C:\Share\Assets'
4. 在 C:\Share 文件夹中创建一个名为 client_list.txt 的文件。
New-Item -ItemType File -Path 'C:\Share\Client_list.txt'
5. 在 C:\Share 文件夹中创建一个名为 client_projects.txt 的文件。
New-Item -ItemType File -Path 'C:\Share\Client_projects.txt'
6. 接下来,为共享文件夹路径分配一个变量。创建变量可以减少输入量并使路径更易于重用。假设您使用的是C:\Share,请将以下代码示例复制到您的 PowerShell 会话中:
$dir = 'C:\Share'
7. 按输入键。您现在有一个空目录并将该路径保存为变量。
使用 Get-Acl 查看 NTFS 权限
PowerShell 允许您使用 Get-Acl
cmdlet 快速查看 NTFS 权限。在以下部分中,您将了解如何使用 cmdlet 查看文件或文件夹的 NTFS 权限。
访问控制列表(ACL 是访问控制条目 (ACE) 的列表。ACL 中的每个 ACE 标识一个受托者并指定允许、拒绝或审核的访问权限。安全对象的安全描述符可以包含两个ACL 的类型:DACL 和 SACL。
显示 NTFS 权限
传统上,您可以通过右键单击C:\Share文件夹,单击属性,选择安全选项卡,然后查看 ACL。单击高级按钮。您可以在下面看到 GUI 如何显示权限的示例。
上面的示例有一些权限条目和属性编号。仔细检查它们,您将在本节后面看到比较。
使用您之前创建的目录,使用 Get-Acl
显示该目录的当前 NTFS 权限。
Get-Acl -Path $dir
您现在应该在以下屏幕截图中看到路径、所有者和访问级别详细信息。
上面屏幕截图中显示的 Access
属性包含有关 ACL 的附加信息,但它会滚动到屏幕之外,如上面 FullControl 末尾的三个点所示。有一种更好的方法来查看此属性,即将上一个命令括在圆括号或圆括号中以查看 Access
对象属性。仅通过运行以下代码查找该对象的 Access
属性。
(Get-Acl -Path $dir).Access
上面的命令也可以使用Access
对象和-ExpandProperties
参数来表达:Get-Acl -Path $dir |选择对象-展开属性访问
如以下屏幕截图所示,输出被包装以使命令更容易查看各个 Access
属性:
如果您有许多访问控制实体 (ACE),则以上述方式查看访问属性可以使终端输出快速向下滚动屏幕。每个实体都包含 FileSystemRights、AccessControlType、IdentityReference、IsInherited、InheritenceFlags 和 PropagationFlags 属性。为了使这一切更具可读性,请将对象通过管道传输到Format-Table -AutoSize
。运行以下命令。
(Get-Acl -Path $dir).Access | Format-Table -AutoSize
正如您在下面的屏幕截图中看到的,使用 Format-Table -AutoSize
时,访问属性更加清晰、更有条理:
检查属性和列号。请注意,这些属性与您在教程开始时在 GUI 中看到的属性相同。
过滤访问对象
有时您需要更精确地发现 NTFS 权限。为此,您可以筛选特定 ACE,或使用 PowerShell 查找 ACL 中继承或显式 NTFS 权限的特定结果。您可以使用 Where-Object
cmdlet 进行一些过滤,而不是用眼睛逐行滚动终端窗口。
下面的代码示例过滤不继承 NTFS 权限的对象。这是通过使用 Where-Object
和 -Not
操作数来查看管道中的当前对象 $_.
成员对象属性 IsInherited
,表示 ACE 是否是继承的结果并且未显式设置:
(Get-Acl -Path $dir).Access | Where-Object {$_.IsInherited -eq $true} | Format-Table -AutoSize
请记住将对象通过管道传输到Format-Table -AutoSize
,否则输出将在屏幕上向下滚动。让这成为一个新习惯;稍后你会感谢我的!
使用下面的代码,将 'USERNAME'
替换为另一个用户名以查看具体结果:
(Get-Acl -Path $dir).Access | Where-Object {$_.IdentityReference -like 'USERNAME'} | Format-Table -AutoSize
下面是结果的示例:
上面的示例显示了 IdentityReference
属性是用户或安全组分配的权限的所有 ACE。
继续练习您到目前为止所学到的有关 Get-Acl
的知识。检查系统上的一些不同文件和文件夹。这将帮助您查看不同上下文的许多不同安全描述符。这也将有助于建立一些肌肉记忆。
让我们更进一步并分配 NTFS 权限。
使用 Set-Acl 修改 NTFS NTFS 权限
现在您可以查看 NTFS 权限,接下来可以使用 PowerShell 分配和修改 NTFS 权限。 Set-Acl
cmdlet 使这成为可能。以下部分将演示如何将此 cmdlet 与 Get-Acl 结合使用来复制、修改继承以及删除文件或文件夹的 NTFS 权限。
复制 NTFS 权限
您可能有一个文件或文件夹,其中包含需要用于新 ACL 的适当级别的 NTFS 权限。您可以通过将权限从一个文件或文件夹复制到另一个文件或文件夹来节省时间。
复制现有的 ACL/ACE 可以减少设置 NTFS 权限时的人为错误,前提是您要复制的安全描述符是正确的并且首先适合目标。俗话说“能力越大,责任越大”。请记住这一点。
考虑下面的屏幕截图。在这里,您正在查看 C:\Share 中名为 Client_List.txt 的文件的 ACL。该 ACL 具有您想要的正确的 NTFS 权限级别:
现在,考虑下一个屏幕截图。这次您将查看 C:\Share 中名为 Client_Projects.txt 的另一个文件的 ACL。该文件不具有您所需的 NTFS 权限:
您需要将 NTFS 权限从 Client_List.txt 复制到 Client_Projects.txt。你怎么能这样做呢?您将通过从 Client_List.txt 获取 ACL,然后使用带有 -AclObject
参数的 Set-Acl
cmdlet 来修改权限。当您运行以下代码时,Client_List.txt 中的整个 ACL 会复制到 Client_Projects.txt :
# Copy Client_list.txt Security Descriptors to Client_Projects.txt
$Acl = Get-Acl -Path 'C:\Share\Client_list.txt'
Set-Acl -AclObject $Acl -Path 'C:\Share\Client_Projects.txt'
正如您在下面的编号屏幕截图中看到的,Client_Projects.txt 文件现在具有与 Client_list.txt 相同的安全描述符。
- 从现有文件获取现有 ACL。
- 将复制的 ACL 对象设置为文件或文件夹。
- 检查 ACL 是否正确复制到文件或文件夹。
您现在可以看到,Client_Projects.txt 文件的 ACL 与 IdentityReference 列中具有 AccessControlType 的 Client_List.txt 文件相同设置为允许。您也可以使用相同的技术为文件夹分配 NTFS 权限。
添加NTFS权限
在上一节中,您将现有 NTFS 权限从一个文件对象复制到另一个文件对象。这次您将从头开始创建 NTFS 权限。这将允许您分配将分配给文件或文件夹的 NTFS 权限。
首先,开始分配一些变量以用于创建 Set-Acl
使用的新对象。这样做可以让运行命令时变得更容易一些。下面的代码构建了 ACE 的属性,该属性将成为分配给文件或文件夹的 NTFS 权限:
# Create the ACE
$identity = 'domain\user'
$rights = 'FullControl' #Other options: [enum]::GetValues('System.Security.AccessControl.FileSystemRights')
$inheritance = 'ContainerInherit, ObjectInherit' #Other options: [enum]::GetValues('System.Security.AccessControl.Inheritance')
$propagation = 'None' #Other options: [enum]::GetValues('System.Security.AccessControl.PropagationFlags')
$type = 'Allow' #Other options: [enum]::GetValues('System.Securit y.AccessControl.AccessControlType')
$ACE = New-Object System.Security.AccessControl.FileSystemAccessRule($identity,$rights,$inheritance,$propagation, $type)
接下来,再分配一个变量,该变量将获取文件夹 Assets
的初始 ACL。然后,使用 AddAccessRule
方法成员类型,使用 $ACE
变量添加访问规则:
$Acl = Get-Acl -Path "$dir\Assets"
$Acl.AddAccessRule($ACE)
您现在已准备好将新创建的 ACE 添加到 C:\Share\Assets
的 ACL。现在使用 Set-Acl 将此新 ACE 应用于正确的目录:
Set-Acl -Path "$dir\Assets" -AclObject $Acl
接下来,使用以下代码验证您选择的用户是否有权查看所需的目录:
(Get-Acl -Path "$dir\Assets").Access | Format-Table -Autosize
删除 NTFS 权限
有时您需要从资源中删除 NTFS 权限。
要删除 NTFS 权限,请首先获取文件或文件夹的当前 ACL。在此示例中,该文件为 Client_Projects.txt
:
$Acl = Get-Acl -Path "$dir\Client_Projects.txt"
现在过滤您要删除的特定 ACE。您可以通过调用 $Acl
成员对象并将这些结果通过管道传输到 Where-Object
和一些操作数来完成此操作:
$Ace = $Acl.Access | Where-Object {($_.IdentityReference -eq 'domain\user') -and -not ($_.IsInherited)}
接下来,使用包含当前 ACL 安全描述符的 $Acl
变量,调用 RemoveAccessRule
方法并使用 New-Object
传递上面创建的 ACE 对象code> cmdlet 到 RemoveAccessRule()
方法。这将删除该条目:
$Acl.RemoveAccessRule($Ace)
请务必记住,您已在此处修改了现有 ACL,但尚未提交更改。
现在,要使这些更改生效,请运行 Set-Acl
cmdlet,并提供参数 -Path
和 -AclObject
以及适当的 值"$dir\Client_Projects.txt"
和 $Acl
。输入以下命令后,按 Enter:
Set-Acl -Path "$dir\Client_Projects.txt" -AclObject $Acl
概括
在本文中,您了解了如何使用 PowerShell 管理 NTFS 权限。您已经了解了两个 cmdlet:Get-Acl
和 Set-Acl
,以及它们如何使用 NTFS 权限。
您还了解了如何使用过滤器来定位 ACL 中的特定 ACE,以便在上述 cmdlet 中使用。通过一些练习,您将可以轻松管理比以往更多的 NTFS 权限请求。
进一步阅读
- 获取 Acl
- 设置Acl
- 文件系统权限枚举
- [访问控制列表](https://docs.microsoft.com/en-us/windows/win32/secauthz/access-control-lists#:~:text=访问控制列表 (ACL) 是一个列表,其类型ACL%3A DACL 和 SACL。)
- 复制Acl
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[短剧合集] 2025年06月2日 精选+付费短剧推荐39部
[软件合集] 25年6月2日 精选软件18个
[软件合集] 25年6月1日 精选软件15个
[短剧合集] 2025年06月1日 精选+付费短剧推荐59部
[短剧] 2025年05月31日 精选+付费短剧推荐58部
[软件合集] 25年5月31日 精选软件66个
[电影] 黄沙漫天(2025) 4K.EDRMAX.杜比全景声 / 4K杜比视界/杜比全景声
[风口福利] 短视频红利新风口!炬焰创作者平台重磅激励来袭
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[美图] 2W美女个美女小姐姐,饱眼福
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag