无法通过Powershell创建用户

时间:2019-06-10 01:42:47

标签: powershell windows-server-2016

我无法通过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”等)。

1 个答案:

答案 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
相关问题