2016-04-28 1 views
0

J'ai créé un script PowerShell qui fonctionne bien, la plupart du temps. Le script crée d'abord un compte d'utilisateur. Immédiatement après, (après un "read-host" l'utilisateur a besoin d'une entrée "mailbox"), il crée une boîte aux lettres.Lorsque c'est fini, certains paramètres (Out of Office) sont appliqués à la boîte aux lettres. Pour une raison quelconque, il semble que le script est trop rapide, il se termine souvent par un échec, disant que l'utilisateur est introuvable, il arrive juste après la création de la boîte aux lettres, quand je veux appliquer quelques paramètres. quelques minutes entre la création d'utilisateur et boîte aux lettres une partie de la création, les choses vont bien.Powershell, utilisateur créé, voulait créer une boîte aux lettres, mais ne trouve pas l'utilisateur dans l'AD

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 

Souvent, je reçois l'erreur:

Error: Couldn't find object in OU

Je veux simplement que le script tout créer sans avoir à me attendre. Y at-il un moyen que je puisse accomplir cela? J'exécute le script à partir d'un poste de travail et j'importe les modules PowerShell d'annuaire actif et d'échange.

+0

Quelles commandes utilisez-vous dans votre script? Peut-être que cela fonctionnerait mieux d'utiliser la cmdlet 'New-Mailbox'. Voir [ici] (https://technet.microsoft.com/en-us/library/aa997663%28v=exchg.160%29.aspx). Il suffit d'ajouter une logique pour retarder la création du compte utilisateur et de la boîte aux lettres jusqu'à ce qu'ils répondent si le compte doit avoir une boîte aux lettres. Si c'est le cas, créez-le avec la commande 'New-Mailbox', sinon utilisez l'autre méthode. – ChadSikorra

+0

Bonjour ChadSikorra, merci d'avoir répondu! Une fois l'utilisateur créé, j'utilise: Enable-Mailbox -identity $ sam -database $ maildb Le script me donne une sortie, comme Name, Alias, etc. La boîte aux lettres a donc été créée. Ensuite, la commande suivante est: Get-Mailbox -identity $ sam | Set-Mailbox -ExternalOOFOptions InternalOnly C'est le point où la plupart du temps j'obtiens une erreur comme: Erreur: Impossible de trouver l'objet dans l'OU – Mesjoggah

+1

Je pense que vous feriez mieux de créer l'utilisateur et la boîte aux lettres en même temps en utilisant la commande 'New-Mailbox', qui est ce à quoi elle était destinée. De cette façon, vous n'aurez pas à vous soucier de quelque chose qui risque de ne pas se synchroniser tout de suite. Utilisez uniquement 'New-ADUser' quand vous êtes sûr de ne pas avoir de boîte aux lettres. De cette façon, vous pouvez sauvegarder la sortie de 'New-Mailbox' et appeler directement votre commande' Set-Mailbox'. – ChadSikorra

Répondre

0

Essayez d'ajouter Start-Sleep cmdlet avant la cmdlet dans laquelle vous obtenez une erreur. Ajouter un délai raisonnable.

E.g. ajouter 15 secondes de retard utilisation:

Start-Sleep -s 15 

Plus de détails pour cette applet de commande ici: Start-Sleep

ou vous pouvez essayer ci-dessous le code:

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

$mailbox | Set-Mailbox -ExternalOOFOptions InternalOnly