You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell查询网络文件夹是否包含特定安全组的脚本需求

递归查询网络文件夹中指定AD安全组的PowerShell脚本方案

你的初步步骤合理性分析

你的思路方向是对的,但有几个细节需要调整:

  • 步骤1:如果目标安全组是**本地Active Directory(AD)**组,不需要执行Connect-AzureAD,应该先导入AD模块;如果是Azure AD同步到本地的组,才需要连接,但NTFS权限通常关联的是本地AD对象,所以这步优先用本地AD模块。
  • 步骤4:Get-ADGroup主要用于获取组的属性(比如SID),核心逻辑是递归遍历文件夹,检查每个文件夹的ACL权限是否包含目标组,所以需要结合Get-ChildItem递归遍历和Get-Acl获取权限的命令。
  • 步骤5:输出到Excel建议用Export-Csv(可直接用Excel打开),比Format-List更适合结构化导出。

具体实现步骤

  1. 导入AD模块(针对本地AD组):
    Import-Module ActiveDirectory
    
  2. 设置目标网络文件夹路径:
    $targetPath = "\\company-server\shared-folder"
    
  3. 定义目标安全组名称:
    $targetGroupName = "Your-Security-Group-Name"
    
  4. 获取目标组的SID(用于匹配权限,比名称更准确,避免重名):
    $targetGroup = Get-ADGroup -Filter "Name -eq '$targetGroupName'"
    if (-not $targetGroup) {
        Write-Error "未找到安全组:$targetGroupName"
        exit
    }
    $targetSID = $targetGroup.SID.Value
    
  5. 递归遍历文件夹并检查权限:
    用Get-ChildItem递归获取所有文件夹,然后逐个读取ACL,筛选出包含目标组的条目:
    $results = Get-ChildItem -Path $targetPath -Directory -Recurse -ErrorAction SilentlyContinue | ForEach-Object {
        $folderPath = $_.FullName
        $acl = Get-Acl -Path $folderPath -ErrorAction SilentlyContinue
        if ($acl) {
            # 遍历ACL中的所有权限条目
            foreach ($accessRule in $acl.Access) {
                # 检查条目是否属于目标组(通过SID匹配)
                if ($accessRule.IdentityReference.Value -eq $targetSID) {
                    [PSCustomObject]@{
                        FolderPath = $folderPath
                        GroupName  = $targetGroupName
                        Permission = $accessRule.FileSystemRights
                        AccessType = $accessRule.AccessControlType
                    }
                }
            }
        }
    }
    
  6. 导出结果到CSV(可直接用Excel打开):
    $results | Export-Csv -Path "GroupPermissionsCheck.csv" -NoTypeInformation -Encoding UTF8
    

补充说明

  • 用SID匹配组比用名称更可靠,因为AD中可能存在名称相同的组,但SID唯一。
  • -ErrorAction SilentlyContinue用于跳过无权限访问的文件夹,避免脚本中断。
  • 如果要同时检查文件权限,去掉Get-ChildItem中的-Directory参数即可。

内容的提问来源于stack exchange,提问作者Jon Bennett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 16:25:05