我正在尝试更改用户列表的3个字符。所有这些用户在他们的DisplayName (ABcD-DisplayName)上都附加了一些内容,我想将其更改为我要使用的内容(ABcD-ICC
Set-aduser -Identity $_.SamAccountName -Replace @{DisplayName="$_.Surname, $_.GivenName (ABcD-ICC)"}
但我唯一要改变的就是最后的国际刑事法院。有没有更简单的方法呢?
发布于 2020-03-11 01:28:01
为此,您可以使用-replace运算符,并根据需要使其变化:
# Replaces three characters before a final character of )
$replace = 'ICC'
Set-aduser -Identity $_.SamAccountName -Replace @{DisplayName=$_.DisplayName -replace '.{3}(?=\)$)',$replace}说明:
-replace使用正则表达式匹配,并将匹配替换为替换字符串。替换字符串可以是文本字符串、包含变量或与regex部分匹配的捕获组。
.可以是任何单个字符。{3}恰好匹配三次。(?=)是一个肯定的先行断言,这意味着未来的字符与当前位置的内部字符相匹配。Lookahead允许未捕获的匹配,因此不会输出也不会被替换。$表示字符串的末尾。\)是对文字)进行转义的反斜杠。由于(和)在正则表达式中有特殊含义,因此必须对它们进行转义。
有时你可能不知道最后一个字符。在这种情况下,您可以使用以下代码替换最后一个任意字符之前的三个字符:
$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}https://stackoverflow.com/questions/60617952
复制相似问题