创建脚本从CSV导入用户AD
我试图建立一个脚本,将采取以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
}
我有几个问题:
-
我要指定OU在我的命令中,而不是在CSV中。可我只是将其更改为:
-Path OU=MyOU,DC=Domain,DC=Local
什么是
-PassThru
线?-AccountPassword
行是否正确?我从一个博客中得到了这个消息,这表明这是获取密码并将其设置为我的AD用户密码的正确方法。我需要将
PrincipalName
,SamAccountName
和DisplayName
作为单独的字段吗?至少目前来说,这可以尽可能小。您会提出什么提示或更改?这是我第一次做这样的剧本,所以我愿意学习。
是的,你可以指定参数,无论您喜欢的方式,他们不需要来自于输入文件。
-PassThru
使得New-ADUser
回显创建的用户对象。默认情况下,cmdlet不会返回任何内容。是的,
-AccountPassword
参数是正确的,前提是CSV的password
字段包含明文密码。-
如果您可以从现有字段值构造参数,则不必为每个参数参数都具有单独的CSV字段。例如,您很可能可以创建来自名和姓的值,例如
DisplayName
或SamAccountName
,例如,像这样:-SamAccountName ($_.firstname.Substring(0,1) + $_.lastname).ToLower() -DisplayName ('{0} {1}' -f $_.firstname, $_.lastname)
你也不需要指定每个参数。例如,省略时会自动生成UPN(用户主体名称),并且显示名称将默认为该名称。
你不能像你一样包装线条。 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
}
-
OU - 如果你想他们都在同一个OU,你可以硬编码(记得引号)
-Path "OU=MyOU,DC=Domain,DC=Local"
-
-PassThru
-PassThru
参数允许您从cmdlet请求默认情况下不返回输出的输出。 (The PassThru Parameter: Gimme Output)即代替
New-ADUser
只是执行,然后回到你到下一行,它实际上将打印出新的用户创建信息,以提示。 是的
-AccountPassword
将SecureString作为参数。命令ConvertTo-SecureString
将纯文本字符串转换为SecureString,然后可以将其传递给-AccountPassword
参数-
您不需要
-UserPrincipalName
。你确实需要-SamAccountName
。-DisplayName
可以改为:-DisplayName "$($_.FirstName) $($_.Lastname)"
这是大规模生产占一个相当标准的脚本,所以它是相当不错的事情是这样的。我所看到的唯一变化是
-PasswordNeverExpires $True
您通常只会真正设置密码永不过期服务帐户,所以如果您要创建普通的旧用户帐户,则不需要它。