尝试根据当前显示名称一次重命名多个帐户类型
Trying to rename several account types at once based on current displayName
今天早上,一些很棒的人帮我制作了一个脚本,可以根据用户帐户的 displayName 将用户帐户移动到某个 OU。我测试过并且有效。我拆解了脚本以制作另一个脚本,该脚本将根据相同的标准重命名相同的帐户。我遇到了几个错误,但基本上都归结为 "I am having an identity crisis!"。我似乎无法弄清楚我需要输入什么作为 $Identity
。这是我拥有的:
Import-Module ActiveDirectory
$Renames = @(
@{
Filter = 'DisplayName -like "*Supply*"'
NewName = "Supplies"
},
@{
Filter = 'DisplayName -like "*Accountant*"'
NewName = "Accounting"
}
) | ForEach-Object {New-Object -TypeName PSCustomObject -Property $_}
$OriginOU = "OU=Test,OU=Standard Users,OU=Domain Users,DC=com"
foreach ($Rename in $Renames) {
Get-ADUser -SearchBase $OriginOU -Filter $Rename.Filter -Properties displayName |
Where-Object {($_.Enabled -eq 'True') -and ($_.DistinguishedName -notlike '*DontTouch*')} |
%{Set-ADUser $_ -DisplayName {$_.DisplayName -replace '(.EPSILON ).+',"`$Rename.NewName"}}
}
如果 Set-ADUser
直接从管道读取,则不能使用当前对象变量 ($_
)。由于 Set-ADUser
显然不能很好地处理脚本块参数,因此您必须将语句放入循环中:
... | % { Set-ADUser $_ -DisplayName ($_.DisplayName -replace '(.EPSILON ).+',"`$($Rename.NewName)") }
请注意,如果要在字符串中扩展对象属性,则必须将 $Rename.NewName
放入子表达式 ($()
) 中,否则整个对象 $Rename
将被字符串化并且字符串“.NewName”将附加到它。
今天早上,一些很棒的人帮我制作了一个脚本,可以根据用户帐户的 displayName 将用户帐户移动到某个 OU。我测试过并且有效。我拆解了脚本以制作另一个脚本,该脚本将根据相同的标准重命名相同的帐户。我遇到了几个错误,但基本上都归结为 "I am having an identity crisis!"。我似乎无法弄清楚我需要输入什么作为 $Identity
。这是我拥有的:
Import-Module ActiveDirectory
$Renames = @(
@{
Filter = 'DisplayName -like "*Supply*"'
NewName = "Supplies"
},
@{
Filter = 'DisplayName -like "*Accountant*"'
NewName = "Accounting"
}
) | ForEach-Object {New-Object -TypeName PSCustomObject -Property $_}
$OriginOU = "OU=Test,OU=Standard Users,OU=Domain Users,DC=com"
foreach ($Rename in $Renames) {
Get-ADUser -SearchBase $OriginOU -Filter $Rename.Filter -Properties displayName |
Where-Object {($_.Enabled -eq 'True') -and ($_.DistinguishedName -notlike '*DontTouch*')} |
%{Set-ADUser $_ -DisplayName {$_.DisplayName -replace '(.EPSILON ).+',"`$Rename.NewName"}}
}
如果 Set-ADUser
直接从管道读取,则不能使用当前对象变量 ($_
)。由于 Set-ADUser
显然不能很好地处理脚本块参数,因此您必须将语句放入循环中:
... | % { Set-ADUser $_ -DisplayName ($_.DisplayName -replace '(.EPSILON ).+',"`$($Rename.NewName)") }
请注意,如果要在字符串中扩展对象属性,则必须将 $Rename.NewName
放入子表达式 ($()
) 中,否则整个对象 $Rename
将被字符串化并且字符串“.NewName”将附加到它。