Вы можете использовать для этого оператор -replace
и изменить его по мере необходимости:
# Replaces three characters before a final character of )
$replace = 'ICC'
Set-aduser -Identity $_.SamAccountName -Replace @{DisplayName=$_.DisplayName -replace '.{3}(?=\)$)',$replace}
Пояснение:
-replace
использует сопоставление регулярных выражений и заменяет совпадение строкой замены. Строка замены может быть строкой литерала, содержать переменные или группы захвата, соответствующие части регулярного выражения.
.
— любой одиночный символ. {3}
совпадает ровно три раза. (?=)
— это положительное опережающее утверждение, означающее, что будущие символы совпадают с тем, что находится внутри от текущей позиции. Упреждающий просмотр допускает совпадение, которое не захвачено, поэтому оно не выводится и не заменяется. $
означает конец строки. \)
- это обратная косая черта, ускользающая от буквального )
. Поскольку (
и )
имеют особое значение в регулярном выражении, их необходимо экранировать.
Иногда вы можете не знать последний символ. В этом случае вы можете использовать следующее, чтобы заменить три символа перед окончательными произвольными символами:
$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}
person
AdminOfThings
schedule
10.03.2020