【问题标题】:Powershell, created user, wanted to create mailbox, but cannot find user in ADPowershell,已创建用户,想创建邮箱,但在 AD 中找不到用户
【发布时间】:2016-04-28 15:11:49
【问题描述】:

我创建了一个 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 模块。

【问题讨论】:

  • 您在脚本中使用了哪些命令?也许使用New-Mailbox cmdlet 会更好。见here。只需添加一些逻辑来延迟用户帐户和邮箱的创建,直到他们回答该帐户是否应该有邮箱。如果是,则使用New-Mailbox 命令创建它,否则使用其他方法。
  • 您好 ChadSikorra,感谢您的回复!创建用户后,我正在使用: Enable-Mailbox -identity $sam -database $maildb 该脚本为我提供了一些输出,例如名称、别名等。因此,邮箱已创建。之后,下一个命令是:Get-Mailbox -identity $sam | Set-Mailbox -ExternalOOFOptions InternalOnly 这是大多数时候我收到错误的地方:错误:无法在 OU 中找到对象
  • 我认为您最好使用New-Mailbox 命令同时创建用户和邮箱,这正是它的用途。这样您就不必担心可能无法立即同步的内容只有在您确定他们没有邮箱时才使用New-ADUser。这样您就可以保存来自New-Mailbox 的输出并直接针对它调用您的Set-Mailbox 命令。

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


【解决方案1】:

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

例如添加 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 

【讨论】:

    【解决方案2】:

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

    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 ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 1970-01-01
      • 2014-09-24
      相关资源
      最近更新 更多