powershell – 识别Exchange 2013损坏的邮箱
我们正准备摆脱Exchange内部部署,并从外包托管服务提供商迁移到Office 365.我们正在运行完整修补版本的Exchange 2013,在Server 2012上,也完全打补丁.
在迁移测试邮箱期间,我们发现多个数据库中的许多邮箱已损坏.有关原因的更多信息可以在HERE找到.基本上:存储我们的Exchange VM的SAN超额订阅,并且通常I / O等待超过5秒,持续读取速度很少超过500KBps. 速度慢将足以导致迁移过程中浪费大量时间,但遇到损坏的邮箱时,迁移1GB的数据会从2-3小时到10-20小时.在针对get-mailboxstatistics进行检查时,每个有问题的邮箱(我到目前为止发现的)都会给出类似下面的消息: WARNING: The object <GUID> has been corrupted,and it's in an inconsistent state. The following validation errors happened: WARNING: Cannot extract the property value of 'DeletedItemCount'. Source: PropTag(DeletedMsgCount),PropType(Int),RawValue(-2),RawValueType(System.Int32). Target: Type(System.Nullable`1[System.UInt32]),IsMultiValued(False). Error Details: <n/a> 对所有数据库运行New-MailboxRepairRequest确定了一些损坏并修复了它,但不是全部.我似乎无法找到一种方法让Get-MailboxStatistics记录每个邮箱中存在损坏的事实,尽管我确定有一个.将邮箱从一个数据库移动到另一个数据库似乎可以解决问题.我们有大约50个数据库,每个数据库大约有50个用户,因此手动完成此操作即可. 我想做的是,通过PowerShell(请原谅懒惰的伪代码): foreach ($mailbox in $database){ if get-mailboxstatisics -eq $corrupted { move $mailbox to $otherdb wait move $mailbox back to $database} } 但是,我无法弄清楚如何从Get-MailboxStatistics中捕获“Warning:this is broken”文本,并且返回的结果对象中没有任何显示它已损坏的内容. 我是否只需要捕获警告并假设所有抱怨不一致的内容都可以通过这种方式修复,然后返回并检查实际上有问题的邮箱列表,这些邮箱在移出后再返回以查看是否仍然存在问题破碎?有没有更好的方法来做我需要做的事情? 更换SAN不在可能的范围内,因此解决任何其他根本原因.
要隔离现有PowerShell cmdlet中的消息,可以使用
警告变量 $mailbox | Get-MailboxStatistics -WarningAction SilentlyContinue -WarningVariable MyWarning; if($MyWarning -like '*corrupted*'){ Write-Host "possible corruption"; } 我试图复制一个警告事件给doulbe检查上面但不能通过MailboxStats cmdlet.上面应该工作 – 但在这种情况下它没有经过测试. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- winapi – 与DLL的隐式与显式链接
- windows – 手动应用puppet类
- haskell – 在Windows 7上安装带有cygwin的Cabal-dev
- 视力受损的人和Windows更新
- windows-server-2012 – Apache随机停止提供HTTPS,但HTTP工
- windows-store-apps – 我可以发布UWP应用程序的StoreKey.p
- 我可以限制Windows 2003/2008/2008 R2中的用户带宽/内存使用
- 安装程序 – InstallShield电池电量警告
- windows-server-2003 – 是否可以使用WPA企业模式而无需使用
- windows-7 – Windows 7上的SetCommState失败