吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 577|回复: 8
收起左侧

[其他原创] 查看用户在哪些共享文件夹涉及相关权限,以及移除相关权限

  [复制链接]
hoochanlon 发表于 2024-11-10 16:25

查看用户有哪些文件夹的共享权限和安全权限

当钉钉流程提出变更权限的需求时,有时会因为无法清楚了解之前成员在各个文件夹中的权限而感到困扰。这时,可以通过脚本自动查看并列出用户在共享文件夹和安全权限方面的具体信息。

# 配置域名
$domain = "CSXZX"
$userName = Read-Host "请输入目标用户名(用户名)"  # 输入用户名
$userName = "$domain\$userName"  # 构造完整用户名

# 获取用户的共享权限
Write-Host "检查 $userName 的共享权限:"
Get-SmbShare | ForEach-Object {
    $shareName = $_.Name
    $access = Get-SmbShareAccess -Name $shareName | Where-Object { $_.AccountName -eq $userName }
    if ($access) {
        $access | ForEach-Object {
            Write-Host "$userName 在共享文件夹 '$shareName' 中的权限:$($_.AccessControlType) $($_.AccessRight)"
        }
    }
}

# 获取用户的NTFS权限
Write-Host "`n检查 $userName 的 NTFS 权限:"
Get-SmbShare | ForEach-Object {
    $folderPath = $_.Path
    if ($folderPath -and (Test-Path $folderPath)) {  # 检查路径是否为空且存在
        $acl = Get-Acl -Path $folderPath
        $userAccess = $acl.Access | Where-Object { $_.IdentityReference -eq $userName }
        if ($userAccess) {
            $userAccess | ForEach-Object {
                Write-Host "$userName 在 '$folderPath' 中的 NTFS 权限:$($_.AccessControlType) $($_.FileSystemRights)"
            }
        }
    }
}

Write-Host "`n检查完成。"

删除用户相关共享文件夹的共享及安全权限

根据用户输入的共享名,再通过共享名进行文件定位,再通过 -RemoveAccessRule 参数删除用户 NTFS 权限。共享权限移除,直接进行 Revoke-SmbShareAccess 移除就好了。

# 配置域名
$domain = "CSXZX"  

# 提示用户输入用户名和共享文件夹名称
$userName = Read-Host "请输入目标用户名(用户名)"  # 仅输入用户名
$shareName = Read-Host "请输入共享文件夹名称"  # 输入共享文件夹名称

# 构造完整的用户名
$userName = "$domain\$userName"

# 获取共享文件夹路径
$folderPath = (Get-SmbShare -Name $shareName).Path

# 移除 NTFS 权限
$acl = Get-Acl -Path $folderPath
$acl.Access | Where-Object { $_.IdentityReference -eq $userName } | ForEach-Object {
    $acl.RemoveAccessRule($_)
}
Set-Acl -Path $folderPath -AclObject $acl
Write-Host "已成功移除 $userName 的 NTFS 权限"

# 移除共享权限
Revoke-SmbShareAccess -Name $shareName -AccountName $userName -Force
Write-Host "已成功移除 $userName 的共享权限"

移除用户所有涉及到的共享文件夹权限

通过 Get-SmbShare 获取所有共享文件夹,排除一些系统级共享文件夹,进行遍历移除该用户涉及到的所有文件夹权限。此外还能进行手动例外的文件夹列表进行排除,以防不必要多余的权限移除。

# 配置域名
$domain = "CSXZX" 
$userName = Read-Host "请输入目标用户名(用户名)"  # 输入用户名
$excludeShares = Read-Host "请输入排除的共享文件夹(用逗号或顿号分隔,不输入则默认移除所有共享文件夹)"

# 默认排除的共享文件夹
$defaultExcludeShares = @("ADMIN$", "C$", "IPC$", "NETLOGON", "SYSVOL")

# 构造完整的用户名
$userName = "$domain\$userName"

# 获取所有共享文件夹
$shares = Get-SmbShare

# 过滤需要排除的共享文件夹
if ($excludeShares) {
    $excludeSharesList = ($excludeShares -replace "、", ",").Split(",")
    $excludeSharesList += $defaultExcludeShares  # 合并默认排除共享文件夹
    $shares = $shares | Where-Object { $excludeSharesList -notcontains $_.Name }
} else {
    # 如果没有输入排除的共享文件夹,则使用默认排除列表
    $shares = $shares | Where-Object { $defaultExcludeShares -notcontains $_.Name }
}

# 遍历所有共享文件夹,移除用户权限
foreach ($share in $shares) {
    # 检查用户是否有共享权限
    $access = Get-SmbShareAccess -Name $share.Name | Where-Object { $_.AccountName -eq $userName }
    if ($access) {
        # 移除共享权限
        Revoke-SmbShareAccess -Name $share.Name -AccountName $userName -Force
        Write-Host -ForegroundColor Green "已移除 $userName 在共享文件夹 '$($share.Name)' 的共享权限"
    } else {
        Write-Host "$userName 在共享文件夹 '$($share.Name)' 中没有共享权限,无需移除"
    }

    # 获取文件夹路径并移除 NTFS 权限
    $folderPath = $share.Path
    $acl = Get-Acl -Path $folderPath
    $userAccess = $acl.Access | Where-Object { $_.IdentityReference -eq $userName }

    if ($userAccess) {
        # 移除用户的 NTFS 权限
        $userAccess | ForEach-Object {
            $acl.RemoveAccessRule($_)
        }
        Set-Acl -Path $folderPath -AclObject $acl
        Write-Host -ForegroundColor Green "已移除 $userName 在 '$folderPath' 的 NTFS 权限"
    } else {
        Write-Host "$userName 在 '$folderPath' 中没有 NTFS 权限,无需移除"
    }
}

Write-Host "权限移除完毕"

源码地址:https://github.com/hoochanlon/scripts/tree/main/d-pwsh-dc   及以下对应名称:

  • 查看用户在哪些共享文件夹有相关权限.ps1
  • 移除权限模板.ps1
  • 移除用户所有涉及到的共享文件夹权限.ps1

免费评分

参与人数 4吾爱币 +9 热心值 +3 收起 理由
mayx010217 + 1 谢谢@Thanks!
loozguul + 1 + 1 热心回复!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
暧昧乱人心1314 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

暧昧乱人心1314 发表于 2024-11-10 17:05
看着很不错
冬天冷了多穿点 发表于 2024-11-10 17:13
akinet 发表于 2024-11-10 17:19
 楼主| hoochanlon 发表于 2024-11-10 22:29
akinet 发表于 2024-11-10 17:19
这是域相关的吗?

是,把 $domain部分去掉就是常规的。
Naive2021 发表于 2024-11-10 22:46
有用!检索指定用户在共享文件夹下的权限
www.52pojie.cn 发表于 2024-11-11 14:11
应该说,是:方便,快捷,好用!谢谢!
RabbitBearLove 发表于 2024-11-11 16:24
挺有用的,学习下
谢谢楼主分享
vraypk 发表于 2024-11-12 15:59
不错 ,运维时经常需要这类操作,看github里面还有挺多脚本的,感觉可以丰富下脚本了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 01:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表