我无法通过csv文件通过脚本在Powershell中导入用户,但是如果我在屏幕上打印参数,它将按原样显示它们。 我做错了什么?我一生中都留着胡须,但是只专注于剧本。
在VirtualBox上的Powershell ise上运行Windows Server 2016
脚本:
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; MATERNO = ZAPATA; NOMBRE =NICOLÁS; SEGUNDO = N; LETRA =}。NOMBRE
我知道读取文件,而不是仅读取列读取所有行($ _),然后打印我在文件旁边写的所有内容(“ .name”,“。section”等)。
答案 0 :(得分:0)
我进行了一些变量和格式更改,以使此代码更加成功。
$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
运算符:我使用format运算符使读取字符串串联尝试更加容易。$ou
:这是使用域的DistinguishedName构造的。这是OU路径的正确格式。$UPN
:这是使用域的DNSRoot构造的。它显然可以与您的域不同,但必须采用电子邮件地址或FQDN格式。其他评论:
您正在将-Name
设置为$_.NOMBRE
。这可能是有问题的,因为Name在每个OU中必须是唯一的。名称用于构建CN,这是需要唯一性的地方。如果您在OU 991-5D中有NICOLAS,则尝试在同一位置创建另一个NICOLAS时将出现错误。恕我直言,我会做一些不同的事情。您也可以实现使用溅写来构建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