无法通过 powershell 创建 userS
can't create userS via powershell
我无法通过 csv 文件使用脚本在 powershell 中导入用户,但如果我在屏幕上打印参数,它会按原样显示。
我做错了什么?在我的生活中有很多小胡子,但请专注于剧本。
是 运行 windows server 2016 on the powershell ise, on virtualbox
脚本:
If(-Not(Get-ADOrganizationalUnit -Filter {Name -eq "991-5D"}))
{New-ADOrganizationalUnit "991-5D" -Path (Get-ADDomain).DistinguishedName}
If(-Not(Get-ADOrganizationalUnit -Filter {Name -eq "911-5V"}))
{New-ADOrganizationalUnit "911-5V" -Path (Get-ADDomain).DistinguishedName}
$domain=(Get-ADDomain).DNSRoot
Import-Csv -Path "C:\Alumnos.csv" | foreach-object {
[int]$number= $_.X
If($number -ge 10 -and $number -le 26)
{
$UO="991-5D"
}
//there are many others O.U.
$ou= "UO="+$UO+","+$domain
$UPN = $_.LETRA+$_.PATERNO+$_.X+"@"+ "$domain"
$CUENTA= $_.LETRA+$_.PATERNO+$_.X
New-ADUser -SamAccountName $CUENTA -UserPrincipalName $CUENTA -Name $_.NOMBRE
-SurName $_.PATERNO -GivenName $_.NOMBRE -EmailAddress $UPN -AccountPassword
(ConvertTo-SecureString "Leica666" -AsPlainText -force) -Path $ou
-Enabled $true -ChangePasswordAtLogon $true -Verbose}
数据:
X,PATERNO,MATERNO,NOMBRE,SEGUNDO,LETRA
10,ARÉVALO,CORNEJO,NICOLÁS,ALEJANDRO,N
11,BARRIOS,MONTERO,BENJAMÍN,IGNACIO,B
12,BUSTAMANTE,LOYOLA,IGNACIO,HERNANDO,I
13,BUSTOS,GARRIDO,ARTURO,IGNACIO,A
这是每行的结果:
+ New-ADUser -SamAccountName $CUENTA -UserPrincipalName $CUENTA -Name $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:NotSpecified: (CN=IGNACIO,UO=9...da.com:String)
[New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8335,
Microsoft.ActiveDirectory.Management.Commands.NewADUser
头部:
X,PATERNO,MATERNO,NOMBRE,SEGUNDO,LETRA
回声:
@{X=42; PATERNO=PAYACÁN;马特诺=萨帕塔; NOMBRE=尼古拉斯;第二=N; LETRA=}.NOMBRE
我知道读取文件而不是只读取列读取所有行 ($_),然后打印我在它旁边写的任何内容(".name"、".section" 等)。
我对变量和格式进行了一些更改以使此代码更成功。
$domain=Get-ADDomain
Import-Csv -Path "C:\Alumnos.csv" |
Foreach-Object {
[int]$number= $_.X
If($number -ge 10 -and $number -le 26)
{
$UO="991-5D"
}
$ou = "OU={0},{1}" -f $UO,$domain.DistinguishedName
$UPN = "{0}{1}{2}@{3}" -f $_.LETRA,$_.PATERNO,$_.X,$domain.DNSRoot
$CUENTA= "{0}{1}{2}" -f $_.LETRA,$_.PATERNO,$_.X
New-ADUser -SamAccountName $CUENTA -UserPrincipalName $UPN -Name $_.NOMBRE `
-SurName $_.PATERNO -GivenName $_.NOMBRE -EmailAddress $UPN `
-AccountPassword (ConvertTo-SecureString "Leica666" -AsPlainText -force) -Path $ou `
-Enabled $true -ChangePasswordAtLogon $true -Verbose
}
解释:
$domain
:我已将其设为 ADDomain 对象。这允许在适当的地方访问 DistinguishedName 和 DNSRoot 属性。
-f
运算符:我使用格式运算符使字符串连接尝试更容易阅读。
$ou
:这是使用域的 DistinguishedName 构造的。这是 OU 路径的正确格式。
$UPN
:这是使用域的 DNSRoot 构造的。它显然可以与您的域不同,但必须采用电子邮件地址或 FQDN 格式。
附加评论:
您正在将 -Name
设置为 $_.NOMBRE
。这可能会有问题,因为名称在每个 OU 中必须是唯一的。 Name用于构建CN,这是要求唯一性的地方。如果您在 OU 991-5D 中有 NICOLAS,如果您尝试在同一位置创建另一个 NICOLAS,您将收到错误消息。恕我直言,我会做一些不同的事情。您还可以实现使用 splatting 来构建 New-ADUser
命令的属性,但这只是为了提高可读性。下面是一个泼溅的例子:
$NewUserProperties = @{
SamAccountName = $CUENTA
UserPrincipalName = $UPN
Name = $_.NOMBRE
Surname = $_.PATERNO
GivenName = $_.NOMBRE
EmailAddress = $UPN
AccountPassword = (ConvertTo-SecureString "Leica666" -AsPlainText -force)
Path = $ou
Enabled = $true
ChangePasswordAtLogon = $true
}
New-ADUser @NewUserProperties -Verbose
我无法通过 csv 文件使用脚本在 powershell 中导入用户,但如果我在屏幕上打印参数,它会按原样显示。 我做错了什么?在我的生活中有很多小胡子,但请专注于剧本。
是 运行 windows server 2016 on the powershell ise, on virtualbox
脚本:
If(-Not(Get-ADOrganizationalUnit -Filter {Name -eq "991-5D"}))
{New-ADOrganizationalUnit "991-5D" -Path (Get-ADDomain).DistinguishedName}
If(-Not(Get-ADOrganizationalUnit -Filter {Name -eq "911-5V"}))
{New-ADOrganizationalUnit "911-5V" -Path (Get-ADDomain).DistinguishedName}
$domain=(Get-ADDomain).DNSRoot
Import-Csv -Path "C:\Alumnos.csv" | foreach-object {
[int]$number= $_.X
If($number -ge 10 -and $number -le 26)
{
$UO="991-5D"
}
//there are many others O.U.
$ou= "UO="+$UO+","+$domain
$UPN = $_.LETRA+$_.PATERNO+$_.X+"@"+ "$domain"
$CUENTA= $_.LETRA+$_.PATERNO+$_.X
New-ADUser -SamAccountName $CUENTA -UserPrincipalName $CUENTA -Name $_.NOMBRE
-SurName $_.PATERNO -GivenName $_.NOMBRE -EmailAddress $UPN -AccountPassword
(ConvertTo-SecureString "Leica666" -AsPlainText -force) -Path $ou
-Enabled $true -ChangePasswordAtLogon $true -Verbose}
数据:
X,PATERNO,MATERNO,NOMBRE,SEGUNDO,LETRA
10,ARÉVALO,CORNEJO,NICOLÁS,ALEJANDRO,N
11,BARRIOS,MONTERO,BENJAMÍN,IGNACIO,B
12,BUSTAMANTE,LOYOLA,IGNACIO,HERNANDO,I
13,BUSTOS,GARRIDO,ARTURO,IGNACIO,A
这是每行的结果:
+ New-ADUser -SamAccountName $CUENTA -UserPrincipalName $CUENTA -Name $ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:NotSpecified: (CN=IGNACIO,UO=9...da.com:String)
[New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8335,
Microsoft.ActiveDirectory.Management.Commands.NewADUser
头部: X,PATERNO,MATERNO,NOMBRE,SEGUNDO,LETRA
回声: @{X=42; PATERNO=PAYACÁN;马特诺=萨帕塔; NOMBRE=尼古拉斯;第二=N; LETRA=}.NOMBRE
我知道读取文件而不是只读取列读取所有行 ($_),然后打印我在它旁边写的任何内容(".name"、".section" 等)。
我对变量和格式进行了一些更改以使此代码更成功。
$domain=Get-ADDomain
Import-Csv -Path "C:\Alumnos.csv" |
Foreach-Object {
[int]$number= $_.X
If($number -ge 10 -and $number -le 26)
{
$UO="991-5D"
}
$ou = "OU={0},{1}" -f $UO,$domain.DistinguishedName
$UPN = "{0}{1}{2}@{3}" -f $_.LETRA,$_.PATERNO,$_.X,$domain.DNSRoot
$CUENTA= "{0}{1}{2}" -f $_.LETRA,$_.PATERNO,$_.X
New-ADUser -SamAccountName $CUENTA -UserPrincipalName $UPN -Name $_.NOMBRE `
-SurName $_.PATERNO -GivenName $_.NOMBRE -EmailAddress $UPN `
-AccountPassword (ConvertTo-SecureString "Leica666" -AsPlainText -force) -Path $ou `
-Enabled $true -ChangePasswordAtLogon $true -Verbose
}
解释:
$domain
:我已将其设为 ADDomain 对象。这允许在适当的地方访问 DistinguishedName 和 DNSRoot 属性。-f
运算符:我使用格式运算符使字符串连接尝试更容易阅读。$ou
:这是使用域的 DistinguishedName 构造的。这是 OU 路径的正确格式。$UPN
:这是使用域的 DNSRoot 构造的。它显然可以与您的域不同,但必须采用电子邮件地址或 FQDN 格式。
附加评论:
您正在将 -Name
设置为 $_.NOMBRE
。这可能会有问题,因为名称在每个 OU 中必须是唯一的。 Name用于构建CN,这是要求唯一性的地方。如果您在 OU 991-5D 中有 NICOLAS,如果您尝试在同一位置创建另一个 NICOLAS,您将收到错误消息。恕我直言,我会做一些不同的事情。您还可以实现使用 splatting 来构建 New-ADUser
命令的属性,但这只是为了提高可读性。下面是一个泼溅的例子:
$NewUserProperties = @{
SamAccountName = $CUENTA
UserPrincipalName = $UPN
Name = $_.NOMBRE
Surname = $_.PATERNO
GivenName = $_.NOMBRE
EmailAddress = $UPN
AccountPassword = (ConvertTo-SecureString "Leica666" -AsPlainText -force)
Path = $ou
Enabled = $true
ChangePasswordAtLogon = $true
}
New-ADUser @NewUserProperties -Verbose