powershell 中是否有类似 if else 或任何其他命令的逻辑来使 powershell 脚本非交互?

Is there any logic like if else or any other command in powershell to get the powershell script non-interactive?

我正在准备 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"

注意-我可以在两者之间使用 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
           }

}