Как убедиться, что строка имеет правильный формат - PullRequest
0 голосов
/ 21 октября 2019

Я кодирую индикатор выполнения для своего сценария, и я столкнулся с проблемой, когда строка подается данные в неправильном формате.

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-XXXXXXXXXXXXXXXX}», он по понятным причинам выдаетошибка «Ошибка форматирования строки».

Как мне решить эту проблему?

Редактировать: Ниже приведен источник $User, если этонеобходимо.

$MailboxRegionList = Get-Mailbox | Get-MailboxRegionalConfiguration
$Users += $MailboxRegionList | Select-Object -ExpandProperty Identity

1 Ответ

1 голос
/ 21 октября 2019

Это происходит, поскольку -f $percentage делает не то, что вы ожидаете. Сообщение не будет форматироваться как процент от значения.

$message = "Applying changes for $upn  ($loopcount of $maxcount)" -f $percentage

Оператор форматирования , -f заполнит значение в строке. Заполнитель должен быть отмечен фигурными скобками {}, которых обычно нет в вашей строке. Если $user равно DiscoverySearch {D919BA05-46A6-415f-80AD-XXXXXXXXXXXXXXXX}, оно содержит фигурные скобки. Теперь фигурные скобки должны соответствовать синтаксису .Net составного форматирования , а GUID в имени учетной записи этого не делает.

Что касается исправления, попробуйте

$message = "Applying changes for $upn  ($loopcount of $maxcount) $percentage"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...