首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >满足条件时PowerShell停止脚本

满足条件时PowerShell停止脚本
EN

Stack Overflow用户
提问于 2022-06-17 12:10:07
回答 1查看 131关注 0票数 0

我找不到解决这个问题的关键。我相信我对这个应用程序使用了正确的循环,但是当百分之百完成的条件是100%时,我不能让脚本停止。Do循环将永远运行。

代码语言:javascript
复制
Import-Module ExchangeOnlineManagement

Connect-ExchangeOnline

$User = "thomas.smith@mailbox.com"

New-MoveRequest -Identity "$User" -Remote -RemoteHostName "remotemailboxaddress" -TargetDeliveryDomain "targetdomain.mail.onmicrosoft.com" -RemoteCredential (Get-Credential)

Do {Get-MoveRequestStatistics -Identity "$User" -InformationVariable $Mailbox |  Select-Object Displayname, StatusDetail, TotalMailboxSize, PercentComplete | Format-Table Displayname, StatusDetail, TotalMailboxSize, PercentComplete
            Start-Sleep -Seconds 3
    } Until ({Get-MoveRequestStatistics -Identity "$User" -InformationVariable $Mailbox |  Select-Object PercentComplete} -eq 100)


Run Disconnect-ExchangeOnline once completed with migration
Disconnect-ExchangeOnline

输出差不多也是我想要的。我希望它添加一个新的行,而不是重新创建整个表,当然,一旦完成100%的完成,就会停止。如果没有注释掉,脚本也将跳过断开-Exchange online的权限。

代码语言:javascript
复制
DisplayName   StatusDetail        TotalMailboxSize        PercentComplete
-----------   ------------        ----------------        ---------------
SMITH, Thomas WaitingForJobPickup 53.49 KB (54,770 bytes)              95



DisplayName   StatusDetail        TotalMailboxSize        PercentComplete
-----------   ------------        ----------------        ---------------
SMITH, Thomas WaitingForJobPickup 53.49 KB (54,770 bytes)              95



DisplayName   StatusDetail TotalMailboxSize        PercentComplete
-----------   ------------ ----------------        ---------------
SMITH, Thomas ADUpdate     53.49 KB (54,770 bytes)              95



DisplayName   StatusDetail TotalMailboxSize        PercentComplete
-----------   ------------ ----------------        ---------------
SMITH, Thomas Cleanup      53.49 KB (54,770 bytes)              99



DisplayName   StatusDetail TotalMailboxSize        PercentComplete
-----------   ------------ ----------------        ---------------
SMITH, Thomas Completed    53.49 KB (54,770 bytes)             100



DisplayName   StatusDetail TotalMailboxSize        PercentComplete
-----------   ------------ ----------------        ---------------
SMITH, Thomas Completed    53.49 KB (54,770 bytes)             100

我真的尝试过让它工作,不同的循环条件,尝试在行上设置一个变量。没有运气,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-17 12:54:55

Select-Object输出一个包含所选属性的对象。若要获取属性值,请使用Select-Object -ExpandProperty PropertyNameForEach-Object PropertyName或使用成员访问(Expression).PropertyName

您可以通过捕获变量中第一个Get-MoveRequestStatistics调用的输出来删除第二个the调用。那么,在循环条件下获取PercentComplete属性的最自然的方法是使用成员访问。

代码语言:javascript
复制
do {
    Start-Sleep -Seconds 3
    $stats = Get-MoveRequestStatistics -Identity "$User" -InformationVariable Mailbox 
    $stats | Format-Table Displayname, StatusDetail, TotalMailboxSize, PercentComplete
}
Until( $stats.PercentComplete -eq 100 )

我还删除了Select-Object,因为它是多余的。您已经为Format-Table命令选择了要显示的属性。

有一个小错误:-InformationVariable $Mailbox。变量名必须在没有$前缀的情况下传递。否则,PowerShell将把存储在变量$Mailbox中的值作为要分配信息流的变量的名称。这很可能不是你想要的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72659178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档