创建用户的Powershell想要创建邮箱,但无法在AD中找到用户

时间:2016-04-28 15:11:50

标签: powershell active-directory exchange-server-2010

我已经创建了一个适用于大多数时候都很棒的PowerShell脚本。 首先,该脚本创建一个用户帐户。紧接着,(在“读取主机”之后,用户需要有一个邮箱“输入”),它会创建一个邮箱。当它完成后,一些(外出)设置将应用于邮箱。

出于某种原因,看起来脚本太快了。它经常以失败告终,说无法找到用户。它发生在邮箱创建部分之后,当我想应用一些设置时。 如果我在用户创建和邮箱创建部分之间等待几分钟,情况就会好转。

代码

# 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

通常,我收到错误:

  

错误:无法在OU中找到对象

我只想让脚本创建所有内容而不必等待。 有没有办法可以实现这个目标?

我正在从工作站运行脚本,并且正在导入活动目录并交换PowerShell模块。

2 个答案:

答案 0 :(得分:0)

尝试在出现错误的cmdlet之前添加Start-Sleep cmdlet。加上合理的延迟。

E.g。添加延迟使用15秒:

Start-Sleep -s 15

此cmdlet的更多详细信息:Start-Sleep

或者您可以尝试以下代码:

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

$mailbox | Set-Mailbox -ExternalOOFOptions InternalOnly 

答案 1 :(得分:0)

这些命令可以随机选择不同的域控制器。 例如:

  1. Enable-Mailbox(或New-Mailbox)命令已更改 DC1 上用户对象的 Exchange 属性。
  2. Set-Mailbox 命令正在尝试更改 DC2 上用户对象的 Exchange 属性。 但是,有关新创建的邮箱的信息尚未从 DC1 复制到 DC2。

您可以为所有命令手动指定相同的域控制器。

$DomainController = 'dc1.contoso.com'
$sam = 'username'
New-Mailbox -SamAccountName $sam -DomainController $DomainController ...
Set-Mailbox -Identity $sam -ExternalOOFOptions InternalOnly -DomainController $DomainController ...

$DomainController = 'dc1.contoso.com'
$sam = 'username'
New-ADUser -SamAccountName $sam -Server $DomainController ...
Enable-Mailbox -Identity $sam -DomainController $DomainController ...
Set-Mailbox -Identity $sam -ExternalOOFOptions InternalOnly -DomainController $DomainController ...