powershell中是否存在类似if-else或任何其他命令的逻辑,以使powershell脚本不具有交互性



我正在准备powershell脚本,通过powershell脚本将本地邮箱移动到在线邮箱,迁移后将分配许可证

以下是示例:

#Created the user in AD , not mentioned here 
Enable-Mailbox -Identity "$firstname $lastname" -Database "XXXXXXX"
Start-Sleep -Seconds 10
Set-Mailbox "$firstname.$lastname" -PrimarySmtpAddress "$firstname.$lastname@XXXXXXX" -EmailAddressPolicyEnabled $false

当用户邮箱从本地交换机同步到在线交换机时,我可以在这里使用类似if-else或其他逻辑来触发以下命令吗?所以下面的命令运行成功,没有任何问题或错误。

Connect-ExchangeOnline
$Mailbox = "$firstname.$lastname@XXXXXXX"
$Endpoint = "XXXXXXXX"
$TargetDomain = "XXXXXXXXXXX"
$Cred = Get-Credential
New-MoveRequest -Identity $Mailbox -Remote -RemoteHostName $Endpoint -TargetDeliveryDomain $TargetDomain -RemoteCredential $Cred -Batchname "$Mailbox Move to O365"

有没有类似if-else或其他我可以在这里使用的逻辑,一旦邮箱迁移完成,就会触发下面的命令,然后执行下面的命令?

#Assign the license once migration is done successfully 
Set-MsolUser -UserPrincipalName $Mailbox -UsageLocation US
Set-MsolUserLicense -UserPrincipalName $Mailbox -AddLicenses "XXXXXXXXXXXX"

注I可以在两者之间使用Start-Sleep -Seconds XXX,但每次的同步时间不相同

以便在邮箱迁移后分配许可证;您需要首先检查while循环中move-request的状态,并在状态更改为Completed时执行命令,如下所示:

$i = $true
while ($i){
if (Get-MoveRequest -Identity $Mailbox| where {$_.status -eq "Completed"}) {
Set-MsolUser -UserPrincipalName $Mailbox -UsageLocation US
Set-MsolUserLicense -UserPrincipalName $Mailbox -AddLicenses "XXXXXXXXXXXX"
$i = $False
} else {
sleep 10
}
}

最新更新