簡體   English   中英

導出/導入 AD 用戶,包括經理屬性

[英]Export/Import AD Users including manager attribute

我正在嘗試從 csv 文件導入用戶,該文件是從不同域導出的。 不幸的是, manager屬性讓我很難受。

1.到目前為止我所做的(導出):
我將域名為oldDomain.com 的AD1 中的用戶屬性導出到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 屬性的值。 任何想法如何實現這一目標?

您可能會在實際創建經理帳戶之前嘗試引用該帳戶。 將帳戶創建與為其分配經理分開。 此外,從 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
}

執行此操作的一種方法是將完整命令構建為帶有附加行的字符串,該行將管理器選項添加到字符串末尾(如果它存在於數據中),然后使用 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM