Проще всего использовать оператор -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 оператор по привычке .