holzwurmch
Goto Top

Powershell für Exchange und DC

Hallo zusammen

ich hab da ein Script um neue AD User zu erstellen. Mit dem Script mach ich gleichzeitig auch das Postfach und setzte diverse AD Felder für die Verwendung von Teams usw.
Das Problem ist nun, nachdem der User in der AD angelegt wurde, kann ich nicht direkt anschliessend eine Mailbox eröffnen, sonst erhalte ich eine Fehlermeldung, das der User nicht existiert. Hab mir nun eine Schleife eingebaut, die 10 Sekunden dauert. Danach wird der User dann auch gefunden und das Postfach wird angelegt.
Nach diesem Schritt muss ich aber wiederum fast 30 Sekunden warten, bis ich die Mailadresse auslesen kann.

Gibt es eine Möglichkeit den Befehl abzusetzen, aber das dieser Befehl dann solange auf ein Resultat wartet bis dieses positiv ausfällt?
Oder gibt es da gänzlich andere Möglichkeiten die sicherstellen, das die Befehle korrekt umgesetzt und synchronisiert wurden?

Besten Dank
Holzwurm


PS: Konkret mein Script:

New-ADUser `
-SamAccountName $Username `
-UserPrincipalName "$Firstname.$Lastname@$UPNname" `
-Name "$Lastname $Firstname" `
-GivenName $Firstname `
-Surname $Lastname `
-Enabled $True `
-ChangePasswordAtLogon $True `
-DisplayName "$Lastname $Firstname " `
-Department $Department `
-Path $OU -AccountPassword (convertto-securestring $Password -AsPlainText -Force) `
-HomePage "$homepage" `
-StreetAddress "$Strasse" `
-city "$Ort" `
-State "xy" `
-Country "CH" `
-company "$Firma" `
-scriptPath "logmein.bat" `
-homedirectory "$homedirpath$Username" `
-homeDrive "$homedirdrive" `
-OfficePhone "$usertelephone" `
-PostalCode "$PLZ" `
-Server $DomainConti


start-countdown 10

Get-User -Identity $username -DomainController $DomainConti | Enable-Mailbox -Database "Ex2016MDB"

start-countdown 30

Write-Host "Stufe 5 - Postfacheinstellungen werden vorgenommen"
Set-MailboxRegionalConfiguration -Identity $username -Language de-CH -DateFormat "dd.MM.yyyy" -TimeFormat "HH:mm" -TimeZone "W. Europe Standard Time" -LocalizeDefaultFolderName

Content-Key: 661837

Url: https://administrator.de/contentid/661837

Printed on: April 26, 2024 at 03:04 o'clock

Member: erikro
erikro Mar 12, 2021 updated at 13:45:43 (UTC)
Goto Top
Moin,

bitte die code-Tags nutzen. Sieht hübscher aus. face-wink

Ich würde das mit einer rekursiven Funktion lösen:

function enable-usermb {

    PARAM(

        $user,
        $dc

   )
   try {

        Get-User -Identity $user -DomainController $dc -erroraction continue | Enable-Mailbox -Database "Ex2016MDB" -erroraction continue  

    }
    catch {

        start-sleep -s 1
        enable-usermb -user $user -dc $dc

    }

}

Beim zweiten Befehl, der nicht sofort erfolgreich ist, entsprechend. Evtl. noch einen Zähler mit aufnehmen, damit das nicht endlos läuft, wenn es mal aus anderen Gründen schief läuft.

Liebe Grüße

Erik
Member: em-pie
em-pie Mar 12, 2021 at 19:32:43 (UTC)
Goto Top
Moin,

hast du mal überlegt, den User direkt am Exchange anzulegen, anstatt ihn erst am DC anzulegen, zu warten und dann eine Mailbox hinzuzufügen?
https://docs.microsoft.com/en-us/exchange/recipients/create-user-mailbox ...


Zudem bin ich jetzt kein Powershell-Profi (fange gerade gaaanz langsam damit an), aber mit nem Pipe kann man doch sicherlich den User anlegen und direkt deine Set-MailboxRegionalConfiguration abfrühstücken!?

Gruß
em-pie
Member: Xaero1982
Xaero1982 Mar 12, 2021 at 20:28:43 (UTC)
Goto Top
Nabend,

Du gehst das falsch an. Genau andersrum wäre der Weg.

Exchangepostfach erstellen und AD Konto anpassen.
Dazu benutzt du die Exchange Powershell.

Wie Kollege @em-pie schon verlinkt hat.

Grüße
Member: HolzwurmCH
HolzwurmCH Mar 15, 2021 updated at 15:06:51 (UTC)
Goto Top
Danke für den Tipp!
Hab nun diverse Dinge ausprobiert.
der Script läuft nun auch ohne Kunstpause durch! (Update stimmt schon wieder nicht mehr...)

Set-Aduser ist deutsch gesagt ein ###!,
Manche Attribute muss ich mit -replace abfüllen, und andere kann ich einfach setzen
		Set-ADUser -identity $Username -replace @{Department="$Department"} -Server $DomainConti  
		Set-ADUser -identity $Username -replace @{Company="$Firma"} -Server $DomainConti  
		Set-ADUser -identity $Username -replace @{StreetAddress="$Strasse"} -Server $DomainConti  
		Set-ADUser -identity $Username -replace @{PostalCode="$PLZ"} -Server $DomainConti  
		Write-Host "Schritt 2.1 - Attribute werden gesetzt"  
		Set-ADUser -identity $Username -replace @{scriptPath="login.bat"} -Server $DomainConti  
		Set-ADUser -identity $Username -replace @{homedirectory="$homedirpath$Username"} -Server $DomainConti  
		Set-ADUser -identity $Username -replace @{homeDrive="$homedirdrive"} -Server $DomainConti  
		#Set-ADUser -identity $Username -replace @{OfficePhone="$usertelephone"} -Server $DomainConti 

		Write-Host "Schritt 2.2 - Attribute werden gesetzt"  
		Set-ADUser -identity $Username -state "VS" -Server $DomainConti  
		Set-ADUser -identity $Username -Country "CH" -Server $DomainConti  
		Set-ADUser -identity $Username -HomePage "$homepage" -Server $DomainConti  
		Set-ADUser -identity $Username -city "$Ort" -Server $DomainConti  


Das Feld OfficePhone kann ich gar nicht setzten, weder auf die eine noch die andere Variante
Ebenso ChangePasswordAtLogon und Enabled


Und dann noch dies:
Leider werden durch das setzten des Feldes Company die Policys nicht neu ausgeführt, da wir für jede Firma andere Mailadressen verwenden.
Habe drum die beiden Zeilen hier eingefügt, damit die Policy neu ausgeführt wird.

Update-EmailAddressPolicy -Identity "adresse1.ch"  
Update-EmailAddressPolicy -Identity "adresse2.com"  

Leider funktioniert das wiederum nur, wenn ich davor (richtig erraten) 30 Sekunden warte... Ausserdem kann die Policy so nicht auf einen einzelnen User angewendet werden, so das nun immer alle User durchgeschaut werden.

Das Script braucht dadurch nun fast länger als vorhin face-smile

Danke bis dahin!
Holzwurm