2016-04-28 22 views
0

Ich habe ein PowerShell-Skript erstellt, das funktioniert gut, für die meisten Male. Zuerst erstellt das Skript ein Benutzerkonto. Unmittelbar danach (nach einem "read-host" muss der Benutzer eine Mailbox "eingegeben haben) erstellt er ein Postfach. Wenn dies erledigt ist, werden einige (Abwesenheits) -Einstellungen auf das Postfach angewendet.Powershell, erstellt Benutzer, wollte Postfach erstellen, kann aber keinen Benutzer in AD finden

Aus irgendeinem Grund sieht es so aus, als wäre das Skript zu schnell, es endet oft mit einem Fehler, der besagt, dass der Benutzer nicht gefunden werden kann, und zwar direkt nach dem Mailbox-Erstellungsteil, wenn ich einige Einstellungen anwenden möchte einige Minuten zwischen der Benutzererstellung und Mailbox-Erzeugungsteil, die Dinge gehen in Ordnung.

-Code

# code here that creates user account. 
# read-host "does user need to have a mailbox"? 

Enable-Mailbox -identity $sam -database $maildb 

# here I get Enable-Mailbox outputs - Name, Alias etc 

Get-Mailbox -identity $sam | Set-Mailbox -ExternalOOFOptions InternalOnly 

Oft erhalte ich die Fehlermeldung:

Error: Couldn't find object in OU

Ich will nur das Skript alles zu schaffen, ohne mich warten zu müssen. Gibt es einen Weg, dass ich das erreichen kann?

Ich führe das Skript von einer Arbeitsstation aus und importiere das Active-Directory und tausche PowerShell-Module.

+0

Was Befehle werden Sie in Ihrem Skript verwenden? Vielleicht würde es besser sein, das Cmdlet "New-Mailbox" zu verwenden. Siehe [hier] (https://technet.microsoft.com/en-us/library/aa997663%28v=exchg.160%29.aspx). Fügen Sie einfach eine Logik hinzu, um die Erstellung des Benutzerkontos und des Postfachs zu verzögern, bis sie antworten, ob das Konto ein Postfach haben sollte. Wenn dies der Fall ist, erstellen Sie es mit dem Befehl "New-Mailbox", andernfalls verwenden Sie die andere Methode. – ChadSikorra

+0

Hallo TschadSikorra, danke für die Antwort! Nachdem der Benutzer erstellt wurde, verwende ich: Enable-Mailbox -identity $ sam-database $ maildb Das Skript gibt mir einige Ausgaben, wie Name, Alias ​​usw. So wurde das Postfach erstellt. Danach ist der nächste Befehl: Get-Mailbox -identity $ sam | Set-Mailbox -ExternalOOFOptions InternalOnly Dies ist der Punkt, wo die meisten Male bekomme ich einen Fehler wie: Fehler: Konnte Objekt in OU nicht finden – Mesjoggah

+1

Ich denke, Sie wäre besser dran erstellen den Benutzer und Mailbox gleichzeitig mit der 'New-Mailbox' Befehl, für den es gedacht war. Auf diese Weise müssen Sie sich keine Gedanken über etwas machen, das möglicherweise nicht sofort synchronisiert wird. Verwenden Sie nur "New-ADUser", wenn Sie sicher sind, dass sie kein Postfach haben. Auf diese Weise können Sie Ausgaben von 'New-Mailbox' speichern und den Befehl 'Set-Mailbox' direkt aufrufen. – ChadSikorra

Antwort

0

Versuchen Sie, das Cmdlet Start-Sleep vor dem Cmdlet hinzuzufügen, bei dem ein Fehler auftritt. Fügen Sie eine angemessene Verzögerung hinzu.

z.

Start-Sleep -s 15 

Weitere Informationen zu Cmdlets hier: 15 Sekunden Verzögerung Verwendung hinzufügen Start-Sleep

oder Sie können Code unten versuchen:

do 
{ 
    Start-Sleep -s 10 
    $mailbox = Get-Mailbox -identity $sam 
} 
while($mailbox -eq $null) 

$mailbox | Set-Mailbox -ExternalOOFOptions InternalOnly