Первый и самый востребованный скрипт — создание пользователей из CSV-файла. HR-отдел заполняет Excel-таблицу с данными новых сотрудников, экспортирует в CSV, и скрипт автоматически создаёт учётные записи со всеми необходимыми атрибутами.
# bulk_create_users.ps1
# CSV-файл: LastName,FirstName,Department,Title,Office,Phone,Manager
param(
[Parameter(Mandatory)]
[string]$CsvPath,
[string]$Domain = "company.local",
[string]$DefaultPassword = "Welcome2024!",
[switch]$WhatIf
)
Import-Module ActiveDirectory
$users = Import-Csv -Path $CsvPath -Encoding UTF8
$logFile = "C:\Logs\AD\user_creation_$(Get-Date -Format 'yyyyMMdd_HHmm').log"
$created = 0; $errors = 0
foreach ($user in $users) {
$firstName = $user.FirstName.Trim()
$lastName = $user.LastName.Trim()
# Транслитерация для SamAccountName
$sam = (ConvertTo-Translit "$firstName.$lastName").ToLower()
$upn = "$sam@$Domain"
$displayName = "$lastName $firstName"
# Определяем OU по отделу
$ouMap = @{
"IT" = "OU=IT,OU=Users,OU=Company,DC=company,DC=local"
"Sales" = "OU=Sales,OU=Users,OU=Company,DC=company,DC=local"
"HR" = "OU=HR,OU=Users,OU=Company,DC=company,DC=local"
"Finance" = "OU=Finance,OU=Users,OU=Company,DC=company,DC=local"
}
$targetOU = $ouMap[$user.Department]
if (-not $targetOU) { $targetOU = "OU=Users,OU=Company,DC=company,DC=local" }
try {
if ($WhatIf) {
Write-Host "[DRY RUN] Would create: $displayName ($sam)" -ForegroundColor Yellow
continue
}
New-ADUser -Name $displayName `
-GivenName $firstName `
-Surname $lastName `
-SamAccountName $sam `
-UserPrincipalName $upn `
-DisplayName $displayName `
-Department $user.Department `
-Title $user.Title `
-Office $user.Office `
-OfficePhone $user.Phone `
-Manager (Get-ADUser -Filter "DisplayName -eq '$($user.Manager)'").DistinguishedName `
-Path $targetOU `
-AccountPassword (ConvertTo-SecureString $DefaultPassword -AsPlainText -Force) `
-ChangePasswordAtLogon $true `
-Enabled $true `
-ErrorAction Stop
# Добавляем в группы по отделу
$groupMap = @{
"IT" = @("SG-VPN-Users","SG-IT-Staff","SG-RDP-Users")
"Sales" = @("SG-CRM-Users","SG-Sales-Team")
"HR" = @("SG-HR-Staff","SG-PersonalData-Access")
"Finance" = @("SG-1C-Users","SG-Finance-Team")
}
foreach ($group in $groupMap[$user.Department]) {
Add-ADGroupMember -Identity $group -Members $sam
}
$created++
"$(Get-Date) [OK] Created: $displayName ($sam)" | Add-Content $logFile
Write-Host "[OK] $displayName" -ForegroundColor Green
}
catch {
$errors++
"$(Get-Date) [ERROR] $displayName : $_" | Add-Content $logFile
Write-Warning "[ERROR] $displayName : $_"
}
}
Write-Host "`nResults: Created=$created, Errors=$errors" -ForegroundColor Cyan
Write-Host "Log: $logFile"
Скрипт поддерживает режим WhatIf для предварительной проверки без реального создания учёток. Функция ConvertTo-Translit переводит кириллические имена в латиницу по стандарту ГОСТ для формирования логинов.
Оставить комментарий