PDA

Показать полную графическую версию : [решено] AD - Добавление в группу на основе атрибутов


Страниц : [1] 2

rudimko
12-09-2012, 19:13
Добрый день, всем гуру PowerSell'a!
Прошу помощи в написании скрипта, цель которого будет следующей:
В зависимости от того как заполнен атрибут "Организация" в AD у пользователя, добавлять его в соответствующую группу. Т.е., я так понимаю, надо как-то сначала задать какая организация будет приравниваться какой группе (например для Организации "Организация 1" должна быть добавлена группа "Пользователи-1" если она еще не добавлена и т.д.
Заранее огромное спасибо...

Kazun
13-09-2012, 08:58
$users = Get-ADUser -Filter * -Properties organization
foreach($user in $users)
{
switch($user.Organization)
{
"Org1" {Add-ADGroupMember -Identity Group1 -Members $user;break}
"Org2" {Add-ADGroupMember -Identity Group2 -Members $user;break}
"Org3" {Add-ADGroupMember -Identity Group3 -Members $user;break}
"Org4" {Add-ADGroupMember -Identity Group4 -Members $user;break}
}
}

rudimko
19-09-2012, 08:44
Спасибо. Небыло времени еще разобраться, но мысль ясна. Позже отпишусь.

rudimko
01-10-2012, 08:08
Супер, все отлично работает. Только атрибут organization сменил на company.
Возник следующий вопрос:

Можно ли исключить пользователя сразу из нескольких групп по маске?
Игрался с командлетом "Remove-ADGroupMember -Identity Group -Members $user -Confirm:$False", так ничего и не вышло...

Kazun
01-10-2012, 09:04
$user.memberof |Where {!($_ -like "Of*")} | Remove-ADGroupMember -Members $user

rudimko
01-10-2012, 14:16
Супер! Ну а для того чтобы совсем автоматизировать процесс... как бы сделать так, чтобы не плодить условия, а поставить в цикл из расчета компаний и групп?

Что имеем на текущий момент, условие для одной компании и группы:

$Company_01 = 'Компания-01'
$Company_02 = 'Компания-02'
$Company_03 = 'Компания-03'

$Group_01 = 'Пользователи-01'
$Group_02 = 'Пользователи-02'
$Group_03 = 'Пользователи-03'

$users = Get-ADUser -Filter {(name -like "Иванов Иван Иванович") -and (Enabled -eq "True")} -Properties "Company","MemberOf"
foreach ($user in $users)
{
switch ($user.Company) {

$Company_01 {
if ($user.MemberOf -match $Group_01) {
"$($user.Name) уже находится в группе $Group_01"
}
else {
if ($user.MemberOf -match "Пользователи-*") {
$user.MemberOf | Where {($_ -match "Пользователи-*")} | Remove-ADGroupMember -Members $user
"$($user.Name) удален из всех пользовательских групп"
}
Add-ADGroupMember -Identity $Group_05_MO -Members $user
"$($user.Name) добавлен в группу $Group_01"
}
}

}
}

Kazun
01-10-2012, 15:26
И что это за условие?

rudimko
01-10-2012, 15:36
Kazun, прошу прощения, не тот кусок вставил... =\ Смысл такой, что если пользователь еще не в "нужной" группе, тогда исключаем его из всех групп по маске "Пользователи-*" и назначаем ему "нужную" группу. Хотелось бы как-то автоматизировать процесс для остальных компаний и групп, чтобы не дублировать тоже самое, изменяя переменные компании и группы... Это возможно?


$Company_01 {
if ($user.MemberOf -match $Group_01) {
"$($user.Name) уже находится в группе $Group_01"
}
else {
if ($user.MemberOf -match "Пользователи-*") {
$user.MemberOf | Where {($_ -match "Пользователи-*")} | Remove-ADGroupMember -Members $user
"$($user.Name) удален из всех пользовательских групп"
}
Add-ADGroupMember -Identity $Group_05_MO -Members $user
"$($user.Name) добавлен в группу $Group_01"
}
}

Kazun
01-10-2012, 15:51
$hash = @{"Company1" = "gr1";"Company2"="gr2"}

if($gr = $hash[$user.company])
{
if ($user.MemberOf -match $gr) {
"$($user.Name) уже находится в группе $gr"
}
else {
$user.MemberOf | Where {$_ -match "Пользователи-*"} | Remove-ADGroupMember -Members $user
"$($user.Name) удален из всех пользовательских групп"
Add-ADGroupMember -Identity $gr -Members $user
"$($user.Name) добавлен в группу $gr"
}
}

rudimko
01-10-2012, 15:56
Здорово! Премного благодарен!

rudimko
02-10-2012, 12:31
Еще маленький вопросик:
Возможно ли, при исключении из групп по маске "Пользователи-*", сделать вывод информации из каких именно групп был исключен пользователь?

Kazun
02-10-2012, 12:32
У командлета Remove-ADGroupMember есть параметр PassThru.

rudimko
02-10-2012, 13:14
А как этот параметр можно применить\отобразить через Write-Host?

Kazun
02-10-2012, 13:40
Добавить в Foreach

rudimko
02-10-2012, 15:54
Вроде бы работает, но т.к. я совсем неопытный, прошу посмотреть и поправить, правильно ли?

$grdel = $user.MemberOf | Where {$_ -match "Пользователи-*"} | Remove-ADGroupMember -Members $user -Confirm:$false -PassThru
foreach ($grdel_str in $grdel)
{
"$($user.Name) удален из группы $($grdel_str.Name)"
}

Paul_ritch
20-08-2015, 18:10
Всем доброго времени суток.
Пришел сюда просить о помощи. Я только приступаю к изучению PowerShell, а посоветоваться в реале мне к сожалению не с кем.
В общем проблема заключается в следующем. Необходимо пользователей из определенной OU добавить в группы. Но сделать это так, что бы если атрибут пользователя (department) совпадал с именем группы(name), то пользователь автоматически становился её участником.

Kazun
21-08-2015, 09:07
Get-ADUser -Filter {department -like '*'} -SearchBase "OU=MyOY,DC=Contoso,DC=Com" | Group-Object Department | Foreach {
$gr = Get-ADGroup -Filter "Name -eq '$($_.Name)'"
if($gr) {Add-ADGroupMember -Identity $gr -Members $_.Group}
}

Paul_ritch
21-08-2015, 10:35
Огромное Вам спасибо! Сейчас буду пробовать.

Paul_ritch
26-08-2015, 09:40
Доброго времени суток.

Пришлось внести некоторые изменения в скрипт. Выяснилось, что значение атрибута departament отличается от имени группы наличием в конце пробела. Попытался решить это путем добавления подстановочного символа.
$gr = Get-ADGroup -Filter "Name -eq '$($_.Name)*'" (Подскажите пожалуйста, верно ли я вставил подстановочный символ "*" ?)

Так же внес некоторые изменения в фильтр поиска пользователей, исключив от туда "ненужных".
Однако при запуске скрипта, он ругается на позиционный параметр, нашел на форуме идентичную проблему, однако символа переноса строки (удаления которого решило проблему) не нашел. Подскажите пожалуйста, в чем может быть причина.

Get-ADGroup : Не удается найти позиционный параметр, принимающий аргумент "if".
строка:1 знак:155
+ Get-ADUser -Filter {department -ne 'департамент*'} -SearchBase "OU=Test,DC=CB,DC=LS" | Group-Object Department | Foreach {$gr = Get-ADGroup <
<<< -Filter "Name -like '$($_.Name)'"if($gr) {Add-ADGroupMember -Identity $gr
-Members $_.Group}}
+ CategoryInfo : InvalidArgument: (:) [Get-ADGroup], ParameterBin
dingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.ActiveDire
ctory.Management.Commands.GetADGroup

Kazun
26-08-2015, 09:52
Пригласите более грамотного специалиста к компьютеру, который сможет правильно скопировать мой пост выше, а не как вздумается, все в одну строку(знак разделения между командами ; ).




© OSzone.net 2001-2012