本文目录导读:

我来为你提供几种批量授权脚本的写法,涵盖不同场景:
Windows 批量授权(PowerShell)
文件/文件夹授权脚本
# batch_permissions.ps1
param(
[string]$Path = "C:\Data",
[string]$User = "Everyone",
[string]$Permission = "Read", # Read, Write, FullControl
[switch]$Recurse
)
# 设置权限
function Grant-Permission {
param(
[string]$ItemPath,
[string]$Account,
[string]$AccessType
)
try {
$acl = Get-Acl $ItemPath
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule(
$Account, $AccessType, "ContainerInherit,ObjectInherit", "None", "Allow"
)
$acl.SetAccessRule($accessRule)
Set-Acl $ItemPath $acl
Write-Host "✓ 已授权: $ItemPath -> $Account ($AccessType)" -ForegroundColor Green
}
catch {
Write-Host "✗ 失败: $ItemPath - $_" -ForegroundColor Red
}
}
# 批量授权
if ($Recurse) {
Get-ChildItem -Path $Path -Recurse -Directory | ForEach-Object {
Grant-Permission -ItemPath $_.FullName -Account $User -AccessType $Permission
}
}
# 授权根目录
Grant-Permission -ItemPath $Path -Account $User -AccessType $Permission
Write-Host "`n批量授权完成!" -ForegroundColor Cyan
使用方法:
# 给Everyone读取权限 .\batch_permissions.ps1 -Path "C:\SharedFolder" -User "Everyone" -Permission "Read" -Recurse # 给特定用户完全控制权 .\batch_permissions.ps1 -Path "D:\Project" -User "DOMAIN\UserName" -Permission "FullControl"
Linux Shell 批量授权
文件/目录权限脚本
#!/bin/bash
# batch_permissions.sh
# 配置
TARGET_DIR="${1:-/data}" # 目标目录
USER="${2:-user1}" # 用户名
GROUP="${3:-users}" # 用户组
PERMISSIONS="${4:-755}" # 权限值
# 检查目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
echo "错误: 目录 $TARGET_DIR 不存在"
exit 1
fi
echo "开始批量授权..."
echo "目录: $TARGET_DIR"
echo "用户: $USER"
echo "组: $GROUP"
echo "权限: $PERMISSIONS"
echo "------------------------"
# 设置目录权限
find "$TARGET_DIR" -type d -exec chmod "$PERMISSIONS" {} \;
find "$TARGET_DIR" -type f -exec chmod "644" {} \;
# 设置所有者
chown -R "$USER:$GROUP" "$TARGET_DIR"
echo "完成: 已批量授权 $TARGET_DIR"
使用方法:
chmod +x batch_permissions.sh ./batch_permissions.sh /shared/folder www-data www-data 755
批量授权文件访问(Linux ACL)
#!/bin/bash
# batch_acl.sh
# 批量设置ACL权限
grant_acl_recursive() {
local dir=$1
local user=$2
local perm=$3 # rwx, r-x, r--
echo "对目录 $dir 中的用户 $user 授予 $perm 权限"
# 设置默认ACL
setfacl -R -m u:$user:$perm "$dir"
setfacl -R -d -m u:$user:$perm "$dir"
# 验证
getfacl "$dir" | head -20
}
# 读取配置文件并应用
while IFS=',' read -r dir user perm; do
[ -z "$dir" ] && continue
[ "${dir:0:1}" = "#" ] && continue
grant_acl_recursive "$dir" "$user" "$perm"
done < "permissions.csv"
permissions.csv 配置文件示例:
# 目录,用户,权限 /project,alice,rwx /project/docs,bob,r-x /project/public,guest,r--
数据库批量授权
MySQL 批量授权脚本
#!/bin/bash
# mysql_batch_grants.sh
DB_USER="root"
DB_PASS="password"
DB_HOST="localhost"
# 用户和权限配置
declare -A GRANTS
GRANTS["user1"]="SELECT,INSERT,UPDATE ON database1.*"
GRANTS["user2"]="SELECT ON database2.*"
GRANTS["app_user"]="ALL PRIVILEGES ON app_db.*"
# 批量授权
for user in "${!GRANTS[@]}"; do
mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -e "
CREATE USER IF NOT EXISTS '$user'@'localhost' IDENTIFIED BY 'password123';
GRANT ${GRANTS[$user]} TO '$user'@'localhost';
FLUSH PRIVILEGES;
"
echo "已授权用户: $user"
done
企业级批量授权脚本
#!/usr/bin/env python3
# batch_permission_manager.py
import os
import stat
import pwd
import grp
from pathlib import Path
class BatchPermissionManager:
def __init__(self, config_file=None):
self.config = self.load_config(config_file) if config_file else {}
self.change_log = []
def load_config(self, filepath):
"""加载配置文件"""
import json
with open(filepath, 'r') as f:
return json.load(f)
def set_permissions(self, path, user, group, mode):
"""设置文件和目录权限"""
path = Path(path)
# 设置所有者
try:
uid = pwd.getpwnam(user).pw_uid if user else -1
gid = grp.getgrnam(group).gr_gid if group else -1
os.chown(path, uid, gid)
except KeyError as e:
self.log(f"用户/组不存在: {e}")
return False
# 设置权限
try:
path.chmod(mode)
self.log(f"已设置: {path} -> {user}:{group} {oct(mode)}")
return True
except PermissionError:
self.log(f"权限不足: {path}")
return False
def batch_process(self, base_path, rules):
"""批量处理"""
for rule in rules:
pattern = rule.get('pattern', '*')
user = rule.get('user')
group = rule.get('group')
mode = rule.get('mode', 0o755)
for item in Path(base_path).rglob(pattern):
self.set_permissions(item, user, group, mode)
self.generate_report()
def log(self, message):
"""记录日志"""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.change_log.append(f"[{timestamp}] {message}")
print(message)
def generate_report(self):
"""生成报告"""
report_file = f"permission_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt"
with open(report_file, 'w') as f:
f.write("批量授权报告\n")
f.write("=" * 50 + "\n")
f.write(f"总操作数: {len(self.change_log)}\n\n")
for log in self.change_log:
f.write(log + "\n")
print(f"报告已保存: {report_file}")
# 使用示例
if __name__ == "__main__":
# 配置文件示例
config = {
"base_path": "/var/www",
"rules": [
{"pattern": "*.php", "user": "www-data", "group": "www-data", "mode": 0o644},
{"pattern": "*.html", "user": "www-data", "group": "www-data", "mode": 0o644},
{"pattern": "*/cache", "user": "www-data", "group": "www-data", "mode": 0o755}
]
}
manager = BatchPermissionManager()
manager.batch_process(config["base_path"], config["rules"])
快速使用指南
Windows 快捷脚本
:: grant_admin.bat @echo off echo 正在批量授权管理员权限... :: 给当前用户添加运行权限 icacls "C:\Program Files\MyApp" /grant "%USERNAME%:F" /T /Q :: 给 Users 组添加读取权限 icacls "D:\SharedFolder" /grant "Users:R" /T echo 授权完成! pause
Linux 一行命令
# 批量授权目录
find /data -type d ! -perm 755 -exec chmod 755 {} \;
# 批量修改所有者
chown -R user:group /data
# 使用 xargs 批量处理
find /data -type f -name "*.sh" | xargs chmod +x
注意事项
- 测试环境验证:先在小范围测试
- 备份权限:授权前先备份
getfacl -R /path > permissions_backup.txt
- 权限最小化:只给需要的权限
- 日志记录:记录所有变更
- 回滚方案:准备权限恢复脚本
选择适合你场景的脚本,建议先在小范围测试再应用到生产环境。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播