Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -------------------------------------------------------
- # MPWiK Wrocław 3 stycznia 2019 r.
- # Autor: Hubert Hnatczuk
- # Skrypt tworzy nowe konto użytkownika w Active Directory
- # -------------------------------------------------------
- # klasa odpowiedzialna za reprezentację pojedynczego użytkownika
- class User {
- [string]$name
- [string]$surname
- [string]$division
- [string]$mailAddress
- [string]$username
- static [string]$PASSWORD = "Aa123456"
- static [string]$LOGIN_SCRIPT = "kix32.exe logowanie.kix"
- static [string]$DEFAULT_GROUP_ALL = "DL_Aplikacje_ESB"
- static [string]$DEFAULT_GROUP_DIV = "DL_Aplikacje_Intra_" # do tej nazwy należy dodać skrót działu, w moim przypadku jest to FI, więc pełna nazwa grupy to DL_Aplikacje_Intra_FI
- static [string]$MAIL_DEFAULT_DOMAIN = "mpwik.wroc.pl"
- # generuje nazwę grupy odpowiednią dla działu, w którym znajduje się pracownik
- [string]GetDivGroup() {
- return [User]::DEFAULT_GROUP_DIV + $this.division
- }
- }
- # klasa odpowiedzialna za generowanie prototypów użytkowników, które mogą być przesłane do AD
- class UserFactory {
- static [User] Create([string]$name, [string]$surname, [string]$division) {
- $user = [User]::new()
- $user.name = $name
- $user.surname = $surname
- $user.division = $division
- $user = [UserFactory]::CreateUsername($user)
- $user = [UserFactory]::CreateEmailAddress($user)
- return $user
- }
- static [User] CreateUsername([User]$user) {
- $name = $user.name
- $surname = $user.surname
- $name_nopl = [StringsManager]::RemovePolishChars($name)
- $surname_nopl = [StringsManager]::RemovePolishChars($surname)
- $username = ""
- $numberOfNameLetters = 1
- # sprawdzam, czy nazwa użytkownika istnieje, jeśli tak,
- # po kolei biorę litery z imienia i doklejam je do nazwy użytkownika.
- # Na przykład, jeśli tworzymy konto dla użytkownika Hubert Hnatczuk i konto hhnatczuk istnieje,
- # nazwą użytkownika zostanie huhnatczuk, jeśli ta także istnieje, to nazwą zostanie hubhnatczuk itd.
- do {
- $username = $name_nopl.Substring(0,$numberOfNameLetters) + $surname_nopl
- $numberOfNameLetters += 1
- } while ([ADController]::DoesUsernameExist($username))
- $user.username = $username
- return $user
- }
- static [User] CreateEmailAddress([User]$user) {
- $name = $user.name
- $surname = $user.surname
- $mailAddress = $name + "." + $surname + "@" + [User]::MAIL_DEFAULT_DOMAIN
- while([ADController]::DoesMailAddressExist($mailAddress)) {
- # specjalny przypadek - jeśli jest dwóch ludzi o tym samym imieniu i nazwisku
- # należy podać spersonalizowany adres email
- $mailAddress = Read-Host -Prompt ">> Uwaga: Adres e-mail $mailAddress istnieje już w systemie. `n>> Podaj inny adres e-mail dla tego użytkownika"
- }
- $user.mailAddress = $mailAddress
- return $user
- }
- }
- # klasa odpowiedzialna za przekazywanie i pobieranie danych do i z AD
- class ADController {
- static [bool]DoesUsernameExist([string]$username) {
- return dsquery user -samid $username
- }
- static [bool]DoesMailAddressExist([string]$mailAddress) {
- $result = Get-ADUser -Filter {UserPrincipalName -eq $mailAddress}
- return $result -ne $null
- }
- static [User]Init() {
- Echo '>> W celu stworzenia konta podaj następujące dane nowego użytkownika <<'
- Echo ''
- $name = Read-Host -Prompt 'Imię'
- $surname = Read-Host -Prompt 'Nazwisko' # w przypadku nazwiska dwuczłonowego podać je z myślnikiem, bez spacji
- $division = Read-Host -Prompt 'Dział (podać skrót, np. TE, Cerok itp.)'
- $user = [UserFactory]::Create($name, $surname, $division)
- return $user
- }
- static [void]CreateADUser() {
- $user = [ADController]::Init()
- [ADController]::SendUserToAD($user)
- }
- static [void]SendUserToAD([User]$user) {
- $securePass = (ConvertTo-SecureString -AsPlainText ([User]::PASSWORD) -Force)
- $surname = $user.surname
- $name = $user.name
- $email = $user.mailAddress
- New-ADUser -Name "$surname $name" -SamAccountName $user.username -AccountPassword $securePass -Path "OU=Nowi_uzytkownicy,OU=MPWIK,DC=mpwik,DC=pl" -Enabled 1 -ChangePasswordAtLogon 1 -DisplayName "$surname $name" -EmailAddress $user.mailAddress -GivenName $user.name -OtherName $user.surname -Surname $user.surname -UserPrincipalName $user.mailAddress -ScriptPath ([User]::LOGIN_SCRIPT) -OtherAttributes @{'proxyAddresses'="SMTP:$email"}
- [ADController]::AddToDefaultGroups($user)
- }
- static [void]RemoveADUser([User]$testUser) {
- Remove-ADUser -Identity $testUser.username
- }
- static [void]TestCreateADUser() {
- Echo "*** SKRYPT PRACUJE W TRYBIE TESTOWYM ***"
- $testUser = [ADController]::Init()
- [ADController]::SendUserToAD($testUser)
- Read-Host -Prompt "Wciśnij [Enter], aby usunąć konto testowe"
- [ADController]::RemoveADUser($testUser)
- }
- static [void]AddToDefaultGroups([User]$user) {
- $ADUser = Get-ADUser -Identity $user.username
- $groupAll = Get-ADGroup -Identity ([User]::DEFAULT_GROUP_ALL)
- $groupDiv = Get-ADGroup -Identity $user.GetDivGroup()
- Add-ADGroupMember -Identity $groupAll -Members $ADUser
- Add-ADGroupMember -Identity $groupDiv -Members $ADUser
- }
- }
- # klasa odpowiedzialna za zarządzanie napisami
- class StringsManager {
- static [string]RemovePolishChars([string]$text) {
- $text = $text.Replace("Ą", "A")
- $text = $text.Replace("ą", "a")
- $text = $text.Replace("Ć", "C")
- $text = $text.Replace("ć", "c")
- $text = $text.Replace("Ę", "E")
- $text = $text.Replace("ę", "e")
- $text = $text.Replace("Ł", "L")
- $text = $text.Replace("ł", "l")
- $text = $text.Replace("Ń", "N")
- $text = $text.Replace("ń", "n")
- $text = $text.Replace("Ó", "O")
- $text = $text.Replace("ó", "o")
- $text = $text.Replace("Ś", "S")
- $text = $text.Replace("ś", "s")
- $text = $text.Replace("Ź", "Z")
- $text = $text.Replace("ź", "z")
- $text = $text.Replace("Ż", "Z")
- $text = $text.Replace("ż", "z")
- return $text
- }
- }
- # --------------------------------------------------------------
- # ----------- POCZĄTEK PROGRAMU --------------------------------
- # --------------------------------------------------------------
- # Odkomentuj poniższą linię, aby przejść do trybu testowego
- # [ADController]::TestCreateADUser()
- # Właściwa metoda uruchamiająca skrypt, zakomentuj, aby przejść do trybu testowego
- [ADController]::CreateADUser()
- # --------------------------------------------------------------
- # ----------- KONIEC PROGRAMU ----------------------------------
- # --------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement