【问题标题】:Export/Import AD Users including manager attribute导出/导入 AD 用户,包括经理属性
【发布时间】:2014-09-02 17:11:46
【问题描述】:

我正在尝试从一个 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.orgAD2 中。我的命令如下所示:

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 语句,仅当 export.csv 中的等效值不为空 ($_.manager -notlike $null) 时才设置 manager 属性的值。任何想法如何实现这一目标?

【问题讨论】:

    标签: powershell active-directory


    【解决方案1】:

    您可能会在实际创建经理帐户之前尝试引用该帐户。将帐户创建与为其分配经理分开。此外,从 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
    }
    

    【讨论】:

      【解决方案2】:

      执行此操作的一种方法是将完整的命令构建为带有附加行的字符串,如果它存在于数据中,则将 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
      }
      

      【讨论】:

        猜你喜欢
        • 2014-01-23
        • 2019-01-18
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多