我的目标是复制现有用户,包括 AD 树中的 OU 位置。
到目前为止我有这个:
$SName = Read-Host "Please Enter the login initials of the source user "
$U = Get-ADUser -Identity $SName -Properties streetaddress,homepage,POBox,postalcode,city,country,company,department,office,fax
$FirstName = read-host -Prompt "Enter first name of new user: "
$LastName = read-host -Prompt "Enter last name of new user: "
$DisplayName = "$Firstname $LastName"
$DName = Read-Host "Please Enter logon initials of the new user "
$UPN = $DName+"@scangl.com"
$TempPassword = read-host -AsSecureString -Prompt "Enter temporary password (min. 8 characters)"
$Path = Get-User -Identity $SName|Select "OrganizationalUnit"
New-ADUser -Instance $u -Name $DisplayName -SamAccountName $DName -Path $Path -UserPrincipalName $UPN -DisplayName $DisplayName -givenname $FirstName -surname $LastName -AccountPassword $TempPassword -ChangePasswordAtLogon $True
您可能注意到,我尝试使用 Get-User 选择 OrganizationalUnit,但它给出了错误:目录服务未配置上级引用。因此,目录服务无法向此林外的对象发出引用。
关于如何复制 OU 位置有什么建议吗,或者可能是根本无法复制此用户属性?
答案1
对象所在的组织单位(或容器)不是该对象的属性,因此您无法轻松读取它;但您可以通过解析对象的可分辨名称(在第一个逗号处将其拆分)来检索:
$DN = $U.DistinguishedName
$Path = $DN.Substring($dn.IndexOf(',') + 1)
New-ADUser [...] -Path $Path
该Get-User
cmdlet 不是 Active Directory cmdlet,它来自 Exchange 命令行管理程序;其OrganizationalUnit
属性不是有效的 LDAP 路径,因此不能在New-ADUser
命令中使用它。
如果对象的 DN 是CN=User Name,OU=SomeOU,DC=domain,DC=com
,我的代码将返回OU=SomeOU,DC=domain,DC=com
(即 OU 的实际 LDAP 路径),而Get-User.OrganizationalUnit
将返回domain.com/SomeOU
,这是完全不同的东西。
答案2
复制用户,然后从创建副本的默认 OU 移动到所需的 OU。就这么简单。正如 Massimo 指出的那样,对象所在的 OU/容器不是对象的一部分。
如果您将其视为文件操作,那么您可能会感觉更好。用户就像一个文件,而 OU 或容器就像一个文件夹 - 您不会将文件夹添加到文件中,而是将文件复制到您希望它驻留的位置。AD 也是如此,但在 Windows 域中,所有对象类型都有一个默认容器/OU,其中会自动创建该类型的新对象。