2015-04-09 2 views
-1

Я пытаюсь сделать для каждой группы пользователей. а затем получить более подробную информацию о пользователях.PowerShell Получение всех пользователей из нескольких групп

Может кто-нибудь понять, почему нижеследующее не работает?

do 
    { 

[email protected]('"Group1"' 
     '"Group2"', 
     '"Group3"', 
     '"Group4"', 
     '"Group5"') 

try{ 
     $Group | ForEach{ 
    ForEach ($member in (Get-ADGroupMember $_)) 
    { 
    $user = Get-ADUser $member -Properties * 
    $useracc = $user.samaccountname 
    $userid = $user.EmployeeID 
    $userout = $useracc + " - " + $userid 
    write-output $userout | out-file -filepath c:\temp\New.txt -Append -NoClobber 
    } 
    } 
    } 
    Catch 
     { 
    write-output $userout | out-file -filepath c:\temp\error.txt   } 


    } 
until ($memeber -eq $Null) 
+0

По крайней мере, вам не хватает 3 закрывающих скобок, и от всех я могу сказать вам, не выводят ничего, только один раз присваивая каждому пользователю один пользователь, а не выводит его вообще. – TheMadTechnician

+0

thats только snipit, все закрыто правильно, и есть больше, чтобы следовать за witch catch. –

+0

По крайней мере, измените цикл 'ForEach' так, чтобы вы не повторно использовали' $ user', поэтому 'ForEach ($ user in (get-adgroupmember $ _))' становится 'ForEach ($ member in (get-adgroupmember $ _)) ', а затем измените' $ user = Get-ADUser $ user -prop * ', чтобы указать свойство различаемого имени, например' $ ADUser = Get-ADUser $ member.distinguishedname -prop * '... посмотреть, помогает ли это. – TheMadTechnician

ответ

1

Хорошо, давайте начнем с того, ваш Do{}Until() цикл не имеет смысла, по крайней мере, в коде примера вы дали. Затем вы должны быть немного менее глобальными на своем Try/Catch. Я избегаю ставить петли ForEach в пределах ForEach-Object петель, потому что на самом деле сложно отслеживать вещи, но это я.

Итак, что у вас есть над функциями. Я заменил «Group1» на различающееся имя группы в моем домене, членом которой я являюсь, выполнил ваш код как есть и вывел ожидаемый файл. Нет причин, по которым он не будет работать с несколькими группами. Это было довольно медленно, но я объясняю это тем, как был написан сценарий. Я переписал его немного, и это должно сделать то же самое, но быстрее, и с немногими лучшей обработкой ошибок:

[email protected]('"Group1"' 
    '"Group2"', 
    '"Group3"', 
    '"Group4"', 
    '"Group5"') 
ForEach($Group in $Groups){ 
    Try{ 
     Get-ADGroupMember $Group | Where {$_.objectClass -eq 'user' } | Select -expand distinguishedName | Get-ADUser -Properties EmployeeID | ForEach { 
      "{0}`t-`t{1}" -f $_.samaccountname, $_.employeeid | Add-Content C:\Temp\New.txt 
     } 
    } 
    Catch{ 
     "Error getting members for $Group" | Add-Content C:\Temp\Errors.txt 
    } 
} 
+0

Префект, я думаю, что просто потерялся в своем Foreach, как вы объясните, Я сделал несколько небольших изменений, но для себя и добавил немного больше, в вашем eaxmple есть небольшая опечатка. Массив должен быть Group, а не Group. –

+0

Вы правы, это был тип (я использовал фактическую группу, поэтому я не копировал и не вставлял эту часть из моего PowerShell, я просто зацепил ее из вашего примера). Я обновил ответ, спасибо, что поймал его! – TheMadTechnician

Смежные вопросы