не может создавать пользователей через powershell - PullRequest
0 голосов
/ 10 июня 2019

Я не могу импортировать пользователей в powershell со скриптом через файл csv, но если я распечатываю параметры на экране, они отображаются так, как должны. что я делаю не так? в моей жизни много с этими усами, но, пожалуйста, сосредоточьтесь на сценарии.

работает под управлением windows server 2016 на powershell ise, в 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, Номбр, Сегундо, LETRA

эхо: @ {Х = 42; PATERNO = PAYACÁN; Materno = Zapata; Nombre = NicoLas; Сегундо = N; LETRA =}. Номбры

Я знаю, что читает файл и вместо чтения просто столбец читает всю строку ($ _), а затем печатает все, что я написал рядом с ним (". Name", ".section" и т. Д.).

1 Ответ

0 голосов
/ 10 июня 2019

Я сделал некоторые переменные и изменения формата, чтобы сделать этот код более успешным.

$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: Iсделал это объектом ADDomain.Это позволяет при необходимости обращаться к свойствам DistinguishedName и DNSRoot.
  • -f оператор: я использовал оператор форматирования, чтобы упростить чтение попыток объединения строк.
  • $ou:Это построено с использованием DistinguishedName домена.Это правильный формат для пути OU.
  • $UPN: он создается с использованием DNSRoot домена.Очевидно, что он может отличаться от вашего домена, но должен иметь адрес электронной почты или полное доменное имя.

Дополнительные комментарии:

Вы устанавливаете -Nameбыть $_.NOMBRE.Это может быть проблематично, поскольку имя должно быть уникальным в каждом подразделении.Имя используется для построения CN, где требуется уникальность.Если у вас есть NICOLAS в OU 991-5D, вы получите ошибку, если попытаетесь создать еще одну 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...