2016-02-25 56 views
0

我試圖建立一個腳本,將採取以CSV領域創建腳本從CSV導入用戶AD

firstname, lastname, password

,並與該信息特定的OU創建AD用戶。我已經做了一堆google搜索的,這就是我想出(從this blog):

Import-Csv .\userImport.csv | ForEach-Object { 
    New-ADUser 
    -Name $_.DisplayName 
    -UserPrincipalName $_.UserPrincipalName 
    -SamAccountName $_.Username 
    -FirstName $_.FirstName 
    -DisplayName $_.DisplayName 
    -LastName $_.Lastname 
    -Path $_.Path 
    -AccountPassword (ConvertTo-SecureString $_.Password -AsPlainText -force) 
    -Enabled $True 
    -PasswordNeverExpires $True 
    -PassThru 
} 

我有幾個問題:

  1. 我要指定OU在我的命令中,而不是在CSV中。可我只是將其更改爲:

    -Path OU=MyOU,DC=Domain,DC=Local 
    
  2. 什麼是-PassThru線?

  3. -AccountPassword行是否正確?我從一個博客中得到了這個消息,這表明這是獲取密碼並將其設置爲我的AD用戶密碼的正確方法。

  4. 我需要將PrincipalName,SamAccountNameDisplayName作爲單獨的字段嗎?至少目前來說,這可以儘可能小。

  5. 您會提出什麼提示或更改?這是我第一次做這樣的劇本,所以我願意學習。

回答

2
  1. 是的,你可以指定參數,無論您喜歡的方式,他們不需要來自於輸入文件。

  2. -PassThru使得New-ADUser回顯創建的用戶對象。默認情況下,cmdlet不會返回任何內容。

  3. 是的,-AccountPassword參數是正確的,前提是CSV的password字段包含明文密碼。

  4. 如果您可以從現有字段值構造參數,則不必爲每個參數參數都具有單獨的CSV字段。例如,您很可能可以創建來自名和姓的值,例如DisplayNameSamAccountName,例如,像這樣:

    -SamAccountName ($_.firstname.Substring(0,1) + $_.lastname).ToLower() 
    -DisplayName ('{0} {1}' -f $_.firstname, $_.lastname) 
    

    你也不需要指定每個參數。例如,省略時會自動生成UPN(用戶主體名稱),並且顯示名稱將默認爲該名稱。

  5. 你不能像你一樣包裝線條。 PowerShell無法閱讀您的想法,也不會知道您打算繼續下一行的聲明,除非您聲明或聲明顯然不完整。使用反引號逃避線路中斷。此外,名和姓的參數是-GivenName-Surname,而不是-FirstName-LastName

$csv = '.\userImport.csv' 
$ou = 'OU=MyOU,DC=Domain,DC=Local' 

Import-Csv $csv | ForEach-Object { 
    $name = '{0} {1}' -f $_.firstname, $_.lastname 
    $acct = ($_.firstname.Substring(0,1) + $_.lastname).ToLower() 
    $pw = ConvertTo-SecureString $_.password -AsPlainText -Force 

    New-ADUser -Name $name ` 
    -SamAccountName $acct ` 
    -GivenName $_.firstname ` 
    -Surname $_.lastname ` 
    -Path $ou ` 
    -AccountPassword $pw ` 
    -Enabled $true ` 
    -PasswordNeverExpires $true ` 
    -PassThru 
} 
0
  1. OU - 如果你想他們都在同一個OU,你可以硬編碼(記得引號)

    -Path "OU=MyOU,DC=Domain,DC=Local"

  2. -PassThru

    -PassThru參數允許您從cmdlet請求默認情況下不返回輸出的輸出。 (The PassThru Parameter: Gimme Output

    即代替New-ADUser只是執行,然後回到你到下一行,它實際上將打印出新的用戶創建信息,以提示。

  3. 是的-AccountPassword將SecureString作爲參數。命令ConvertTo-SecureString將純文本字符串轉換爲SecureString,然後可以將其傳遞給-AccountPassword參數

  4. 您不需要-UserPrincipalName。你確實需要-SamAccountName-DisplayName可以改爲:

    -DisplayName "$($_.FirstName) $($_.Lastname)" 
    
  5. 這是大規模生產佔一個相當標準的腳本,所以它是相當不錯的事情是這樣的。我所看到的唯一變化是-PasswordNeverExpires $True您通常只會真正設置密碼永不過期服務帳戶,所以如果您要創建普通的舊用戶帳戶,則不需要它。