我已经创建了一个适用于大多数时候都很棒的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模块。
答案 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)
这些命令可以随机选择不同的域控制器。 例如:
您可以为所有命令手动指定相同的域控制器。
$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 ...