创建脚本以将用户从CSV导入AD

时间:2016-02-25 17:57:25

标签: powershell active-directory windows-server-2012

我正在尝试构建一个带有字段

的CSV的脚本
firstname, lastname, password

在具有该信息的特定OU中在AD中创建用户。我做过一堆谷歌搜索,这就是我提出的(来自this blog):

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

我有几个问题:

  1. 我想在命令中指定OU,而不是将其放在CSV中。我可以将其更改为:

    -PassThru
  2. -AccountPassword行是什么?

  3. PrincipalName行是否正确?我从一篇博客中得知,这是一种获取密码并将其设置为我的AD用户密码的正确方法。

  4. 我是否需要将SamAccountNameDisplayNamePolling作为单独的字段?这可以尽可能地减少,至少目前是这样。

  5. 您会提出任何提示或更改吗?这是我第一次做这样的剧本,所以我愿意学习。

2 个答案:

答案 0 :(得分: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

  6. $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
    }
    

答案 1 :(得分: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您通常只设置密码永不过期服务帐户,因此如果您要创建普通的旧用户帐户,则不需要它。

    < / LI>