String 如何确保字符串的格式正确
我正在为我的脚本编写一个进度条,我遇到了一个问题,字符串以不正确的格式输入数据String 如何确保字符串的格式正确,string,powershell,formatting,String,Powershell,Formatting,我正在为我的脚本编写一个进度条,我遇到了一个问题,字符串以不正确的格式输入数据 foreach ($User in $Users) { #Set UserPrincipalName for current user $upn = $User #Display progress bar $percentage = [math]::Round($loopcount / $maxcount *100) $message = "Applying changes
foreach ($User in $Users) {
#Set UserPrincipalName for current user
$upn = $User
#Display progress bar
$percentage = [math]::Round($loopcount / $maxcount *100)
$message = "Applying changes for $upn ($loopcount of $maxcount)" -f $percentage
Write-Progress -Activity $message -ErrorAction SilentlyContinue -PercentComplete ($percentage) -Status "Progress $percentage% :"
这是组成进度条的代码的主要部分(还有更多,但这无关紧要)。当它被输入用户身份(通过$user
)如“delat”和“damo”时,它工作得很好,但当它到达一个名为“DiscoverySearch{D919BA05-46A6-415f-80AD-xxxxxxxxxxxxxx}”的用户时,它会抛出一个“错误格式化字符串”错误,这是可以理解的
我如何着手解决这个问题
编辑:下面是$User
的源代码,以备需要
$MailboxRegionList = Get-Mailbox | Get-MailboxRegionalConfiguration
$Users += $MailboxRegionList | Select-Object -ExpandProperty Identity
这种情况会发生,因为
-f$percentage
没有达到您预期的效果。它不会将消息格式化为百分比值
$message = "Applying changes for $upn ($loopcount of $maxcount)" -f $percentage
-f
将在字符串中填充一个值。占位符将用花括号{}
标记,这是字符串通常没有的。当$user
是发现搜索{D919BA05-46A6-415f-80AD-XXXXXXXXXXXXXX}
时,它包含花括号。现在,花括号应该遵循.Net语法,而帐户名中的GUID不能做到这一点
至于修复方法,请尝试
$message = "Applying changes for $upn ($loopcount of $maxcount) $percentage"
不幸的是,这并没有解决问题:
$message=“为$upn($maxcount的loopcount){0}%”-f$percentage
如果您正确理解答案,帐户名甚至不可能包含花括号?您是否认为没有必要对这些名称进行说明,而且进度条也很好?@Atheos DiscoverySearch是Exchange的一部分。我手头没有一个测试环境,但在大多数情况下,如果没有充分的理由和Microsoft的文档支持,就不应该乱动这些帐户。我查看了“DiscoverySearch”,当然你是对的——我的脚本不应该处理它。我通过确保“$Users”中没有添加“DiscoverySearch”,半修复了我的问题。但是,如果我遇到租户的用户名中有花括号,我的脚本仍然会抛出格式错误。我是否应该更改脚本以解决此问题?您可以使用Get Mailbox
上的RecipientTypeDetails
参数,按指定的邮箱子类型(如UserMailbox
)筛选结果。看见