Для этого можно использовать оператор -replace
и изменять его при необходимости:
# Replaces three characters before a final character of )
$replace = 'ICC'
Set-aduser -Identity $_.SamAccountName -Replace @{DisplayName=$_.DisplayName -replace '.{3}(?=\)$)',$replace}
Объяснение:
-replace
использует сопоставление с регулярным выражением и заменяет совпадение строкой замены. Строка замены может быть литеральной строкой, содержать переменные или группы захвата, соответствующие части регулярного выражения.
.
- любой отдельный символ. {3}
соответствует ровно три раза. (?=)
- это положительное прогнозное утверждение, которое означает, что будущие символы соответствуют тому, что находится внутри от текущей позиции. Lookahead допускает совпадение, которое не фиксируется и, следовательно, не выводится и не заменяется. $
означает конец строки. \)
- это бэсла sh, выходящий за пределы буквального )
. Поскольку (
и )
имеют специальное значение в регулярных выражениях, они должны быть экранированы.
Иногда вы можете не знать последний символ. В этом случае вы можете использовать следующее для замены трех символов перед последними произвольными символами:
$replace = 'ICC'
Set-aduser -Identity $_.SamAccountName -Replace @{DisplayName=$_.DisplayName -replace '.{3}(?=.$)',$replace}
Если вы хотите заменить последние три символа независимо от их значения, вы можете выполнить следующие действия: следующее:
$replace = 'ICC'
Set-aduser -Identity $_.SamAccountName -Replace @{DisplayName=$_.DisplayName -replace '.{3}$',$replace}
Если вы хотите заменить последние три последовательных буквенных символа, даже если они находятся далеко от конца строки, вы можете сделать:
$replace = 'ICC'
Set-aduser -Identity $_.SamAccountName -Replace @{DisplayName=$_.DisplayName -replace '[a-z]{3}(?=[^a-z]*$)',$replace}