导出/导入AD用户,包括manager属性

时间:2014-07-12 00:46:22

标签: powershell active-directory

我正在尝试从csv文件导入用户,该文件是从其他域导出的。不幸的是,manager属性让我很难过。

1。到目前为止我做了什么(出口):
我将 AD1 的用户属性从域名 oldDomain.com 导出到 export.csv 。为了生成export.csv文件,我使用了以下命令:

Get-ADUser -Filter * -Property * | Select-Object givenName,sn,name,displayName,sAMaccountName,manager | Export-Csv -Encoding "UTF8" -path \\hostex\Share\export.csv

这将产生以下文件:

"givenName","sn","name","displayName","sAMaccountName","manager"
"Test","User1","Test User1","Test User1","test.user1",
"Test","User2","Test User2","Test User2","test.user2","CN=Test User1,OU=Users,DC=oldDomain,DC=com"

2。导入问题

之后,我尝试将用户导入/添加到使用域名 newDomain.org AD2 中。我的命令如下:

Import-Csv \\hostex\Share\export.csv | ForEach { New-ADUser -AccountPassword (ConvertTo-SecureString Pass321? -AsPlainText -force) -Path "OU=Users,DC=newDomain,DC=org" -GivenName $_.givenName -Name $_.name -Surname $_.sn -DisplayName $_.displayName -SamAccountName $_.sAMAccountName -Manager $_.manager.Replace("DC=oldDomain,DC=com","DC=newDomain,DC=org") }

这导致ADIdentityResolutionException。由于export.csv的第一行没有为manager属性设置值,因此该命令会尝试在AD2中查找用户标识""。这是不可能找到的。因此,用户不会添加到AD2。

为了解决这个问题,我想添加一些If-Statement,只有当export.csv中的等价值不为null($_.manager -notlike $null)时才设置manager属性的值。任何想法如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

您可能尝试在实际创建该帐户之前引用经理帐户。单独创建帐户,将经理分配给它。此外,从CSV中读取的空字段显示为空字符串,而不是$null,因此您需要与''进行比较才能将其过滤掉。

试试这个:

$users = Import-Csv '\\hostex\Share\export.csv'

$initialPassword = ConvertTo-SecureString 'Pass321?' -AsPlainText -Force

$users | % {
  New-ADUser -AccountPassword $initialPassword `
    -Path 'OU=Users,DC=newDomain,DC=org' `
    -GivenName $_.givenName `
    -Name $_.name `
    -Surname $_.sn `
    -DisplayName $_.displayName `
    -SamAccountName $_.sAMAccountName
}

$users | ? { $_.manager -ne '' } | % {
  $manager = $_.manager -replace 'DC=oldDomain,DC=com$', 'DC=newDomain,DC=org'
  Set-ADUser -Identity $_.sAMAccountName -Manager $manager
}

答案 1 :(得分:0)

执行此操作的一种方法是将完整命令构建为字符串,并附加一行,如果数据中存在,则将manager选项添加到字符串末尾,然后使用Invoke-Expression执行命令。

Import-Csv \\hostex\Share\export.csv | ForEach { 
$NewUserCommand = "New-ADUser -AccountPassword (ConvertTo-SecureString Pass321? -AsPlainText -force) -Path 'OU=Users,DC=newDomain,DC=org' -GivenName $_.givenName -Name $_.name -Surname $_.sn -DisplayName $_.displayName -SamAccountName $_.sAMAccountName"
If ($_.manager) {$NewUserCommand += " -Manager " +  $_.manager.Replace('DC=oldDomain,DC=com','DC=newDomain,DC=org')}
Invoke-Expression $NewUserCommand
}