none
Exchange 队列数据库重建脚本咨询 RRS feed

  • 问题

  • HI  工程师您好,

         能否看下脚本中是否有问题,目前运行以下脚本得不到任何结果。

    要求:

    1、删除队列数据库前需要检查队列数据库中是否是空;

    2、为空时停止传输服务、删除队列数据库文件、启动传输服务;

    3、非空时不运行任何命令;

    $msg=Get-Queue

    if ($msg -eq "$null"){
    stop-service -name "MSExchangeTransport" 
    sleep 30
    Remove-Item -path "C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue\mail.que"
    start-service -name "MSExchangeTransport"
    }

    2020年9月3日 1:44

答案

  • 您好,

    看到问题已经被您删除,是否是已经解决?这面给您总结一下:

    通过以下测试,我们可以查看,即使队列为空的时候,Get-Queue的返回值也不是空的,所以您的脚本中If语句的内容并不会被执行:



    所以,我们需要使用其它的值来判断,比如MessageCount:

    $queues = Get-Queue
    $count = 0
    foreach($queue in $queues){
        $count += $queue.MessageCount
    }
    if ($count -eq 0){
        write-host "ok to go"
    }
    else{
        write-host "`nThere have "$count" message in queue`n"
    }

    这样才可以执行if语句中的操作。

    如果队列中有邮件时候:

    同时,清空队列只是为了减少邮件丢失。您可以不清除队列直接重建队列数据库。

    如果需要这面可以帮您重新删除该帖子

    此致,

    Kyle Xu


    如果以上回复对您有所帮助,建议您将其“标记为答复”. 如果您对我们的论坛支持有任何的建议,可以通过此邮箱联系我们:tnsf@microsoft.com.

    2020年9月3日 8:00
    版主

全部回复

  • 您好,

    看到问题已经被您删除,是否是已经解决?这面给您总结一下:

    通过以下测试,我们可以查看,即使队列为空的时候,Get-Queue的返回值也不是空的,所以您的脚本中If语句的内容并不会被执行:



    所以,我们需要使用其它的值来判断,比如MessageCount:

    $queues = Get-Queue
    $count = 0
    foreach($queue in $queues){
        $count += $queue.MessageCount
    }
    if ($count -eq 0){
        write-host "ok to go"
    }
    else{
        write-host "`nThere have "$count" message in queue`n"
    }

    这样才可以执行if语句中的操作。

    如果队列中有邮件时候:

    同时,清空队列只是为了减少邮件丢失。您可以不清除队列直接重建队列数据库。

    如果需要这面可以帮您重新删除该帖子

    此致,

    Kyle Xu


    如果以上回复对您有所帮助,建议您将其“标记为答复”. 如果您对我们的论坛支持有任何的建议,可以通过此邮箱联系我们:tnsf@microsoft.com.

    2020年9月3日 8:00
    版主
  • 您好,

    请问以上建议是否有效?

    如果以上建议有用的话,请在空闲的时候标记它为答案以帮助更多的用户。

    此致,

    Kyle Xu


    如果以上回复对您有所帮助,建议您将其“标记为答复”. 如果您对我们的论坛支持有任何的建议,可以通过此邮箱联系我们:tnsf@microsoft.com.

    2020年9月8日 8:15
    版主
  • 您好,

         多谢回复。

    目前我是使用get-message解决此问题的。

    $msg=Get-message

    if ($msg -eq "$null"){
    stop-service -name "MSExchangeTransport" 
    sleep 30
    Remove-Item -path "C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue\mail.que"
    start-service -name "MSExchangeTransport"
    }

    2020年9月9日 5:40
  • 您好,

         多谢回复。

    目前我是使用get-message解决此问题的。

    $msg=Get-message

    if ($msg -eq "$null"){
    stop-service -name "MSExchangeTransport" 
    sleep 30
    Remove-Item -path "C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\data\Queue\mail.que"
    start-service -name "MSExchangeTransport"
    }

    确实这也是一种很好的方案。谢谢分享。

    此致,

    Kyle Xu


    如果以上回复对您有所帮助,建议您将其“标记为答复”. 如果您对我们的论坛支持有任何的建议,可以通过此邮箱联系我们:tnsf@microsoft.com.

    2020年9月9日 5:51
    版主