Я ввожу список групп для каждого пользователя в CSV и пытаюсь создать пользователей с помощью кода PowerShell.
Это код PowerShell:
- name: Change group for AD users
ansible.windows.win_powershell:
script: |
[CmdletBinding()]
param (
[array]
$datalist
)
$output = foreach ($user in $datalist) {
$name = $user.SamAccountName
$groups = $user.Groups
$users = Get-ADUser -Filter "SamAccountName -eq '$name'"
Get-ADUser -Filter "SamAccountName -eq '$name'" -Properties MemberOf | ForEach-Object {$_.MemberOf | Remove-ADGroupMember -Members $users -Confirm:$false}
Add-ADGroupMember -Identity $groups -Members $users
}
parameters:
datalist: "{{ hostvars.localhost.list }}"
В итоге я получил эту ошибку:
"message": "Cannot convert 'System.Object[]' to the type 'Microsoft.ActiveDirectory.Management.ADGroup' required by parameter 'Identity'. Specified method is not supported."
Также пробовал '$groups'
:
"message": "Cannot find an object with identity: '$groups' under: 'DC=adexample,DC=local'.",
И "$groups"
:
"message": "Cannot find an object with identity: 'CN=GroupA,OU=Groups,DC=adexample,DC=local CN=Test Group,OU=Groups,DC=adexample,DC=local' under: 'DC=adexample,DC=local'.",
Вот как я ввожу свой список групп в файл CSV:
Как правильно написать $groups, чтобы мой список групп выводился правильно?
Обновлено с помощью CSV в виде обычного текста:
Имя, SamAccountName, путь, UserPrincipalName, группы
Грег,gre.b87,"OU=временные пользователи,DC=adexample,DC=local",[email protected],"CN=GroupA,OU=Groups,DC=adexample,DC=local;CN=Test Group ,OU=группы,DC=пример,DC=локальный"
Zee,zeef.cd,"OU=временные пользователи,DC=adexample,DC=local",[email protected],"CN=GroupA,OU=Groups,DC=adexample,DC=local;CN=Test Group ,OU=группы,DC=пример,DC=локальный"
Я адаптировал bhuvanachand komara к своему, и это сработало для меня:
$output = foreach ($user in $datalist) {
$name = $user.SamAccountName
$groups = $user.Groups -split ";"
Get-ADUser -Filter "SamAccountName -eq '$samname'"
$users = Get-ADUser -Filter "SamAccountName -eq '$samname'"
foreach ($group in $groups) {
Add-ADGroupMember -Identity $group -Members $user
}
Get-ADUser -Filter "SamAccountName -eq '$samname'" -Properties MemberOf | ForEach-Object {$_.MemberOf | Remove-ADGroupMember -Members $users -Confirm:$false}
}
Главное, что мне нужно добавить $groups = $user.Groups -split ";" и еще один цикл foreach для групп.
Не видя, как буквально выглядит ваш CSV, мы бы просто угадывали правильный ответ.
$csvFile = 'path\to\csv\file.csv'
$users = Import-Csv -Path $csvFile
foreach ($user in $users) {
$samAccountName = $user.SamAccountName
$givenName = $user.GivenName
$surname = $user.Surname
$password = $user.Password
$email = $user.Email
$groups = $user.Groups -split ","
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
New-ADUser -SamAccountName $samAccountName -GivenName $givenName -Surname $surname -DisplayName "$givenName $surname" -EmailAddress $email -AccountPassword $securePassword -Enabled $true
foreach ($group in $groups) {
Add-ADGroupMember -Identity $group -Members $samAccountName
}
}
Пример CSV-файла
SamAccountName,Имя,Фамилия,Пароль,Электронная почта,Группы user1,chand,komara,Password1,[email protected],group1,group2 user2,bhuvan,unnava,Password2,[email protected],group2,group3
Для каждого пользователя в массиве $users код создает нового пользователя Active Directory с помощью командлета New-ADUser с указанным SamAccountName. GivenName, Surname, DisplayName, EmailAddress и пароль учетной записи. Затем он добавляет пользователя в указанные группы с помощью командлета Add-ADGroupMember.
Спасибо за ответ. Мне просто нужно добавить $groups = $user.Groups -split ";" и цикл foreach для групп для решения проблемы.
Пожалуйста, отредактируйте свой вопрос и скопируйте и вставьте в виде обычного текста, как выглядит ваш CSV, а также код, который вы используете для его импорта.