本文目录导读:

我来帮你创建一个批量添加或删除用户的脚本,这里提供两个版本:Linux/Unix 版本和 Windows 版本。
Linux/Unix 版本 (bash)
#!/bin/bash
# 批量用户管理脚本
# 支持批量添加和删除用户
# 日志文件
LOG_FILE="/var/log/user_management.log"
# 临时文件
TEMP_FILE="/tmp/user_management_$$.tmp"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 显示帮助信息
show_help() {
echo "批量用户管理脚本"
echo "用法: $0 [选项]"
echo ""
echo "选项:"
echo " -a, --add FILE 从文件批量添加用户"
echo " -d, --delete FILE 从文件批量删除用户"
echo " -g, --generate N 生成包含 N 个用户的模板文件"
echo " -p, --password PASS 设置默认密码(不指定则随机生成)"
echo " -s, --shell SHELL 设置默认shell(默认/bin/bash)"
echo " -h, --help 显示此帮助信息"
echo ""
echo "用户文件格式(每行一个用户):"
echo " 用户名:用户组:全名:备注"
echo " user1:users:张三:普通用户"
}
# 记录日志
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
# 生成随机密码
generate_password() {
openssl rand -base64 12 2>/dev/null || date +%s | sha256sum | base64 | head -c 16
}
# 生成模板文件
generate_template() {
local count=$1
local file="users_template_$(date +%Y%m%d).txt"
echo "# 用户模板文件" > "$file"
echo "# 格式: 用户名:用户组:全名:备注" >> "$file"
echo "# 生成时间: $(date)" >> "$file"
echo "" >> "$file"
for ((i=1; i<=count; i++)); do
echo "user${i}:users:用户${i}:自动生成用户" >> "$file"
done
echo -e "${GREEN}模板文件已生成: ${file}${NC}"
echo "请编辑文件后使用 -a 选项批量添加用户"
}
# 批量添加用户
add_users() {
local file=$1
local default_password=$2
local default_shell=$3
local success_count=0
local fail_count=0
if [[ ! -f "$file" ]]; then
echo -e "${RED}错误: 文件 $file 不存在${NC}"
exit 1
fi
echo "开始批量添加用户..."
log_message "开始批量添加用户,文件: $file"
while IFS=: read -r username group fullname desc; do
# 跳过空行和注释行
[[ -z "$username" || "$username" =~ ^# ]] && continue
# 检查用户是否已存在
if id "$username" &>/dev/null; then
echo -e "${YELLOW}用户 $username 已存在,跳过${NC}"
log_message "用户 $username 已存在,跳过"
((fail_count++))
continue
fi
# 检查用户组是否存在,不存在则创建
if [[ -n "$group" ]] && ! getent group "$group" &>/dev/null; then
groupadd "$group"
echo "创建用户组: $group"
fi
# 设置全名和备注的默认值
[[ -z "$fullname" ]] && fullname="$username"
[[ -z "$desc" ]] && desc="批量创建用户"
# 生成或使用指定密码
if [[ -z "$default_password" ]]; then
password=$(generate_password)
else
password="$default_password"
fi
# 创建用户
if useradd -m -s "${default_shell:-/bin/bash}" -g "${group:-users}" \
-c "$fullname,$desc" "$username" 2>/dev/null; then
# 设置密码
echo "$username:$password" | chpasswd
# 强制首次登录修改密码
chage -d 0 "$username"
# 设置密码过期策略(可选)
chage -M 90 -W 7 "$username"
echo -e "${GREEN}成功添加用户: $username${NC}"
log_message "成功添加用户: $username, 组: ${group:-users}, 密码: $password"
# 保存用户和密码信息
echo "$username:$password" >> "/tmp/user_passwords_$(date +%Y%m%d).txt"
((success_count++))
else
echo -e "${RED}失败添加用户: $username${NC}"
log_message "失败添加用户: $username"
((fail_count++))
fi
done < "$file"
echo ""
echo "========== 添加完成 =========="
echo -e "${GREEN}成功: $success_count 个用户${NC}"
echo -e "${RED}失败/跳过: $fail_count 个用户${NC}"
echo "密码文件: /tmp/user_passwords_$(date +%Y%m%d).txt"
echo "日志文件: $LOG_FILE"
}
# 批量删除用户
delete_users() {
local file=$1
local success_count=0
local fail_count=0
if [[ ! -f "$file" ]]; then
echo -e "${RED}错误: 文件 $file 不存在${NC}"
exit 1
fi
# 确认操作
echo -e "${YELLOW}警告: 此操作将永久删除用户及其主目录!${NC}"
read -p "确定要继续吗? (y/N): " confirm
if [[ "$confirm" != "y" && "$confirm" != "Y" ]]; then
echo "操作取消"
exit 0
fi
echo "开始批量删除用户..."
log_message "开始批量删除用户,文件: $file"
while IFS=: read -r username rest; do
# 跳过空行和注释行
[[ -z "$username" || "$username" =~ ^# ]] && continue
# 检查用户是否存在
if ! id "$username" &>/dev/null; then
echo -e "${YELLOW}用户 $username 不存在,跳过${NC}"
((fail_count++))
continue
fi
# 保护系统用户
if [[ "$username" =~ ^(root|bin|daemon|sys|sync|games|man|lp|mail|news|uucp|proxy|www-data|backup|list|irc|gnats|nobody)$ ]]; then
echo -e "${RED}拒绝删除系统用户: $username${NC}"
((fail_count++))
continue
fi
# 获取用户主目录
user_home=$(getent passwd "$username" | cut -d: -f6)
# 删除用户
if userdel -r "$username" 2>/dev/null; then
echo -e "${GREEN}成功删除用户: $username${NC}"
echo " 主目录: $user_home 已删除"
log_message "成功删除用户: $username, 主目录: $user_home"
((success_count++))
else
echo -e "${RED}失败删除用户: $username${NC}"
log_message "失败删除用户: $username"
((fail_count++))
fi
done < "$file"
echo ""
echo "========== 删除完成 =========="
echo -e "${GREEN}成功: $success_count 个用户${NC}"
echo -e "${RED}失败/跳过: $fail_count 个用户${NC}"
echo "日志文件: $LOG_FILE"
}
# 主程序
main() {
# 检查是否root用户
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}错误: 此脚本需要root权限运行${NC}"
exit 1
fi
# 确保日志目录存在
mkdir -p "$(dirname "$LOG_FILE")"
# 解析参数
if [[ $# -eq 0 ]]; then
show_help
exit 0
fi
while [[ $# -gt 0 ]]; do
case $1 in
-a|--add)
ADD_FILE="$2"
shift 2
;;
-d|--delete)
DELETE_FILE="$2"
shift 2
;;
-g|--generate)
GENERATE_COUNT="$2"
shift 2
;;
-p|--password)
DEFAULT_PASSWORD="$2"
shift 2
;;
-s|--shell)
DEFAULT_SHELL="$2"
shift 2
;;
-h|--help)
show_help
exit 0
;;
*)
echo -e "${RED}未知选项: $1${NC}"
show_help
exit 1
;;
esac
done
# 执行相应的操作
if [[ -n "$GENERATE_COUNT" ]]; then
generate_template "$GENERATE_COUNT"
fi
if [[ -n "$ADD_FILE" ]]; then
add_users "$ADD_FILE" "$DEFAULT_PASSWORD" "$DEFAULT_SHELL"
fi
if [[ -n "$DELETE_FILE" ]]; then
delete_users "$DELETE_FILE"
fi
# 清理临时文件
rm -f "$TEMP_FILE"
}
# 运行主程序
main "$@"
Windows 版本 (PowerShell)
# 批量用户管理脚本 (Windows)
# 需要以管理员权限运行
param(
[Parameter(Mandatory=$false)]
[string]$Action,
[Parameter(Mandatory=$false)]
[string]$File,
[Parameter(Mandatory=$false)]
[string]$Password,
[Parameter(Mandatory=$false)]
[int]$Generate = 0
)
# 颜色设置
$Host.UI.RawUI.ForegroundColor = 'Green'
# 日志函数
function Write-Log {
param([string]$Message)
$logDate = Get-Date -Format 'yyyy-MM-dd HH:mm:ss'
"$logDate - $Message" | Out-File -FilePath "C:\Temp\user_management.log" -Append
}
# 生成随机密码
function Generate-Password {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*"
return -join ((1..12) | ForEach { Get-Random -Maximum $chars.Length | ForEach { $chars[$_] } })
}
# 生成模板文件
function Generate-Template {
param([int]$Count)
$templateFile = "users_template_$(Get-Date -Format 'yyyyMMdd').txt"
$content = @"
# 用户模板文件
# 格式: 用户名|用户组|全名|备注
# 生成时间: $(Get-Date)
"@
for ($i = 1; $i -le $Count; $i++) {
$content += "user$i|Users|用户$i|自动生成用户`n"
}
$content | Out-File -FilePath $templateFile -Encoding UTF8
Write-Host "模板文件已生成: $templateFile" -ForegroundColor Green
}
# 添加用户
function Add-UsersFromFile {
param([string]$FilePath, [string]$DefaultPassword)
$successCount = 0
$failCount = 0
$passwordFile = "C:\Temp\user_passwords_$(Get-Date -Format 'yyyyMMdd').txt"
if (-not (Test-Path $FilePath)) {
Write-Host "错误: 文件 $FilePath 不存在" -ForegroundColor Red
return
}
Write-Host "开始批量添加用户..." -ForegroundColor Yellow
Get-Content $FilePath | ForEach-Object {
$line = $_.Trim()
# 跳过空行和注释
if ($line -eq "" -or $line.StartsWith("#")) { return }
$parts = $line -split '\|'
$username = $parts[0]
$group = $parts[1]
$fullname = if ($parts[2]) { $parts[2] } else { $username }
$description = if ($parts[3]) { $parts[3] } else { "批量创建用户" }
# 检查用户是否已存在
if (Get-LocalUser -Name $username -ErrorAction SilentlyContinue) {
Write-Host "用户 $username 已存在,跳过" -ForegroundColor Yellow
$failCount++
return
}
# 设置密码
if ($DefaultPassword) {
$password = $DefaultPassword
} else {
$password = Generate-Password
}
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
try {
# 创建用户
New-LocalUser -Name $username -Password $securePassword -FullName $fullname -Description $description
# 添加到用户组
if ($group) {
$groupExist = Get-LocalGroup -Name $group -ErrorAction SilentlyContinue
if (-not $groupExist) {
New-LocalGroup -Name $group
Write-Host "创建用户组: $group" -ForegroundColor Green
}
Add-LocalGroupMember -Group $group -Member $username
}
Write-Host "成功添加用户: $username" -ForegroundColor Green
Write-Log "成功添加用户: $username, 组: $group"
# 保存密码信息
"$username|$password" | Out-File -FilePath $passwordFile -Append
$successCount++
}
catch {
Write-Host "失败添加用户: $username - $($_.Exception.Message)" -ForegroundColor Red
Write-Log "失败添加用户: $username - $($_.Exception.Message)"
$failCount++
}
}
Write-Host "`n========== 添加完成 ==========" -ForegroundColor Cyan
Write-Host "成功: $successCount 个用户" -ForegroundColor Green
Write-Host "失败/跳过: $failCount 个用户" -ForegroundColor Red
Write-Host "密码文件: $passwordFile"
}
# 删除用户
function Remove-UsersFromFile {
param([string]$FilePath)
$successCount = 0
$failCount = 0
if (-not (Test-Path $FilePath)) {
Write-Host "错误: 文件 $FilePath 不存在" -ForegroundColor Red
return
}
# 确认操作
Write-Host "警告: 此操作将永久删除用户!" -ForegroundColor Yellow
$confirm = Read-Host "确定要继续吗? (y/N)"
if ($confirm -ne "y" -and $confirm -ne "Y") {
Write-Host "操作取消"
return
}
Write-Host "开始批量删除用户..." -ForegroundColor Yellow
Get-Content $FilePath | ForEach-Object {
$line = $_.Trim()
if ($line -eq "" -or $line.StartsWith("#")) { return }
$username = ($line -split '\|')[0]
# 保护系统用户
if ($username -in @("Administrator", "Guest", "DefaultAccount")) {
Write-Host "拒绝删除系统用户: $username" -ForegroundColor Red
$failCount++
return
}
# 检查用户是否存在
if (-not (Get-LocalUser -Name $username -ErrorAction SilentlyContinue)) {
Write-Host "用户 $username 不存在,跳过" -ForegroundColor Yellow
$failCount++
return
}
try {
Remove-LocalUser -Name $username
Write-Host "成功删除用户: $username" -ForegroundColor Green
Write-Log "成功删除用户: $username"
$successCount++
}
catch {
Write-Host "失败删除用户: $username" -ForegroundColor Red
Write-Log "失败删除用户: $username - $($_.Exception.Message)"
$failCount++
}
}
Write-Host "`n========== 删除完成 ==========" -ForegroundColor Cyan
Write-Host "成功: $successCount 个用户" -ForegroundColor Green
Write-Host "失败/跳过: $failCount 个用户" -ForegroundColor Red
}
# 显示帮助
function Show-Help {
Write-Host "批量用户管理脚本" -ForegroundColor Cyan
Write-Host "用法: .\user_manager.ps1 [选项]" -ForegroundColor Cyan
Write-Host ""
Write-Host "选项:"
Write-Host " -Action add 批量添加用户"
Write-Host " -Action delete 批量删除用户"
Write-Host " -File FILE 用户文件路径"
Write-Host " -Password PASS 默认密码(不指定则随机生成)"
Write-Host " -Generate N 生成包含 N 个用户的模板文件"
Write-Host ""
Write-Host "用户文件格式(每行一个用户):"
Write-Host " 用户名|用户组|全名|备注"
}
# 主程序
# 检查管理员权限
if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
Write-Host "错误: 此脚本需要管理员权限运行" -ForegroundColor Red
exit 1
}
# 确保日志目录存在
New-Item -ItemType Directory -Force -Path "C:\Temp" | Out-Null
# 执行操作
if ($Generate -gt 0) {
Generate-Template -Count $Generate
}
if ($Action -eq "add") {
Add-UsersFromFile -FilePath $File -DefaultPassword $Password
}
elseif ($Action -eq "delete") {
Remove-UsersFromFile -FilePath $File
}
else {
Show-Help
}
用户文件格式示例
创建 users.txt 文件:
# 批量用户管理文件 # 格式: 用户名:用户组:全名:备注 (Linux) # 或 用户名|用户组|全名|备注 (Windows) john:users:John Smith:技术支持 mary:developers:Mary Johnson:开发部门 tom:testers:Tom Wilson:测试部门 alice:designers:Alice Brown:设计部门 bob:developers:Bob Davis:开发部门
使用方法
Linux 版本:
# 赋予执行权限 chmod +x user_manager.sh # 生成 10 个用户的模板 sudo ./user_manager.sh -g 10 # 批量添加用户(随机密码) sudo ./user_manager.sh -a users.txt # 批量添加用户(指定密码) sudo ./user_manager.sh -a users.txt -p "MyPassword123!" # 批量删除用户 sudo ./user_manager.sh -d users.txt # 显示帮助 ./user_manager.sh -h
Windows 版本:
# 以管理员身份运行 PowerShell # 生成模板文件 .\user_manager.ps1 -Generate 10 # 批量添加用户 .\user_manager.ps1 -Action add -File users.txt # 批量添加用户(指定密码) .\user_manager.ps1 -Action add -File users.txt -Password "MyPassword123!" # 批量删除用户 .\user_manager.ps1 -Action delete -File users.txt # 显示帮助 .\user_manager.ps1
安全特性
- 密码保护:自动生成强密码并保存到单独文件
- 强制改密:首次登录强制修改密码
- 日志记录:所有操作都记录到日志文件
- 系统用户保护:拒绝删除系统关键用户
- 操作确认:删除操作需要确认
- 权限检查:需要管理员权限才能运行
有任何字段名或其他需求需要调整,请告诉我!
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播