Powershell 更改DisplayName用户列表中的3个字符

Powershell 更改DisplayName用户列表中的3个字符,powershell,active-directory,Powershell,Active Directory,我正在尝试更改用户列表的3个字符。所有这些用户的显示名上都附加了一点内容(abou dong somthing)我想将该内容更改为(abou dong ICC) 我打算用 Set aduser-Identity$\.SamAccountName-Replace@{DisplayName=“$\.姓氏,$\.GivenName(ABcD ICC)”} 但我唯一要改变的是最后的国际刑事法院。有更简单的方法吗?您可以为此使用-replace操作符,并根据需要进行更改: # Replaces three

我正在尝试更改用户列表的3个字符。所有这些用户的显示名上都附加了一点内容(abou dong somthing)我想将该内容更改为(abou dong ICC) 我打算用

Set aduser-Identity$\.SamAccountName-Replace@{DisplayName=“$\.姓氏,$\.GivenName(ABcD ICC)”}


但我唯一要改变的是最后的国际刑事法院。有更简单的方法吗?

您可以为此使用
-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}

请显示当前名称和预期名称的示例。查看如何拆分字符串
-Replace@{DisplayName=$\uuuu.DisplayName-Replace'ICC\)$,'something')}
?因此当前名称可能是:lastname,firstname(fang EFG)我想将其设为lastname,firstname(HIJ)