Как найти данные и заменить переменную в PowerShell Command - PullRequest
0 голосов
/ 12 ноября 2018

В настоящее время у меня есть ряд групп рассылки Dyanmic, в которые я хочу отредактировать фильтр получателей. Наша компания основана на номере местоположения, которое является 4-значным числом. Этот номер является частью отображаемого имени динамической группы рассылки ... пример webcontact_1234_DG .... 1234 будет четырехзначным центральным номером. Я хочу заменить фильтр получателей на office -eq (1234), но он вытянет номер из отображаемого имени. Все отображаемые имена будут иметь одинаковое количество символов перед 4-значным центральным номером, например, webcontact_1234_DG, webcontact_2345_DG, webcontact_3456_DG и т. Д.

У меня есть код замены, но он изменил местоположение офиса на ноль.

Вот код, который я использую:

$groups=Get-DynamicDistributionGroup -filter {alias -like "webcontact*"}
foreach ($group in $groups) {
     $locationcode=$($group.alias).tostring.replace("\\D", "")
     set-dynamicdistributiongroup $group -recipientfilter {((((office -eq $locationcode) -and
      (have the recipent filter here but can't display due to confidential information) -and
      (RecipientType -eq 'UserMailbox') -and
      (-not(RecipientTypeDetails -eq 'RoomMailbox')) -and
      (-not(RecipientTypeDetails -eq 'SharedMailbox'))))}
}

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Это лучший ответ, который я могу придумать, основываясь на предоставленной информации.Я предполагаю, что у вас есть проблема с получением этого числа из вашего webcontact_1234_DG, я бы использовал регулярное выражение, чтобы вывести эти числа в другую переменную.

$locationcode = [regex]::Match($group.alias,'^[^_]+_([^_]+)_[^_]+$').Groups[1].Value

Приведенный выше код перехватит все, что находится между двумяподчеркивания.

Попробуйте и дайте мне знать.

0 голосов
/ 12 ноября 2018

Проще всего использовать оператор -split , чтобы извлечь число (текст) из ваших значений [1] :

$locationcode = ($group.Alias -split '_')[1]

-split '_'возвращает массив токенов, который получается, когда вы разбиваете входную строку на _ символов., а [1] возвращает 2-й токен, который является требуемым номером местоположения.

Простой пример:

PS> ('webcontact_3456_DG' -split '_')[1]
3456

В качестве альтернативы, исправленная версия вашей собственной попытки (см. Ниже) будет использовать оператор -replace :

PS> 'webcontact_3456_DG' -replace '\D' # remove all non-digit chars.
3456

Что касается то, что выпробный :

$($group.alias).tostring.replace("\\D", "")
  • .Replace() типа [string] ищет по буквальным строкам, поэтому поиск по \\D в ваших именах не удастся, и замена не произойдет.

    • Кроме того, обратите внимание, что escape-символ PowerShell - ` (обратный удар), а не \, и поэтому \не требуется экранирование: в PowerShell "\\D" буквально становится \\D.
  • Как отступление: обычно нет необходимостиut $(...) вокруг выражений.


[1] Вы также можете использовать .Split() .NET метод в типе [string].это простой случай, но Я предлагаю использовать гораздо более гибкий -split PS оператор по привычке .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...