如何获取PowerShell中Add-NTFSAccess命令处理的文件清单
Add-NTFSAccess命令获取处理文件清单的解决方法
NtfsSecurity模块的Add-NTFSAccess默认通过在父目录添加可继承的访问控制项(ACE)完成权限配置,只要子文件/文件夹没有关闭权限继承,命令不需要遍历修改子对象,因此-Verbose参数默认不会输出子对象的处理日志。仅当子对象存在显式权限、关闭了继承规则时,命令才会修改对应子对象,你可以通过以下几种方式获取完整的处理文件列表:
方案1:预先遍历获取所有需要修改的对象清单
先单独统计目标路径下的所有对象,或者筛选出实际会被修改的、关闭了权限继承的对象,输出清单后再执行权限配置,示例代码如下:
Import-Module NtfsSecurity $Adminfilesserver = "Domain\Admins" $Path1 = "\\server\data" # 方式1:获取全量文件+文件夹清单 $allItems = Get-ChildItem -Path $Path1 -Recurse -Force Write-Host "即将处理的全量对象清单:" $allItems.FullName | ForEach-Object { Write-Host $_ } # 方式2:仅获取实际会被修改的、关闭了权限继承的对象清单 $affectedItems = @($Path1) $affectedItems += Get-ChildItem -Path $Path1 -Recurse -Force | Where-Object { $_.GetAccessControl().AreAccessRulesProtected } | Select-Object -ExpandProperty FullName Write-Host "实际会修改权限的对象清单:" $affectedItems | ForEach-Object { Write-Host $_ } # 执行权限配置 Add-NTFSAccess -AccessRights FullControl -Account $Adminfilesserver -Path $Path1 -AccessType Allow -AppliesTo ThisFolderSubfoldersAndFiles -Verbose
方案2:遍历每个对象单独配置权限,同步输出处理日志
如果需要实时看到每个对象的处理过程,可以放弃父目录直接设置继承权限的逻辑,改为遍历所有对象单独配置,示例代码如下:
Import-Module NtfsSecurity $Adminfilesserver = "Domain\Admins" $Path1 = "\\server\data" # 遍历子对象逐一配置权限并输出日志 Get-ChildItem -Path $Path1 -Recurse -Force | ForEach-Object { Write-Host "正在处理:$($_.FullName)" Add-NTFSAccess -Path $_.FullName -AccessRights FullControl -Account $Adminfilesserver -AccessType Allow -AppliesTo ThisFolderSubfoldersAndFiles -Verbose } # 处理根目录本身 Write-Host "正在处理根目录:$Path1" Add-NTFSAccess -Path $Path1 -AccessRights FullControl -Account $Adminfilesserver -AccessType Allow -AppliesTo ThisFolderSubfoldersAndFiles -Verbose
注意:该方案执行效率远低于父目录直接配置继承权限,仅适合小体量文件目录、需要明确统计所有处理对象的场景使用。
方案3:事后校验已配置对应权限的对象清单
如果不需要执行过程输出,仅需要事后确认配置结果,可以直接查询所有已配置目标权限的对象列表:
Get-ChildItem -Path $Path1 -Recurse -Force | Get-NTFSAccess -Account $Adminfilesserver -AccessRights FullControl | Select-Object FullName
内容的提问来源于stack exchange,提问作者Pax212fr
相关产品推荐
相关产品推荐

