我正在尝试构建一个带有字段
的CSV的脚本firstname, lastname, password
在具有该信息的特定OU中在AD中创建用户。我做过一堆谷歌搜索,这就是我提出的(来自this blog):
-Path OU=MyOU,DC=Domain,DC=Local
我有几个问题:
我想在命令中指定OU,而不是将其放在CSV中。我可以将其更改为:
-PassThru
-AccountPassword
行是什么?
PrincipalName
行是否正确?我从一篇博客中得知,这是一种获取密码并将其设置为我的AD用户密码的正确方法。
我是否需要将SamAccountName
,DisplayName
和Polling
作为单独的字段?这可以尽可能地减少,至少目前是这样。
您会提出任何提示或更改吗?这是我第一次做这样的剧本,所以我愿意学习。
答案 0 :(得分:2)
是的,您可以指定参数,无论您喜欢哪种方式,都不需要来自输入文件。
-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
}
答案 1 :(得分:0)
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
您通常只设置密码永不过期服务帐户,因此如果您要创建普通的旧用户帐户,则不需要它。