无法通过 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