Dodawanie użytkowników do Active Directory z pliku CSV za pomocą skryptu PowerShell. Skrypt PowerShell do importowania do lasu Active Directory i tworzenia pliku z użytkownikami

Znów było potrzebne i NIC nie było gotowe.Wszyscy piszą jak zdobyć kontakty za pomocą konsoli MS Exchange 2007\2010.Ale są sytuacje - kontrolerem domeny jest Win2008, a Exchange 2003.To dom wariatów, ale bywa, co do zrobienia... A teraz trzeba utworzyć tam około 6000 kontaktów. Samo utworzenie kontaktu nie jest trudne, ale zarejestrowanie atrybutów wymaganych przez Exchange do pracy z kontaktami to już kolejne zadanie.
Musimy więc stworzyć stos kontakty mailowe za pomocą PowerShell v. 2.0.1.1 przy użyciu modułu AD. Postaram się jak zwykle opisać to najprostszym językiem, zrozumiałym dla najbardziej niedoświadczonego administratora.

1. Utwórz plik w MS Excel pod nazwą lista_kontaktów zapisz ją w formacie CSV w ścieżce C:\CSV i nazwij kolumny w pliku w następujący sposób:

Nazwa Poczta pocztaPseudonim Typ Adresy proxy Adres docelowy

w zasadzie te parametry wystarczą, aby stworzyć pełnoprawny kontakt, a Exchange go widzi i może z nim pracować, niezależnie od tego, w którym folderze OU w Twojej AD go masz.
Jakie konkretne pola we właściwościach obiektu kontaktu odzwierciedlają te kolumny?
Oto wyjaśnienia, jak znak)))

Parametr kolumny - Nazwa w edytorze atrybutów ADSI (objaśnienie) - Oznaczenie w języku rosyjskim na właściwościach styku

Nazwa - CN (nazwa kanoniczna obiektu) - Nazwa
Poczta - Poczta ( E-mail) - E-mail
mailNickname - mailNickname (alias Exchange, alias) - wyświetlany tylko w edytorze atrybutów
Typ - ObjectClass (klasa obiektu (typ)) - wyświetlana tylko w edytorze atrybutów
proxyAddresses - proxyAddresses (zewnętrzny adres e-mail w odniesieniu do domeny w formacie SMTP: [e-mail chroniony]) - widoczne tylko w edytorze atrybutów
targetAddress - targetAddress (zewnętrzny adres e-mail w odniesieniu do domeny w formacie SMTP: [e-mail chroniony]) - widoczne tylko w edytorze atrybutów
Wypełnij kolumny np

Nazwa Poczta pocztaPseudonim Typ Adresy proxy Adres docelowy
Wasilij Terkin [e-mail chroniony] Partnerzy_Sprzedaż_0001 kontakt SMTP: [e-mail chroniony] SMTP: [e-mail chroniony]

Notatka:
mailNickname powinien odzwierciedlać członkostwo w dowolnej grupie mailingowej i lepiej, jeśli tak jest numer seryjny. Napotkałem usterki, gdy wszystkie kontakty miały ten sam pseudonim pocztowy, a usterki były nieprzyjemne i dziwne.
proxyAddresses, targetAddress musi być w określonym formacie SMTP: [e-mail chroniony], w przeciwnym razie Exchange nie zrozumie kontaktu i wygeneruje błąd o nieprawidłowym formacie.

2. Utwórz plik z create_contact i rozszerzeniem ps1 i skopiuj tam następujący kod:

Import-CSV - Ścieżka „C:\CSV\contacts_list.csv” | ForEach-Object -process (nowy-ADObject -Path "OU=PostContact,DC=domain,DC=corp,DC=loc al" -Name $_.Name -Type $_.Type -DisplayName $_.Name -OtherAttributes @ („Mail”=$_.mail; „proxyAddresses”=$_.proxyAddresses; „targetAddress”=$_.targetAddress; „mailNickname”=$_.mailNickname))

Co tu się dzieje? Rozważmy to po kawałku:

Import-CSV — ścieżka „C:\CSV\contacts_list.csv”- polecenie pobiera dane z pliku znajdującego się w ścieżce C:\CSV\contacts_list.csv

| ForEach-Object -proces (- i przekazuje dane do potoku przetwarzania, przy czym każda wartość jest przetwarzana osobno zgodnie z nazwami kolumn

Nowy obiekt ADObject- sam potok jest poleceniem tworzenia obiektu w AD (pomoc w PowerShellu poprzez wywołanie get-help new-adobject - full)

-Ścieżka „OU=PostContact,DC=domena,DC=korporacja,DC=lokal”- ścieżka, w której zostanie utworzony kontakt pocztowy. Można go obejrzeć otwierając AD i klikając na właściwości jednostki organizacyjnej (kontenera) oraz przeglądając ścieżkę w zakładce „Obiekt” i wykonując ją ponownie zgodnie z formatem z przykładu. Jeżeli usuniemy ten parametr, w sekcji Użytkownicy zostaną utworzone kontakty, jest to ścieżka domyślna.

-Nazwa $_.Nazwa -Typ $_.Typ -Nazwa wyświetlana $_.Nazwa - parametry obowiązkowe (nazwa i typ) i niezbyt obowiązkowe -
Wyświetlana nazwa. Muszą zostać stworzeni jako świadkowie, możesz użyć cyrylicy, możesz z literami łacińskimi. Chyba jest ograniczenie długości, nie pamiętam dokładnie - 64 znaki.

-OtherAttributes @("Mail"=$_.mail; "proxyAddresses"=$_.proxyAddresses; "targetAddress"=$_.targetAddress; "mailNickname"=$_.mailNickname))- najważniejsze. Adresy pocztowe nie można przekazać po prostu tak jak Nazwa i Typ. Adresy pocztowe są typu otheratributes - atrybuty dodatkowe, ale można je też przekazać z kolumn pliku .CSV. Nie zapomnij sprawdzić wszystkich symboli i nawiasów, na końcu powinny znajdować się 2 nawiasy.

3. Zapisz pliki i sprawdź ścieżki-C:\CSV - w pliku i w prawdziwym życiu)))
4. Otwórz PowerShell na kontrolerze domeny (kontroler nie powinien być typu ReadOnly!!!), wykonaj kolejno 2 polecenia:

Ustaw-ExecutionPolicy bez ograniczeń

moduł importu activedirectory

5. Wykonaj C:\CSV\create_contact.ps1
6. Oglądamy(nie zapomnij odświeżyć konsoli) w jednostce organizacyjnej OpublikujKontakt nowe kontakty e-mailowe.

I w końcu, kilka porad.
- Jeśli masz pełnoprawną wersję PowerShell, wywołanie z niej powershell_ise otworzy bardzo wygodny edytor skryptów z możliwością uruchomienia i innymi udogodnieniami.
- Pliki CSV muszą być w kodowaniu Unicode, jeśli masz ANSI, wystąpi błąd.
- Do kontaktu e-mail możesz dodać znacznie więcej kolumn, a tym samym atrybutów. Na przykład niektóre Exchange mogą wymagać atrybutu kontaktu, takiego jak LegacyExchangeDN. Nietrudno to rozpoznać - ręcznie tworzymy kontakt pocztowy w AD, spójrz na ten parametr w zakładce „Edytor atrybutów” (jeśli tej zakładki nie ma, włącz ją w konsoli w ten sposób: menu Widok \ Dodatkowe komponenty) . W związku z tym dodaj do pliku danych kolumnę starszeExchangeDN i wypełnij ją edytowane wartość skopiowana z nowo utworzonego kontaktu i w skrypcie po nim "mailNickname"=$_.mailNickname dodać
"legacyExchangeDN"=$_.legacyExchangeD N. Nie zapomnij o nawiasach.

autorytet 23 lutego 2014 o 04:47

Skrypt PowerShell do zaimportowania las Aktywny Katalog i tworzenie pliku z użytkownikami

Najpierw zainstalowałem i skonfigurowałem WS 2012R2 jako DC i po tym pojawiło się pytanie jak dodać do niego użytkowników. Miałem listę pracowników plik xls a potem zdecydowałem, aby nie zabijać ręcznie użytkowników, zoptymalizować to za pomocą PowerShell.

W Internecie jest wiele przykładów, ale nie bardzo pasowały one do mojego rozwiązania, niektóre były fragmentami kodu, inne w ogóle nie działały z WS2012R2, a jeszcze inne dodały użytkowników do określonych katalogów, a ja musiałem rozproszyć użytkowników na więcej niż 70 katalogów. Stanęliśmy także przed zadaniem jak zrobić plik CSV dla PowerShell zgodnie z jego standardami.

Przede wszystkim konieczne jest podzielenie pełnej nazwy na różne kolumny i okazało się, że MS Excel 2013 ma do tego dość ciekawe narzędzie o nazwie „Tekst według kolumn”, które znajduje się w zakładce DANE.

Następnie przyjęto format logowania użytkowników i zdecydowano, że będą to pierwsze litery imienia i patronimiki, a po podkreślać pełne nazwisko (na przykład: aa_petrov). Aby to zrobić, musiałem je transliterować za pomocą skryptu VB.

Skrypt Translit - skrypt dla Excela

Funkcja Translit(Txt jako ciąg) Jako ciąg Dim Rus Jako wariant Rus = Array("a", "b", "c", "d", "d", "f", "e", "g", " z”, „i”, „j”, „k”, _ „l”, „m”, „n”, „o”, „p”, „r”, „s”, „t”, „y " ", "f", "x", "ts", "ch", "sh", _ "sch", "b", "s", "b", "e", "yu", "i " , "A", "B", "C", "D", "D", "E", _ "E", "F", "Z", "I", "J", "K" , „L”, „M”, „N”, „O”, „P”, „R”, _ „S”, „T”, „U”, „F”, „X”, „C”, " Ch", "Sh", "Sh", "b", "s", "b", "e", "yu", "ya") Dim Eng Jako wariant Eng = Array("a", "b " , "v", "g", "d", "e", "jo", "zh", "z", "i", "j", _ "k", "l", "m" , "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", _ "sh", „ sch”, „”, „y”, „”, „e”, „yu”, „ya”, „A”, „B”, „V”, „G”, „D”, _ „E” , „Jo”, „Zh”, „Z”, „I”, „J”, „K”, „L”, „M”, „N”, „O”, „P”, „R”, _ „S”, „T”, „U”, „F”, „H”, „C”, „Ch”, „Sh”, „Sch”, „”, „Y”, „”, „E”, „ Yu”, „Ya”) Dla I = 1 Do Len(Txt) с = Mid(Txt, I, 1) flag = 0 Dla J = 0 do 65 Jeśli Rus(J) = с Następnie outchr = Eng(J) flag = 1 Wyjście na koniec Jeśli Dalej J Jeśli flaga Następnie outstr = outstr & outchr Else outstr = outstr & c Następny I Translit = outstr End Funkcja

Dodano także funkcję generowania danych logowania:

NISKI(LEWY(Przesunięty(LEWY(D2)))&LEWY(Przesunięty(LEWY(E2)))&"_"&Przesunięty(C2))

Hasła zostały wygenerowane przy użyciu frazy i zestawu losowych znaków:

="Habrhabr"&RANDBETWEEN(1000;9999)

Następnie zapisałem plik jako .csv z 6 nagłówkami Zaloguj sie; Hasło; Nazwisko; Imię; Drugie imię; jednostka organizacyjna; Stanowisko i zmieniłem kodowanie pliku na Unicode, ponieważ często występują problemy z ANSI.

Następnie napisałem następujący skrypt PS:

Moduł importu ActiveDirectory $Users = Import-Csv -Delimiter ";" -Path "C:\Users\Administrator\Desktop\user.csv" $allou = Get-ADOrganizationalUnit -Filter * -SearchBase "OU=Forest,DC=habr,DC=ru" foreach ($Użytkownik w $Users) ( $ ou = $allou | Where ($_.Name -eq $User.OU) if ($ou) ( $OU = $ou.DistinguishedName ) else ( $OU = "OU=Inne,DC=habr,DC=ru"<#Если каталог с таким именем не найден отправляем в OU other#>) $Password = $User.Password $Detailedname = $User.LastName + " " + $User.FirstName + " " + $User.MiddleName $UserFirstname = $User.FirstName $UserLastName = $User.LastName $JobTitle = $User .JobTitle $SAM= $User.Login + "@habr.ru" New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalName $SAM -DisplayName $Detailedname -GivenName $User.FirstName -Surname $User.LastName - Tytuł $JobTitle -AccountPassword (ConvertTo-SecureString -AsPlainText "H@brHabr" -Force) -Enabled $true -Path $OU )

Ten skrypt pozwala rozproszyć użytkowników po własnych katalogach i wysłać tych, którzy ich nie mają, do katalogu Inny.

Dziękuję za uwagę.

Tagi: powershell, Active Directory, Excel, CSV, serwer Windows 2008, serwer Windows 2008 r2, serwer Windows 2012, serwer Windows 2012r2,

autorytet 23 lutego 2014 o 04:47

Skrypt PowerShell do importowania do lasu Active Directory i tworzenia pliku z użytkownikami

  • PowerShell
  • Infrastruktura informatyczna

Najpierw zainstalowałem i skonfigurowałem WS 2012R2 jako DC i po tym pojawiło się pytanie jak dodać do niego użytkowników. Miałem listę pracowników w pliku xls i wtedy zdecydowałem, aby nie wpisywać użytkowników ręcznie, zoptymalizować ją za pomocą PowerShella.

W Internecie jest wiele przykładów, ale nie bardzo pasowały one do mojego rozwiązania, niektóre były fragmentami kodu, inne w ogóle nie działały z WS2012R2, a jeszcze inne dodały użytkowników do określonych katalogów, a ja musiałem rozproszyć użytkowników na więcej niż 70 katalogów. Stanęliśmy także przed zadaniem jak zrobić plik CSV dla PowerShell zgodnie z jego standardami.

Przede wszystkim konieczne jest podzielenie pełnej nazwy na różne kolumny i okazało się, że MS Excel 2013 ma do tego dość ciekawe narzędzie o nazwie „Tekst według kolumn”, które znajduje się w zakładce DANE.

Następnie przyjęto format loginów dla użytkowników i zdecydowano, że będą to pierwsze litery imienia i patronimiki, a po podkreśleniu pełne nazwisko (na przykład: aa_petrov). Aby to zrobić, musiałem je transliterować za pomocą skryptu VB.

Skrypt Translit - skrypt dla Excela

Funkcja Translit(Txt jako ciąg) Jako ciąg Dim Rus Jako wariant Rus = Array("a", "b", "c", "d", "d", "f", "e", "g", " z”, „i”, „j”, „k”, _ „l”, „m”, „n”, „o”, „p”, „r”, „s”, „t”, „y " ", "f", "x", "ts", "ch", "sh", _ "sch", "b", "s", "b", "e", "yu", "i " , "A", "B", "C", "D", "D", "E", _ "E", "F", "Z", "I", "J", "K" , „L”, „M”, „N”, „O”, „P”, „R”, _ „S”, „T”, „U”, „F”, „X”, „C”, " Ch", "Sh", "Sh", "b", "s", "b", "e", "yu", "ya") Dim Eng Jako wariant Eng = Array("a", "b " , "v", "g", "d", "e", "jo", "zh", "z", "i", "j", _ "k", "l", "m" , "n", "o", "p", "r", "s", "t", "u", "f", "h", "c", "ch", _ "sh", „ sch”, „”, „y”, „”, „e”, „yu”, „ya”, „A”, „B”, „V”, „G”, „D”, _ „E” , „Jo”, „Zh”, „Z”, „I”, „J”, „K”, „L”, „M”, „N”, „O”, „P”, „R”, _ „S”, „T”, „U”, „F”, „H”, „C”, „Ch”, „Sh”, „Sch”, „”, „Y”, „”, „E”, „ Yu”, „Ya”) Dla I = 1 Do Len(Txt) с = Mid(Txt, I, 1) flag = 0 Dla J = 0 do 65 Jeśli Rus(J) = с Następnie outchr = Eng(J) flag = 1 Wyjście na koniec Jeśli Dalej J Jeśli flaga Następnie outstr = outstr & outchr Else outstr = outstr & c Następny I Translit = outstr End Funkcja

Dodano także funkcję generowania danych logowania:

NISKI(LEWY(Przesunięty(LEWY(D2)))&LEWY(Przesunięty(LEWY(E2)))&"_"&Przesunięty(C2))

Hasła zostały wygenerowane przy użyciu frazy i zestawu losowych znaków:

="Habrhabr"&RANDBETWEEN(1000;9999)

Następnie zapisałem plik jako .csv z 6 nagłówkami Zaloguj sie; Hasło; Nazwisko; Imię; Drugie imię; jednostka organizacyjna; Stanowisko i zmieniłem kodowanie pliku na Unicode, ponieważ często występują problemy z ANSI.

Następnie napisałem następujący skrypt PS:

Moduł importu ActiveDirectory $Users = Import-Csv -Delimiter ";" -Path "C:\Users\Administrator\Desktop\user.csv" $allou = Get-ADOrganizationalUnit -Filter * -SearchBase "OU=Forest,DC=habr,DC=ru" foreach ($Użytkownik w $Users) ( $ ou = $allou | Where ($_.Name -eq $User.OU) if ($ou) ( $OU = $ou.DistinguishedName ) else ( $OU = "OU=Inne,DC=habr,DC=ru"<#Если каталог с таким именем не найден отправляем в OU other#>) $Password = $User.Password $Detailedname = $User.LastName + " " + $User.FirstName + " " + $User.MiddleName $UserFirstname = $User.FirstName $UserLastName = $User.LastName $JobTitle = $User .JobTitle $SAM= $User.Login + "@habr.ru" New-ADUser -Name $Detailedname -SamAccountName $User.Login -UserPrincipalName $SAM -DisplayName $Detailedname -GivenName $User.FirstName -Surname $User.LastName - Tytuł $JobTitle -AccountPassword (ConvertTo-SecureString -AsPlainText "H@brHabr" -Force) -Enabled $true -Path $OU )

Skrypt ten umożliwia rozproszenie użytkowników pomiędzy własnymi katalogami i wysłanie tych, którzy ich nie mają, do katalogu Inny.

Dziękuję za uwagę.

Tagi: powershell, Active Directory, Excel, CSV, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012r2,

Cześć wszystkim. Dzisiaj pokażę Ci jak możesz zautomatyzować dodawanie użytkowników do AcriveDirecotory za pomocą skryptu. Dane użytkownika pobierzemy z pliku CSV.

Możesz pobrać archiwum ze skryptem. W tym samym archiwum umieściłem instalator .net 4.5 i PowerShell 5.1 dla 2008R2.

Przykład mojego pliku CSV:

Imię i nazwisko;stanowisko;dział;numer pokoju;numer telefonu;e-mail;identyfikator
Iwanow Iwan Iwanowicz; reżyser; 76; 345; 123; ;00000001
Petrova Irina Petrovna;asystent laboratoryjny;77;367;124; ;00000002
Wasiliew Wasilij Wasiliewicz; menadżer; 78; 389; 125; ;00000003
Aleksandrow Aleksander Aleksandrowicz; zastępca Dyrektorzy;79;411;126; ;00000004
Siergiejew Siergiej Siergiejewicz;asystent laboratoryjny;80;433;127; ;00000005

W związku z tym wszystkie pola wprowadzimy do AD. Pełne imię i nazwisko zostanie podzielone na nazwisko, imię i nazwisko rodowe. Nasza nazwa użytkownika zostanie utworzona z pierwszej litery imienia i nazwiska, przetłumaczonej na transliterację.

Jeśli nazwa użytkownika już istnieje, pobieramy z niej 2 litery i tak dalej.

Zwróć uwagę na pole ID. Jest to potrzebne tylko w celu ustalenia, czy dodać nowego użytkownika, czy edytować istniejącego, jeśli pojawi się imiennik.

Jeżeli pojawi się rekord z istniejącym identyfikatorem, dane użytkownika zostaną zaktualizowane.

Ponadto, jeśli uruchomisz nasz skrypt z kluczem -del, użytkownicy obecni w pliku CSV zostaną usunięci z AD.

Skrypt testowałem na Windowsie 2008R2 z zainstalowanym powershellem 5.1, czyli powinien działać także na Windowsie 2012 i 2016.

Aby zainstalować PowerShell 5.1 w wersji 2008R2, należy na nim zainstalować co najmniej pierwszy dodatek Service Pack. A także.net 4.5. (Do archiwum dodałem instalator .net i powershell ze skryptem. SP1 dla Windows 2008R2 można pobrać z linku).

Aby Powershell mógł uruchomić skrypt, musisz uruchomić polecenie jako administrator:

Obejście Set-ExecutionPolicy

Zwróć uwagę na zmienne znajdujące się na początku skryptu, ustawiają one ścieżkę i nazwę pliku csv, hasło, które zostanie przypisane użytkownikom, a także nazwę domeny.

Tekst skryptu:

#Napisane dla serwisu https://www.mytechnote.ru #Aby skrypt działał musisz zaktualizować PowerShell, w tym celu #musisz najpierw zainstalować sp1 (https://www.microsoft.com/ru-ru /download/details.aspx?id =5842) #do serwera, jeśli nie jest jeszcze zainstalowany. #Next.net 4.5 (dotNetFX45_Full_setup) #Po czym należy zaktualizować PowerShell do wersji 5.1 (w PowerShell działającym jako administrator, wykonaj obejście Set-ExecutionPolicy i uruchom skrypt instalacyjny z archiwum powershell51.zip) #podczas uruchamiania skryptu, poweshell musi zostać uruchomiony jako administrator #po uruchomieniu bez klucza użytkownicy zostaną dodani i zaktualizowani #po uruchomieniu z kluczem -del użytkownicy zostaną usunięci ################## ############## ############################################################### ############## ############################################################### ############## ############################################################### ############# ################## moduł importu aktywny katalog #zmienne: #ścieżka do pliku CSV $pathToCSV=".\ f_151592b94af8a58e.csv" #hasło, które zostanie nadane nowym użytkownikom $defpass= "As12345^" #określ naszą domenę $domain="@test.loc" #funkcja transliteracji funkcja global:Translit ( param($inString) $Translit = @ („a” = „a” „A” = „a” „ b” = „b” „B” = „b” „c” = „v” „В” = „v” „g” = „g” "G" = "g" "d" = "d" "D " = "d" "e" = "e" "E" = "e" "ё" = "yo" "Ё" = "eo" " zh" = "zh" "Zh" = "zh" "z" = "z" "Z" = "z" "i" = "i" "I" = "i" "th" = "j" "Y " = "j" "k" = "k" "K" = "k" "l" = "l" "L" = "l" "m" = "m" "M" = "m" "n" = „n” „N” = „n” „o” = „ o” „O” = „o” „p” = „p” „P” = „p” „p” = „r” „P” = „r” „s” = „s” „C” = „s” „t” = „t” „T” = „t” „y” = „u” „U” = „u” „f” = „ f" "F" = "f" "x" = "h" "X" = "h" "ts" = "ts" "C" = "ts" "ch" = "ch" "Ch" = "ch " "sh" = "sh" "Ш" = "sh" ь" = "sch" "Ш" = "sch" "ъ" = "" "ъ" = "" "ы" = "y" "ы" = „y” „ь” = „” „ь” = „ „ „e” = „e” „E” = „e” „yu” = „yu” „Yu” = „yu” „ya” = „ya” " "I" = "ya") $outCHR="" foreach ($CHR w $inCHR = $inString.ToCharArray()) ( if ($Translit[$CHR] -cne $Null) ($outCHR += $Translit [$CHR]) else ($outCHR += $CHR) ) Zapis-wyjście $outCHR) #importuj plik csv do zmiennej $csv=import-Csv $pathToCSV -Encoding OEM -Delimiter ";" #przeanalizuj zmienną foreach ($użytkownik w $csv) ( #put in wartości zmienne z pliku csv $fio="$($użytkownik.pełna nazwa)" $nazwisko=$fio.split(" ") $imie=$fio.split(" ") $snazwa=$fio.split(" ") $ dolzhnost ="$($użytkownik.pozycja)" $depart="$($użytkownik.department)" $room="$($użytkownik.numer pokoju")" $phone="$($użytkownik."numer telefonu " )" $mail="$($użytkownik.email")" $id=$($user.identifier") #przetłumacz imię i nazwisko na translit $transName=Translit($nazwa) $transSurname=Translit( $ nazwisko) #usuń pierwsze litery imienia $shortName="" #dodaj litery do zmiennej krótkiej nazwy (zmiennej do tworzenia loginu) dla ($i=1; $i -lt $transName.length; $i++) ( #w zależności od liczby przejść pętli dodaj i litery $shortName=$transName.substring(0,$i) #dodaj litery imienia do nazwiska $userName=$shortName+$transSurname spróbuj ( #sprawdź, czy istnieje użytkownik $user=Get-ADUser "$userName" ) catch ( $user=$false ) #if użytkownik istnieje if ($user) ( #get id from AD $IDinAD=Get-ADUser $userName -Properties komentarz | wybierz komentarz | ft -HideTableHeaders | out-string #jeśli numer ubezpieczenia z AD pasuje do liczby z csv if ($IDinAD -match $id) ( #jeśli pomyliliśmy skrypt bez argumentów if ($args -eq "" -or !$args) ( #update danych użytkownika Set-ADUser -Identity "$userName" -Surname "$surname" -DisplayName "$surname $name $sname" ` -OfficePhone "$phone" -EmailAddress "$mail" -Department "$depart" - Tytuł "$dolzhnost" ` -UserPrincipalName "$userName$domain" -GivenName "$name" -Office "$room" -enabled $true -SamAccountName "$userName" #прерываем цикл break } #если запустили скрипт с аргументом -del if ($args -eq "-del") { #удаляем пользователя Remove-ADUser -Identity $userName -Confirm:$false } } #если id не совпадают, и найдено имя пользователя, идем к следующему шагу цикла else { } } #если пользователя не существует else { #и запустили без аргументов if ($args -eq "" -or !$args) { try { $users=get-aduser -Filter "*" -Properties comment | select comment, name } catch { $users=$false } if ($users) { foreach ($user in $users) { #если у какого то пользователя есть id из csv, обновляем его if ($user.comment -match $id) { $uname=$user.name.toString() $distName=Get-ADObject -Filter "name -eq $uname" Set-ADUser -Identity "$uname" -Surname "$surname" -DisplayName "$surname $name $sname" ` -OfficePhone "$phone" -EmailAddress "$mail" -Department "$depart" -Title "$dolzhnost" ` -UserPrincipalName "$userName$domain" -GivenName "$name" -Office "$room" -enabled $true ` -SamAccountName "$userName" Rename-ADObject $distName.DistinguishedName -NewName $userName } } } try { #добавляем пользователя и прерываем цикл New-ADUser -Name "$userName" -Surname "$surname" -DisplayName "$surname $name $sname" ` -OfficePhone "$phone" -EmailAddress "$mail" -Department "$depart" -Title "$dolzhnost" ` -UserPrincipalName "$userName$domain" -GivenName "$name" -Office "$room" -OtherAttributes @{comment="$id"} ` -AccountPassword (ConvertTo-SecureString -AsPlainText "$defpass" -force) -enabled $true ` -ChangePasswordAtLogon $true -SamAccountName "$userName" -erroraction "silentlycontinue" } catch { } break } } } }!}