我正在寻找纠正AD中的一个小问题,其中我提到的字段在值中有空格。
前:
legacyExchangeDN : /o= First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=6131a3a42ca946b98cc146345cfd0c2e-Ron E
应该是这样的:
legacyExchangeDN : /o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=6131a3a42ca946b98cc146345cfd0c2e-Ron E
这会影响多个用户,我可以手动更新AD属性编辑器中的值,但我希望能够自动执行此操作。
这是我到目前为止所拥有的:
#List all users to check existing values
$ADUserList = Get-ADUser -Filter* -Properties * | fl name, EmailAddress, legacyExchangeDN
#Replace value with space with value without space
Set-ADUser reyer -Replace @{legacyExchangeDN="/o= ","/o="}
第二行产生以下错误:
Set-ADUser : Multiple values were specified for an attribute that can have only one value
At line:1 char:1
+ Set-ADUser reyer -Replace @{legacyExchangeDN="/o= ","/o="}
感觉我在这里很容易丢失一些东西,但我找不到它。我正在用一个用户测试这个。一旦测试,我想在一个脚本中替换所有剩余用户的值。如果我只针对那些符合在该字段中具有空间的标准的用户,那肯定会有助于存储它或管道覆盖。
我的最终结果如下:
目标用户在legacyExchangeDN的文本值中有空格--->“/ o =”
将“/ o =”替换为“/ o =”,同时保留文本值的其余部分 - >“/ o =第一个组织/ ou = Exchange管理组(FYDIBOHF23SPDLT)/ cn =收件人/ cn = 6131a3a42ca946b98cc146345cfd0c2e-Ron E“
先谢谢您的时间和精力!
答案 0 :(得分:0)
$Users = Get-ADUser -Filter { legacyExchangeDN -like '*/o= *' } -Properties @('name','EmailAddress','legacyExchangeDN')
ForEach ($User in $Users)
{
$Replace = $User.legacyExchangeDN -replace '/o=\s','/o='
Set-ADUser -Identity $User -Replace @{ legacyExchangeDN = $Replace }
Write-Host ('Updated "{0}" ({1}) to "{2}"' -f
@($User.name,$User.EmailAddress,$Replace))
}
这也会更快。口头禅是:过滤左,格式右。 Set-ADUser
takes an ADUser
object。 -Replace
将[HashTable]
用于为命名属性分配新值(在LDAP中显示)。
(更新:删除了foreach的管道)
要实施日志记录,请将Write-Host
替换为:
'Updated "{0}" ({1}) to "{2}"' -f @($User.name,$User.EmailAddress,$Replace) |
Out-File -FilePath "$env:UserProfile\ADChanges.txt" -Append