This repository has been archived on 2023-12-11. You can view files and clone it, but cannot push or open issues or pull requests.
archive/powershell/active-directory/active-directory.ps1
2023-07-29 16:42:28 +05:00

156 lines
5.4 KiB
PowerShell
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Разрешаем запуск скрипта и запускаем его
# Set-ExecutionPolicy Unrestricted -force ; cd ~\Desktop\ ; .\ad-users.ps1
Import-Module ActiveDirectory
# Указываем директорию
$dir = "$(pwd)\Users"
new-item -path "$dir" -ItemType Directory -force >$null
# Переменные DC
$dc_first = "demo"
$dc_second = "lab"
# Переменные OU
$ou_main = "DemoOffice"
$ou_users = "Users"
$ou_computers = "Computers"
# Переменные для настройки сети
$mask = "255.255.255.0"
$gw = '192.168.10.1'
$dns = '192.168.10.100'
$eth = 'Ethernet0'
# Переменные PATH
$dc_path = "DC=$dc_first,DC=$dc_second"
$main_path = "OU=$ou_main,DC=$dc_first,DC=$dc_second"
$users_path = "OU=$ou_users,OU=$ou_main,DC=$dc_first,DC=$dc_second"
$computers_path = "OU=$ou_computers,OU=$ou_main,DC=$dc_first,DC=$dc_second"
# Проверка OU
try
{
Get-ADOrganizationalUnit -SearchBase "$main_path" -Filter * >$null
Get-ADOrganizationalUnit -SearchBase "$users_path" -Filter * >$null
Get-ADOrganizationalUnit -SearchBase "$computers_path" -Filter * >$null
}
catch
{
New-ADOrganizationalUnit -Name "$ou_main" -Path $dc_path
New-ADOrganizationalUnit -Name "$ou_users" -Path $main_path
New-ADOrganizationalUnit -Name "$ou_computers" -Path $main_path
}
# Вводим переменные
if ("$args[0]" -eq "[0]"){
$numb = "1"
} else {
$numb = $args[0]
}
$count=1..$numb
$users = @()
Foreach ($i in $count)
{
$Row = "" | Select Username,Admin,IP,PC
$Row.Username = Read-Host "Введите имя пользователя номер $i"
$Row.Admin = Read-Host "Должен ли пользователь $i иметь права администратора? (Y - да, N - нет)"
if ($Row.Admin -eq "y")
{$Row.Admin = "Yes"}
else {$Row.Admin = "No"}
$Row.PC = Read-Host "Введите имя компьютера номер $i"
$Row.IP = Read-Host "Введите IP адрес для пользователя номер $i"
$Users += $Row
}
$pass = Read-Host 'Enter the password'
# Цикл с пользователями
foreach ($user in $users) {
$name = $user.Username
$ip = $user.ip
$pc = $user.pc
$Username = @{
Name = "$name"
GivenName = "$name"
UserPrincipalName = "$name@$dc_first.$dc_second"
Path = $users_path
ChangePasswordAtLogon = $true
AccountPassword = "$pass" | ConvertTo-SecureString -AsPlainText -Force
Enabled = $true
}
# Создание пользователей
New-ADUser @Username
Set-ADUser $name -PasswordNeverExpires:$True
if ($user.Admin -eq "Yes")
{Add-ADGroupMember "Domain admins" $name}
# Создание скрпитов для компьютеров "локально"
$securepassword = '$pass' + " | ConvertTo-SecureString -AsPlainText -Force"
$credential = "New-Object System.Management.Automation.PSCredential -ArgumentList" + ' $name, $securepassword'
$out = '# Разрешаем запуск скрипта и запускаем его
# Set-ExecutionPolicy Unrestricted -force ; cd ~\Desktop\ ;' + " .\$name.ps1" + '
$name = "' + "$name" + '"
' + '$pass = "' + "$pass" + '"
' + '$securepassword = ' + "$securepassword
" + '$credential = ' + "$credential
Disable-NetAdapterBinding -Name '*' -ComponentID ms_tcpip6
netsh interface ip set address name=$eth static $ip $mask $gw
netsh interface ip set dns $eth static $dns " + '>$null' + "
Timeout /T 5
Add-Computer -DomainName $dc_first.$dc_second -NewName $pc -OUPath " + '"' + "$computers_path" + '"' + " -Credential" + ' $credential
$ans = Read-Host "Перезагрузить ПК?"
if ($ans -eq "y")
{Restart-Computer -Force}'
$con="Проводное соединение 1"
$outl = '#!/usr/bin/env bash
if [[ $(whoami) == "root" ]]; then
' + '
ip=' + '"' + $ip + '"' + '
mask=' + '"' + 24 + '"' + '
gw=' + '"' + $gw + '"' + '
dns=' + '"' + $dns + '"' + '
pc=' + '"' + $pc + '"' + '
dc_first=' + '"' + $dc_first + '"' + '
dc_second=' + '"' + $dc_second + '"' + '
con=' + '"' + $con + '"' + '
name=' + '"' + $name + '"' + '
#Установка пакетов
apt install astra-ad-sssd-client -y
#Вводим краткое доменное имя
hostnamectl set-hostname "$pc"
# Задаем адрес шлюза
nmcli con mod "$con" ip4 $ip/$mask gw4 $gw
# Задаем адреса DNS
nmcli con mod "$con" ipv4.dns "$dns"
# Отключаем DHCP, переводим в "ручной" режим настройки
nmcli con mod "$con" ipv4.method manual
nmcli con mod "$con" ipv6.method ignore
nmcli -p con show "$con" | grep ipv4
# Перезапускаем соединение для применения новых настроек
nmcli con down "$con" ; nmcli con up "$con"
#Вход в домен Active Directory
astra-ad-sssd-client -d demo.lab -u Administrator -p ' + "$pass" + ' -y
# sudo
echo "$name ALL=(ALL:ALL) ALL" | sudo EDITOR="tee -a" visudo
#Перезагрузка
read -p "Перезагрузить ПК? " in
if [[ "$in" == "y" ]]; then
sudo reboot
fi
#Выполнено не от рута
else
echo "Запусти скрипт через sudo!"
fi'
# Указываем директорию и записываем данные пользователя
write-output $out | out-file -append -encoding utf8 "$dir\$name.ps1"
# Указываем директорию и записываем данные пользователя
write-output $outl | out-file -append -encoding utf8 "$dir\$name.sh"
((Get-Content "$dir\$name.sh") -join "`n") + "`n" | Set-Content -NoNewline -encoding utf8 "$dir\$name.sh"
}