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

请求协助编写PowerShell脚本枚举域内开放文件共享及共享权限

企业文件共享及权限枚举PowerShell脚本优化

原脚本存在的问题

  1. foreach ($ComputerName in '$ComputersNames') 使用单引号导致变量被当作字符串,无法遍历计算机列表,需改为遍历对象的Name属性。
  2. 依赖net view解析共享信息,输出格式不稳定易出错,推荐用PowerShell原生远程命令获取结构化数据。

整合权限获取的完整脚本

# 获取域内所有计算机名称(直接提取字符串数组)
$ComputersNames = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name

# 创建列表存储最终结果(包含计算机名、共享名、路径、权限)
$ShareResults = [System.Collections.Generic.List[PSObject]]::new()

foreach ($ComputerName in $ComputersNames) { 
    try {
        # 快速测试计算机是否在线
        if (Test-Connection -BufferSize 32 -Count 1 -ComputerName $ComputerName -Quiet -ErrorAction Stop) {
            
            # 远程调用获取共享及权限信息
            $Shares = Invoke-Command -ComputerName $ComputerName -ScriptBlock {
                # 筛选文件系统类型的共享(排除打印、IPC等非文件共享)
                Get-SmbShare | Where-Object { $_.ShareType -eq 'FileSystemDirectory' } | ForEach-Object {
                    # 获取共享路径的访问控制列表(ACL)
                    $acl = Get-Acl -Path $_.Path
                    # 整理权限条目为结构化对象
                    $permissions = $acl.Access | ForEach-Object {
                        [PSCustomObject]@{
                            身份标识 = $_.IdentityReference.Value
                            权限类型 = $_.FileSystemRights.ToString()
                            访问控制 = $_.AccessControlType.ToString()
                        }
                    }
                    # 返回单条共享的完整信息
                    [PSCustomObject]@{
                        共享名称 = $_.Name
                        共享路径 = $_.Path
                        权限列表 = $permissions
                    }
                }
            } -ErrorAction Stop

            # 将远程结果与计算机名整合,添加到结果列表
            foreach ($Share in $Shares) {                                           
                $ShareResults.Add([PSCustomObject]@{
                    计算机名 = $ComputerName
                    共享名称 = $Share.共享名称
                    共享路径 = $Share.共享路径
                    权限列表 = $Share.权限列表
                })
            }
        }
    }
    catch {
        Write-Warning "处理计算机 $ComputerName 失败: $_"
    }
}

# 控制台输出结果(可替换为导出CSV用于审计)
$ShareResults | Format-Table -AutoSize
# $ShareResults | Export-Csv -Path "C:\企业共享权限枚举.csv" -NoTypeInformation -Encoding UTF8

关键说明

  • 权限要求:运行脚本的账号必须具备域内目标计算机的管理员权限,才能执行远程调用和读取ACL信息。
  • WinRM配置:目标计算机需开启WinRM服务,可通过Enable-PSRemoting -Force提前配置(需管理员权限执行)。
  • 结果处理:脚本最终输出包含完整权限信息的结构化对象,可直接查看或导出为CSV文件用于后续审计分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:15:07