循环获取邮箱 cmdlet,直到没有错误返回
Loop get-mailbox cmdlet until no error returned
我有混合设置,共享邮箱在本地创建并在几分钟内同步到 Exchange Online。
我的套路是在本地创建一个共享邮箱,然后通过Connect-ExchangeOnline对其进行转换、填充、启用messagecopy等。
我想要一个小脚本来检查它是否同步到 EO。
我尝试了几种不同的方法,看起来这个方法应该有效,但不幸的是,它在成功或错误后中断,而没有像我期望的那样在 10 秒内尝试 运行 get-mailbox。
请评论和指教。
$ErrorActionPreference = 'SilentlyContinue'
$ID = "xxx@yyy"
$i=0
while ($i -le 10) {
try {
Get-Mailbox $ID
break
}
catch {
$i++
$i
Start-Sleep 10
}
}
如评论所述,要同时捕获 non-terminating 个异常,您必须使用 -ErrorAction Stop
。
但为什么不简单地做一些像
$ID = "xxx@yyy"
for ($i = 0; $i -le 10; $i++) { # # loop 11 attempts maximum
$mbx = Get-Mailbox -Identity $ID -ErrorAction SilentlyContinue
if ($mbx) {
Write-Host "Mailbox for '$ID' is found" -ForegroundColor Green
break
}
Write-Host "Mailbox for '$ID' not found.. Waiting 10 more seconds"
Start-Sleep -Seconds 10
}
或者,如果您想使用 try{..} catch{..}
$ID = "xxx@yyy"
for ($i = 0; $i -le 10; $i++) { # loop 11 attempts maximum
try {
$mbx = Get-Mailbox -Identity $ID -ErrorAction Stop
Write-Host "Mailbox for '$ID' is found" -ForegroundColor Green
$i = 999 # exit the loop by setting the counter to a high value
}
catch {
Write-Host "Mailbox for '$ID' not found.. Waiting 10 more seconds"
Start-Sleep -Seconds 10
}
}
我有混合设置,共享邮箱在本地创建并在几分钟内同步到 Exchange Online。 我的套路是在本地创建一个共享邮箱,然后通过Connect-ExchangeOnline对其进行转换、填充、启用messagecopy等。
我想要一个小脚本来检查它是否同步到 EO。 我尝试了几种不同的方法,看起来这个方法应该有效,但不幸的是,它在成功或错误后中断,而没有像我期望的那样在 10 秒内尝试 运行 get-mailbox。 请评论和指教。
$ErrorActionPreference = 'SilentlyContinue'
$ID = "xxx@yyy"
$i=0
while ($i -le 10) {
try {
Get-Mailbox $ID
break
}
catch {
$i++
$i
Start-Sleep 10
}
}
如评论所述,要同时捕获 non-terminating 个异常,您必须使用 -ErrorAction Stop
。
但为什么不简单地做一些像
$ID = "xxx@yyy"
for ($i = 0; $i -le 10; $i++) { # # loop 11 attempts maximum
$mbx = Get-Mailbox -Identity $ID -ErrorAction SilentlyContinue
if ($mbx) {
Write-Host "Mailbox for '$ID' is found" -ForegroundColor Green
break
}
Write-Host "Mailbox for '$ID' not found.. Waiting 10 more seconds"
Start-Sleep -Seconds 10
}
或者,如果您想使用 try{..} catch{..}
$ID = "xxx@yyy"
for ($i = 0; $i -le 10; $i++) { # loop 11 attempts maximum
try {
$mbx = Get-Mailbox -Identity $ID -ErrorAction Stop
Write-Host "Mailbox for '$ID' is found" -ForegroundColor Green
$i = 999 # exit the loop by setting the counter to a high value
}
catch {
Write-Host "Mailbox for '$ID' not found.. Waiting 10 more seconds"
Start-Sleep -Seconds 10
}
}