Tilføjelse af brugere til Active Directory fra en CSV-fil ved hjælp af et PowerShell-script. PowerShell-script til at importere til Active Directory-skov og oprette en fil med brugere

Igen var der brug for det, og INTET var klar. Alle skriver, hvordan man får kontakter ved hjælp af MS Exchange 2007 \ 2010 konsollen. Men der er situationer - domænecontrolleren er Win2008, og Exchange er 2003. Det er et galehus, men det sker, hvad at gøre... Og nu er det nødvendigt at oprette cirka 6.000 kontakter der. Det er ikke svært blot at oprette en kontakt, men at registrere de attributter, som Exchange kræver for at arbejde med kontakter, er en anden opgave.
Så vi er nødt til at skabe en bunke mail kontakter ved hjælp af powershell v. 2.0.1.1 ved hjælp af AD-modulet. Jeg vil prøve, som sædvanligt, at beskrive det på det enkleste sprog, forståeligt for den mest uerfarne administrator.

1. Opret en fil i MS Excel med navnet contacts_list, gem den i CSV-format langs stien C:\CSV, og navngiv kolonnerne i filen sådan:

Navn Post mailKælenavn Type proxy-adresser måladresse

i princippet er disse parametre nok til at skabe en fuldgyldig kontakt, og Exchange ser den og kan arbejde med den, uanset hvilken OU-mappe i din AD du har den.
Hvilke specifikke felter i kontaktobjektegenskaberne afspejler disse kolonner?
Her er forklaringerne, som et tegn)))

Kolonneparameter - Navn i ADSI Attribut Editor (forklaring) - Russisk-sproget betegnelse på kontaktejendomme

Navn - CN (kanonisk navn på objektet) - Navn
Mail - Mail ( E-mail) - E-mail
mailNickname - mailNickname (Exchange alias, alias) - vises kun i attributeditoren
Type - ObjectClass (objektklasse (type)) - vises kun i attributeditoren
proxyAddresses - proxyAddresses (ekstern e-mailadresse i forhold til domænet i SMTP-format: [e-mail beskyttet]) - kun synlig i attributeditoren
targetAddress - targetAddress (ekstern e-mailadresse i forhold til domænet i SMTP-format: [e-mail beskyttet]) - kun synlig i attributeditoren
Udfyld f.eks. kolonnerne

Navn Post mailKælenavn Type proxy-adresser måladresse
Vasiliy Terkin [e-mail beskyttet] Partners_Salg_0001 kontakt SMTP: [e-mail beskyttet] SMTP: [e-mail beskyttet]

Bemærk:
mailNickname bør afspejle medlemskab i enhver mailinggruppe, og det er bedre, hvis det har det serienummer. Jeg stødte på fejl, da alle kontakter havde det samme mailKaldenavn, og fejlene var ubehagelige og mærkelige.
proxyAddresses, targetAddress skal være i det angivne SMTP-format: [e-mail beskyttet], ellers vil Exchange ikke forstå kontakten og generere en fejl om, at formatet er forkert.

2. Opret en fil med create_contact og extension ps1 og kopier følgende kode dertil:

Import-CSV -sti "C:\CSV\kontaktliste.csv" | ForEach-Object -proces (New-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"=$_.mailKaldenavn))

Hvad sker der her? Lad os tage det stykke for stykke:

Import-CSV -sti "C:\CSV\kontaktliste.csv"- kommandoen tager data fra en fil placeret på stien C:\CSV\contacts_list.csv

| ForEach-Object -proces (- og sender dataene ind i behandlingspipelinen, hvor hver værdi behandles separat i henhold til kolonnenavnene

Nyt-ADObjekt- selve pipelinen er en kommando til oprettelse af et objekt i AD (hjælp i powershell ved at kalde get-help new-adobject - fuld)

-Sti "OU=PostContact,DC=domain,DC=corp,DC=loc al"- stien, hvor mailkontakten oprettes. Du kan se den ved at åbne AD og klikke på egenskaberne for OU'en (beholderen) og se stien på fanen "Objekt" og gentage den i overensstemmelse med formatet i eksemplet. Hvis denne parameter fjernes, oprettes kontakter i Brugere, dette er standardstien.

-Name $_.Name -Type $_.Type -DisplayName $_.Name - obligatoriske parametre (navn og type) og ikke særlig obligatoriske -
Vist navn. De skal oprettes som vidner, du kan bruge kyrillisk, du kan med latinske bogstaver. Der er en længdegrænse, tror jeg, jeg husker det ikke præcist - 64 tegn.

-OtherAttributes @("Mail"=$_.mail; "proxyAddresses"=$_.proxyAddresses; "targetAddress"=$_.targetAddress; "mailNickname"=$_.mailKaldenavn))- den vigtigste. Postadresser kan ikke videregives blot som Navn og Type. Mailadresser er af typen andre attributter - yderligere attributter, men de kan også sendes fra kolonnerne i .CSV-filen. Glem ikke at tjekke alle symboler og parenteser, der skal være 2 parenteser til sidst.

3. Gem filer og kontroller stier-C:\CSV - i fil og i det virkelige liv)))
4. Åbn powershell på domænecontrolleren (controlleren bør ikke være af typen ReadOnly!!!), udfør 2 kommandoer i rækkefølge:

Set-ExecutionPolicy Ubegrænset

import-modul activedirectory

5. Udfør C:\CSV\create_contact.ps1
6. Vi holder øje(glem ikke at opdatere konsollen) i OU Postkontakt nye e-mail-kontakter.

Og endelig, nogle tips.
- Hvis du har en fuldgyldig version af powershell, så vil et kalde powershell_ise fra den åbne en meget praktisk script-editor med mulighed for at starte og andre faciliteter.
- CSV-filer skal være i Unicode-kodning, hvis du har ANSI, vil der være en fejl.
- Du kan tilføje mange flere kolonner og dermed attributter til en e-mail-kontakt. For eksempel kan nogle Exchange kræve en kontaktattribut, såsom legacyExchangeDN. Det er ikke svært at genkende det - vi opretter en mailkontakt i AD manuelt, se på denne parameter i "Attribut Editor"-fanen (hvis denne fane ikke er der, slå den til i konsollen som denne: menu Vis \ Yderligere komponenter) . Føj derfor legacyExchangeDN-kolonnen til datafilen og udfyld den redigeret værdi kopieret fra den nyoprettede kontakt, og i scriptet efter "mailNickname"=$_.mailKaldenavn tilføje
"legacyExchangeDN"=$_.legacyExchangeD N. Glem ikke parenteserne.

myndighed 23. februar 2014 kl. 04:47

PowerShell-script at importere til skov Aktiv Directory og oprettelse af en fil med brugere

Først installerede og konfigurerede jeg WS 2012R2 som DC, og derefter opstod spørgsmålet om, hvordan man tilføjer brugere til det. Jeg havde en liste over ansatte i xls-fil og så besluttede jeg, for ikke at dræbe brugere manuelt, at optimere dette ved hjælp af PowerShell.

Der er mange eksempler på internettet, men de var ikke særlig velegnede til min løsning, nogle var stykker kode, andre virkede slet ikke med WS2012R2, og andre tilføjede brugere til specifikke mapper, og jeg skulle sprede brugerne i mere end 70 mapper. Vi stod også over for opgaven med at lave en CSV-fil til PowerShell i overensstemmelse med dens standarder.

Først og fremmest er det nødvendigt at opdele det fulde navn i forskellige kolonner, og det viste sig, at MS Excel 2013 har et ret interessant værktøj til dette kaldet "Text by Columns", som er placeret i DATA-fanen.

Herefter blev loginformatet for brugere taget i brug, og det blev besluttet, at disse skulle være de første bogstaver i fornavnet og patronymet og efter understregning fulde efternavn (for eksempel: aa_petrov). For at gøre dette var jeg nødt til at translitterere dem ved hjælp af et VB-script.

Translit script - script til Excel

Funktion Translit(Txt As String) As String Dim Rus As Variant 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 As Variant 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") For I = 1 Til Len(Txt) с = Mid(Txt, I, 1) flag = 0 For J = 0 Til 65 Hvis Rus(J) = с Så outchr = Eng(J) flag = 1 Exit For End If Next J If flag Then outstr = outstr & outchr Else outstr = outstr & c Next I Translit = outstr End Funktion

Og tilføjede også en funktion til at generere login-data:

LOW(LEFT(Translit(LEFT(D2)))&LEFT(Translit(LEFT(E2)))&"_"&Translit(C2))

Adgangskoder blev genereret ved hjælp af en sætning og et sæt tilfældige tegn:

="Habrhabr"&RANDBETWEEN(1000;9999)

Derefter gemte jeg filen som .csv med 6 overskrifter Log på; Adgangskode; Efternavn; Fornavn; Mellemnavn; OU; Jobtitel og ændrede filkodningen til Unicode, da der ofte er problemer med ANSI.

Så skrev jeg følgende PS-script:

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

Dette script giver dig mulighed for at sprede brugere på tværs af dine egne mapper og sende dem, der ikke har dem, til biblioteket Andet.

Tak for din opmærksomhed.

Tags: powershell, active directory, excel, csv, windows server 2008, windows server 2008 r2, windows server 2012, windows server 2012r2,

myndighed 23. februar 2014 kl. 04:47

PowerShell-script til at importere til Active Directory-skov og oprette en fil med brugere

  • PowerShell
  • IT infrastruktur

Først installerede og konfigurerede jeg WS 2012R2 som DC, og derefter opstod spørgsmålet om, hvordan man tilføjer brugere til det. Jeg havde en liste over medarbejdere i en xls-fil, og så besluttede jeg, for ikke at indtaste brugere manuelt, at optimere den ved hjælp af PowerShell.

Der er mange eksempler på internettet, men de var ikke særlig velegnede til min løsning, nogle var stykker kode, andre virkede slet ikke med WS2012R2, og andre tilføjede brugere til specifikke mapper, og jeg skulle sprede brugerne i mere end 70 mapper. Vi stod også over for opgaven med at lave en CSV-fil til PowerShell i overensstemmelse med dens standarder.

Først og fremmest er det nødvendigt at opdele det fulde navn i forskellige kolonner, og det viste sig, at MS Excel 2013 har et ret interessant værktøj til dette kaldet "Text by Columns", som er placeret i DATA-fanen.

Herefter blev formatet for logins for brugere vedtaget, og det blev besluttet, at disse skulle være de første bogstaver i fornavnet og patronymet og efter understregningen det fulde efternavn (for eksempel: aa_petrov). For at gøre dette var jeg nødt til at translitterere dem ved hjælp af et VB-script.

Translit script - script til Excel

Funktion Translit(Txt As String) As String Dim Rus As Variant 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 As Variant 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") For I = 1 Til Len(Txt) с = Mid(Txt, I, 1) flag = 0 For J = 0 Til 65 Hvis Rus(J) = с Så outchr = Eng(J) flag = 1 Exit For End If Next J If flag Then outstr = outstr & outchr Else outstr = outstr & c Next I Translit = outstr End Funktion

Og tilføjede også en funktion til at generere login-data:

LOW(LEFT(Translit(LEFT(D2)))&LEFT(Translit(LEFT(E2)))&"_"&Translit(C2))

Adgangskoder blev genereret ved hjælp af en sætning og et sæt tilfældige tegn:

="Habrhabr"&RANDBETWEEN(1000;9999)

Derefter gemte jeg filen som .csv med 6 overskrifter Log på; Adgangskode; Efternavn; Fornavn; Mellemnavn; OU; Jobtitel og ændrede filkodningen til Unicode, da der ofte er problemer med ANSI.

Så skrev jeg følgende PS-script:

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

Dette script giver dig mulighed for at sprede brugere på tværs af dine egne mapper og sende dem, der ikke har dem, til biblioteket Andet.

Tak for din opmærksomhed.

Tags: powershell, active directory, excel, csv, windows server 2008, windows server 2008 r2, windows server 2012, windows server 2012r2,

Hej alle. I dag vil jeg vise dig, hvordan du kan automatisere tilføjelse af brugere til AcriveDirecotory ved hjælp af et script. Vi tager brugerdata fra en CSV-fil.

Du kan downloade arkivet med scriptet. I det samme arkiv lagde jeg .net 4.5 installationsprogrammet og powershell 5.1 til 2008R2.

Eksempel på min CSV-fil:

Fulde navn; stilling; afdeling; værelsesnummer; telefonnummer; e-mail; identifikator
Ivanov Ivan Ivanovich; direktør; 76; 345; 123; ;00000001
Petrova Irina Petrovna;laboratorieassistent;77;367;124; ;00000002
Vasiliev Vasily Vasilievich; manager; 78; 389; 125; ;00000003
Alexandrov Alexander Alexandrovich; stedfortræder Direktører;79;411;126; ;00000004
Sergeev Sergey Sergeevich;laboratorieassistent;80;433;127; ;00000005

Derfor vil vi indtaste alle felter i AD. Fulde navn vil blive opdelt i efternavn, fornavn og patronym. Vores brugernavn vil blive dannet ud fra det første bogstav i for- og efternavnet, oversat til translitteration.

Hvis brugernavnet allerede eksisterer, tager vi 2 bogstaver fra navnet og så videre.

Vær opmærksom på ID-feltet. Det er bare nødvendigt for at afgøre, om der skal tilføjes en ny bruger eller redigere en eksisterende, hvis en navnebror dukker op.

Hvis der vises en post med en eksisterende identifikator, opdateres brugerdataene.

Når vi kører vores script med -del-tasten, vil de brugere, der er til stede i CSV-filen, blive slettet fra AD.

Jeg testede scriptet på Windows 2008R2 med powershell 5.1 installeret, dvs. det skulle også fungere på Windows 2012 og 2016.

For at installere PowerShell 5.1 på 2008R2 skal mindst den første servicepakke være installeret på den. Og også.net 4.5. (Jeg tilføjede .net og powershell installationsprogrammet til arkivet med scriptet. Du kan downloade SP1 til Windows 2008R2 fra linket).

For at Powershell kan køre scriptet, skal du køre kommandoen som administrator:

Set-ExecutionPolicy bypass

Vær opmærksom på variablerne i begyndelsen af ​​scriptet; de angiver stien og navnet på csv-filen, adgangskoden, der vil blive tildelt brugerne, samt domænenavnet.

Script tekst:

#Skrevet til webstedet https://www.mytechnote.ru #For at scriptet skal fungere, skal du opdatere powershell, til dette #skal du først installere sp1 (https://www.microsoft.com/ru-ru) /download/details.aspx?id =5842) #til serveren, hvis den ikke allerede er installeret. #Next.net 4.5 (dotNetFX45_Full_setup) #Herefter skal du opdatere powershell til version 5.1 (i powershell, der kører som administrator, udfør Set-ExecutionPolicy bypass, og kør installationsscriptet fra powershell51.zip-arkivet) #når du kører scriptet, poweshell skal køres som administrator #når den startes uden en nøgle, brugere tilføjes og opdateres #når de startes med -del-nøglen, vil brugere blive slettet ################## ############ #################################### ############ #################################### ############ #################################### ############ ################# import-modul activedirectory #variables: #sti til CSV-filen $pathToCSV=".\ f_151592b94af8a58e.csv" #adgangskode, der vil blive givet til nye brugere $defpass= "As12345^" #specificér vores domæne $domain="@test.loc" #translitterationsfunktion funktion 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" = "ja " "I" = "ya") $outCHR="" foreach ($CHR i $inCHR = $inString.ToCharArray()) ( if ($Translit[$CHR] -cne $Null) ($outCHR += $Translit [$CHR]) else ($outCHR += $CHR) ) Write-Output $outCHR) #importer csv-filen til variablen $csv=import-Csv $pathToCSV -Encoding OEM -Delimiter ";" #parse variablen foreach ($user i $csv) ( #put in variable værdier fra csv-fil $fio="$($bruger.fuldt navn)" $efternavn=$fio.split(" ") $navn=$fio.split(" ") $sname=$fio.split(" ") $ dolzhnost ="$($user.position)" $depart="$($user.department)" $room="$($user."rumsnummer")" $phone="$($user."telefonnummer " )" $mail="$($user."email")" $id=$($user."identifier") #translate for- og efternavn til translit $transName=Translit($name) $transSurname=Translit( $ efternavn) #ryd de første bogstaver i navnet $shortName="" #tilføj bogstaver til shortname-variablen (variabel til oprettelse af et login) for ($i=1; $i -lt $transName.length; $i++) ( #afhængigt af antallet af gennemløb, tilføj i-bogstaver $shortName=$transName.substring(0,$i) #add fornavnsbogstaver til efternavnet $userName=$shortName+$transSurname prøv ( #tjek om der er en bruger $user=Get-ADUser "$userName" ) catch ( $user=$false ) #if user exist if ($user) ( #get id from AD $IDinAD=Get-ADUser $userName -Properties comment | select comment | ft -HideTableHeaders | out-string #if forsikringsnummer fra AD matchede nummeret fra csv if ($IDinAD -match $id) ( #if vi rodede scriptet til uden argumenter if ($args -eq "" -eller !$args) ( #update brugerdata Set-ADUser -Identitet "$userName" -Efternavn "$surname" -DisplayName "$surname $name $sname" ` -OfficePhone "$phone" -E-mailadresse "$mail" -Afdeling "$depart" - Titel "$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 } } } }!}