2016-02-25 54 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您通常只会真正设置密码永不过期服务帐户,所以如果您要创建普通的旧用户帐户,则不需要它。