如何使用PowerShell模块控制NTFS权限刀片服务器
尽管PowerShell包含一系列本地用来配置存储的cmdlet,但配置NTFS权限的能力明显有限。幸运的是,微软提供了一种利用PowerShell来检索和配置NTFS权限的方法,但是你需要提前下载并安装一个专用模块。
所需的模块是文件系统安全PowerShell模块。将文件复制到PowerShell模块文件夹中的NTFSSecurity文件夹下(你必须创建NTFSSecurity文件夹)。默认情况下,PowerShell模块文件夹路径为:%Windir%\System32\WindowsPowerShell\v1.0\Modules。
将模块复制到相应的文件夹后,可以通过使用下面的命令来验证模块的可用性:
Get-Module –ListAvailable
假设NTFS模块出现在列表里,可以使用下面的命令输入:
Import-Module NTFSSecurity
记住,除非你已经利用Set-ExecutionPolicy cmdlet更改了服务器的执行策略,否则上面这条命令将生成一个错误消息,告诉你系统上的脚本是禁止运行的。
输入执行策略后,你就拥有NTFS权限了。
然而,每次需要使用权限的时候都必须输入NTFSSecurity模块。
假设我在服务器上创建了文件夹C:\Data 。接着,假如想查看这个文件夹的访问控制列表条目,这时候我们可以使用下面的命令:
Get-NTFSAccess –Path C:\Data
上面命令列出每个访问文件夹的账户/安全组、访问权限、应用权限、权限类型以及IsInherited和InheritedFrom标志(见图1)。
图1. 通过PowerShell查看NTFS权限
授予文件夹访问权限与查看现有权限一样简单。你需要使用Add-NTFSAccess cmdlet。另外还需要指定路径、账户和访问权限。这里使用例子说明。假设“Everyone”都能安全访问到C:\Data文件夹。需要使用以下命令:
Add-NTFSAccess –Path C:\Data –Account Everyone –AccessRights FullControl
现在,我已经添加了权限,让每个人都能访问C:\Data,并且利用Get-NTFSAccess cmdlet验证权限(图2)。
图2. 任何人可访问C:\Data文件夹
即使能够将权限授权给所有人,通常来说必须确认账户位置(图2)。例如,一些已有的权限位置为BUILTIN或NT AUTHORITY。在实际操作中,通常会指定一个连带用户组名或用户名的域名。例如,如果你想授权访问Contoso域中的Finance组,那么账户名为Contoso\Finance。
删除NTFS权限有点棘手。需要用到的命令是Remove-NTFSAccess。接着上面的例子,你必须确认路径、账户名称以及打算删除的权限。例如,如果你想删除C:\Data文件夹Everyone中的FullControl权限,你需要使用以下命令:
Remove-NTFSAccess –Path C:\Data –Account Everyone –AccessRights FullControl
该命令有点棘手的原因在于,你无法删除继承权限。而且,删除的权限必须与目前分配给该帐户的权限准确匹配。如果匹配失误,则命令无效。
因为有时难以完全精准匹配权限,所以使用几个命令一起删除权限会更加方便。假如你想删除C:\Data文件夹Everyone的所有权限,不必手工匹配权限,你可以使用PowerShell读取该权限然后进行删除该。代码如下:
Get-NTFSAccess –Path C:\Data –Account Everyone –ExcludeInherited | Remove-NTFSAccess
如果你想从整个文件夹树中删除权限,可以递归使用该命令(图3)。
图3. 删除Everyone权限