Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何确保字符串的格式正确_String_Powershell_Formatting - Fatal编程技术网

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
)筛选结果。看见