吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 307|回复: 6
上一主题 下一主题
收起左侧

[其他原创] 【powershell】根据文本内容批量添加相关权限

[复制链接]
跳转到指定楼层
楼主
hoochanlon 发表于 2024-11-13 14:13 回帖奖励

缘起

需求:根据文本内容批量添加相关权限,相关共享文件夹实际名称与文本提供的名称存在部分差异,但需要根据此类文本批量加入相关权限。

实现效果

首先是如下图的excel表格

然后复制这些内容到文本

根据文本内容批量添加相关权限。

实现方式

对文本内容进行切片,以空格、顿号、逗号、制表符的方式进行划分。然后以匹配关键字的方式如“访问”、“编辑”,进行不同的权限划分。

附源码及地址:

# 定义主目录路径
$baseFolderPath = "C:\共享文件夹"  # 基础路径
$userFile = "C:\Users\Administrator\Desktop\权限分配列表.txt"  # 替换为实际的 TXT 文件路径

# 读取用户文件的每一行
Get-Content $userFile | ForEach-Object {
    # 按空格分隔每一行的内容
    # $parts = $_ -split '\s+'
    $parts = $_ -split '[\s,\t、]+'  # 正则表达式包含空格、制表符、逗号和顿号
    if ($parts.Length -ge 8) {
        $username = $parts[0]
        $folder2 = $parts[5]  # 组文件夹
        $folder3 = $parts[6]  # 公共目录文件夹
        $permissionType = $parts[7]

        # 设置 NTFS 权限类型
        $ntfsPermission = if ($permissionType -like "*访问*") { 
            "(OI)(CI)(R)"  # 只读权限
        } elseif ($permissionType -like "*编辑*" -or $permissionType -like "*读写*" -or $permissionType -like "*保存*") { 
            "(OI)(CI)(M)"  # 修改权限
        } else { 
            "(OI)(CI)(R)"  # 默认读权限
        }

        # 设置共享权限类型
        $sharePermission = if ($permissionType -like "*访问*") { 
            "Read"  # 共享只读权限
        } elseif ($permissionType -like "*编辑*" -or $permissionType -like "*读写*" -or $permissionType -like "*保存*") { 
            "Change"  # 共享更改权限
        } else { 
            "Read"  # 默认共享只读权限
        }

        # 处理 folder2(组文件夹)路径,去掉“组”字
        $folder2WithoutGroup = if ($folder2 -like "*组") {
            $folder2 -replace "组$", ""  # 去掉“组”字(结尾)
        } else {
            $folder2  # 如果没有“组”字,保持原样
        }

        # 构建完整的文件夹路径
        $fullPath1 = Join-Path -Path $baseFolderPath -ChildPath $folder2  # 原始组文件夹路径
        $fullPath2 = Join-Path -Path $baseFolderPath -ChildPath $folder3  # 公共目录文件夹路径
        $fullPath3 = Join-Path -Path $baseFolderPath -ChildPath $folder2WithoutGroup  # 去掉“组”字后的文件夹路径

        # 为每个文件夹路径分配权限
        $folders = @($fullPath1, $fullPath2, $fullPath3)

        foreach ($folderPath in $folders) {
            # 检查文件夹路径是否存在
            if (-Not (Test-Path $folderPath)) {
                Write-Output "路径 $folderPath 不存在,跳过该路径。"
                continue
            }

            # 使用 icacls 设置 NTFS 权限
            icacls "$folderPath" /grant ${username}:$ntfsPermission /t
            Write-Host "已为用户 $username 在文件夹 $folderPath 分配 NTFS $ntfsPermission 权限。" -ForegroundColor Yellow

            # 检查共享是否存在
            $netShareName = (Get-Item $folderPath).Name  # 使用文件夹名称作为共享名称

            if (Get-SmbShare -Name $netShareName -ErrorAction SilentlyContinue) {
                # 如果共享存在,添加共享权限
                Grant-SmbShareAccess -Name $netShareName -AccountName "$username" -AccessRight $sharePermission -Force
                Write-Host "已为用户 $username 在共享 $netShareName 分配共享 $sharePermission 权限。" -ForegroundColor Yellow
            } else {
                Write-Output "共享 $netShareName 不存在,跳过共享权限分配。"
            }
        }
    }
    else {
        Write-Output "行格式不匹配,跳过:$_"
    }
}

Write-Output "所有用户权限已成功添加。"

感想

写完这个的脚本,基本上主要的批量加权限的工作内容也搞定了,剩下的也没什么编写脚本的需求,有的估计是简单的批处理。

同事的想法是:在公司待一至二年,写脚本耗费时间过于麻烦,没必要交给下一任处理(和他交接的就是我...),不如把精力放在考证,以及相关专业上精进。

我的想法:尽量让工作轻松点,剩下的时间也好考证什么的。

以前有个HCNP,当然放现在已经很不值钱了,IE也掉价。没办法,不想卷也得卷。

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
8013 + 1 + 1 谢谢@Thanks!
l377076312 + 1 热心回复!

查看全部评分

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

沙发
redapple2015 发表于 2024-11-13 14:59
努力就行。那一项都是努力出来的。
3#
8013 发表于 2024-11-13 15:01
会写脚本有进步,很不错,点个赞。但是缺乏管理思路:
给你两个场景:
1、有同事从A组/部门调到B小组/部门,怎么快速的调整权限?

2、公司资料都是跨部门分享的,如何快速知道其它部门有哪些人,对本部门文件夹或文件有读取或写入权限(假设IT部资料对外分享了,那么如何快速知道其它部门对IT的资料有权限修改或查看权限)?
4#
 楼主| hoochanlon 发表于 2024-11-13 15:14 |楼主
8013 发表于 2024-11-13 15:01
会写脚本有进步,很不错,点个赞。但是缺乏管理思路:
给你两个场景:
1、有同事从A组/部门调到B小组/部 ...

你可以看我这篇帖子:

移除权限之前,首先是知道他有什么权限,然后需要当事人邮件,钉钉流程,或者关键人口头说明是增加还是变更权限(最好留痕)。

剩下的我想就是误删的恢复了,这点你可以看我这篇帖子,内容很多,关于灵活加权限也在这篇帖子下:

其他部门什么人什么的,看域组织单位,或者看钉钉也可以。

5#
8013 发表于 2024-11-13 15:24
本帖最后由 8013 于 2024-11-13 15:29 编辑
hoochanlon 发表于 2024-11-13 15:14
[md]你可以看我这篇帖子:

* [ 吾爱破解论坛 - 查看用户在哪些共享文件夹涉及相关权限,以及移除相关 ...

这个脚本也可以。。。。
但是症结并不在这里。因为你的场景或者你现在的公司规模本身小。
你把场景放大,一个企业里面里面有十多个部门,每个部门下面,还有若干小组。。每个小组还有历年涉密或者不涉密的资料,各个小组之间或者跨部门资料的共享,而且分享的还是个别文件夹。。。。你可以理解为套娃。。

那么你就会发现,刚才提的两个问题,用你现有的操作模式,是否会有局限性,。。

总之思路开阔些,不再回复。。谢谢。。。



6#
 楼主| hoochanlon 发表于 2024-11-13 15:32 |楼主
8013 发表于 2024-11-13 15:24
这个脚本也可以。。。。
但是症结并不在这里。因为你的场景或者你现在的公司规模本身小。
你把场景放大 ...

是有局限性。但要想一个好方案,也得长期在这种环境之中,想出几种办法,根据实际然后一步步做调整、细化才行,所以我当前是无法得出结论的。不过,你的想法是什么呢?
7#
gggplso 发表于 2024-11-13 17:28
厉害

从没想过通过这个方式去实现
是个思路
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-14 23:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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