Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Windows Server 2016/2019/2022 (http://forum.oszone.net/forumdisplay.php?f=119)
-   -   Скрипт PowerShell перенос пользаков с CSV в AD (http://forum.oszone.net/showthread.php?t=347784)

Auvick 28-01-2021 15:16 2947820

Скрипт PowerShell перенос пользаков с CSV в AD
 
Есть старая БД по пользователям, нужно занести ее из CSV файла на новый сервер.
Все действия проходят на тестовых виртуалках.
Написал небольшой скрипт в PS по гайдам, но как ни ни получается довести до ума:
Скрипт
Import-Module ActiveDirectory
Import-Csv -Path "C:\Users\Administrator\Desktop\Users.csv" -Encoding Unicode -Delimiter ";"
ForEach-Object {
$uname = $_.LastName + " " + $_.FirstName
$ouz = $_.OU
New-ADUser -Name $uname `
-GivenName $_.FirstName -Surname $_.LastName `
-Title $_.Role -MobilePhone $_.Phone `
-Department $ou -StreetAddress $_.Street `
-PostalCode $_.ZIP -City $_.City `
-Country $_.Country -Path "OU=$ouz,DC=skills39,DC=wsr" `
-AccountPassword ( ConvertTo-SecureString "P@ssw0rd1" -AsPlainTex -Force) `
-Enabled $true `
-CannotChangePassword $true `
}
Import-Csv -Path "C:\Users\Administrator\Desktop\Users.csv" -Delimiter ";"
ForEach-Object {
$uname = $_.LastName + " " + $_.FirstName
$ouz = $_.OU
Add-ADGroupMember -Identity $ouz -Members $uname -passthru
}

Ошибка
Add-ADGroupMember : Cannot validate argument on parameter 'Identity'. The argument is null. Provide a valid value for the argument, and then try
running the command again.
At C:\Users\Administrator\Desktop\Untitled2.ps1:20 char:29
+ Add-ADGroupMember -Identity $ouz -Members $uname -passthru
+ ~~~~
+ CategoryInfo : InvalidData: (:) [Add-ADGroupMember], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.ActiveDirectory.Management.Commands.AddADGroupMember


New-ADUser : The object name has bad syntax
At C:\Users\Administrator\Desktop\Untitled2.ps1:6 char:1
+ New-ADUser -Name $uname `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=\\ ,OU=,DC=skills39,DC=wsr:String) [New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8335,Microsoft.ActiveDirectory.Management.Commands.NewADUser

Пример CSV
FirstName;LastName;Role;Phone;OU;Street;ZIP;City;Country;Password
Malachi;Alexander;Overal;(01093) 67264;Overal;Rua C 577;39404-335;Moscow;Russia;P@ssw0rd1

Могу ли сразу добавить в AD и группу и пользователей в нее сразу?
И в чем ошибка в моих действиях?

Busla 28-01-2021 19:51 2947843

между Import-Csv и ForEach-Object нужен оператор конвейера |

DJ Mogarych 29-01-2021 09:31 2947893

Вот так попробуйте:
Код:

$csv = Import-Csv "C:\Users\Administrator\Desktop\Users.csv" -Delimiter ';' -Encoding Unicode

foreach ($user in $csv) {
$uname = $user.LastName + " " + $user.FirstName

New-ADGroup "$($user.ou)" -GroupScope Global

New-ADUser -Name "$uname" `
-GivenName $user.FirstName -Surname $user.LastName `
-Title $user.Role -MobilePhone $user.Phone `
-Department "$($user.ou)" -StreetAddress $user.Street `
-PostalCode $user.ZIP -City $user.City `
-Country $user.Country -Path "OU=$($user.ou),DC=skills39,DC=wsr" `
-AccountPassword (ConvertTo-SecureString "$($user.Password)" -AsPlainText -Force) `
-Enabled $true `
-CannotChangePassword $true

"$($user.ou)" |Add-ADGroupMember -Members (Get-ADUser -Filter "Name -eq '$uname'")
}


Auvick 29-01-2021 11:33 2947905

Цитата:

Цитата DJ Mogarych
Вот так попробуйте: »

Выдал ошибки, но создал группы, вижу что только жалуется на готовую группу,
Скрытый текст
New-ADGroup : The specified group already exists
At C:\Users\Administrator\Desktop\Untitled2.ps1:7 char:1
+ New-ADGroup "$($user.ou)" -GroupScope Global
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=Manager,CN=Users,DC=skill39,DC=wsr:String) [New-ADGroup], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:1318,Microsoft.ActiveDirectory.Management.Commands.NewADGroup

New-ADUser : The server is unwilling to process the request
At C:\Users\Administrator\Desktop\Untitled2.ps1:9 char:1
+ New-ADUser -Name "$uname" `
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (CN=\\ ,OU=Manager,DC=skills39,DC=wsr:String) [New-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.NewADUser

Get-ADUser : A referral was returned from the server
At C:\Users\Administrator\Desktop\Untitled2.ps1:19 char:45
+ ... | Add-ADGroupMember -Members (Get-ADUser -Filter "Name -eq '$uname'")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Get-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8235,Microsoft.ActiveDirectory.Management.Commands.GetADUser

Грешу на сервер т.к. на машине другого офиса сработал на ура этот скрипт:
Скрытый текст
Import-Module ActiveDirectory
Import-Csv C:\users.csv -Delimiter ";" | ForEach-Object{$Name = $_.LN + $_.FN
New-ADUser -Name $Name `
-GivenName $_.FN `
-Surname $_.LN `
-Title $_.Role `
-MobilePhone $_.Phone `
-Department $_.OU `
-StreetAddress $_.Street `
-PostalCode $_.ZIP `
-City $_.City `
-Country RU `
-Path ("OU=" + $_.OU + ",DC=skill39,DC=wsr") `
-AccountPassword (ConverTo-secureString "P@ssw0rd1" -AsPlainText -Force) `
-Enabled $true `
-CannotChangePassword $true}

Import-Csv C:\users.csv -Delimiter ";" | ForEach-Object{$Mem = $_.LN + $_.FN
Add-ADGroupMember -Identity $_.OU `
-Members $Mem}

DJ Mogarych 30-01-2021 09:37 2947974

Вероятно, лучше разделить скрипт на 2 части, одна будет создавать группы, а вторая - добавлять туда пользователей.
Так как AD - это база данных, да ещё и с репликацией между серверами, лучше создать группы, подождать несколько минут, и потом уже запускать создание и добавление пользователей в них.

Auvick 01-02-2021 12:36 2948326

Цитата:

Цитата DJ Mogarych
Вероятно, лучше разделить скрипт »

И соответственно первая ошибка о уже созданной группе пропала, но остальное осталось.


Время: 19:55.

Время: 19:55.
© OSzone.net 2001-