Перечислите все группы и их участников с PowerShell на Win2008r2

Вашей проблемой могло быть любое количество вещей, но так как ясно, что Вы уже не первая вещь, которую необходимо сделать, установить Monit или некоторое подобное программное обеспечение. Monit является демоном, который работает на Вашем сервере и, пока ОС работает, осуществляет регулярные проверки, которые осуществляют приложения, которые Вы определяете. Можно сказать этому проверять, что Apache доступен и если это не апач перезапуска. Можно также сказать этому перезапускать апача в зависимости от системных переменных как высокая загрузка или полный поршень. После того как Вы имеете, которые настраивают Вас, может, по крайней мере, знать, что Ваш сайт не понизится, когда это произойдет, и Monit пошлет Вам по электронной почте, когда он принимает меры, таким образом, у Вас будет легкий журнал того, когда проблема произойдет для сравнения журналам и т.д.

http://mmonit.com/monit/

13
задан 22 August 2013 в 16:49
5 ответов

Дайте мне коды! силы, активируйте!

$Groups = Get-ADGroup -Properties * -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com" 
Foreach($G In $Groups)
{
    Write-Host $G.Name
    Write-Host "-------------"
    $G.Members
}

Дело в том, просто не торопитесь и разбейте его на шаги. Я знаю что это Забавно попытаться уместить все, включая кухонную раковину, в один слой с помощью Powershell, но это ни в коем случае не требуется.

Несколько примечаний:

  • Вам не нужно делать Get- ADGroupMember , если вы собираете свойство Members в исходном командлете Get-ADGroup . Плюс в этом то, что он вдвое сокращает количество вызовов, которые вы должны сделать в AD, что должно ускорить работу вашего скрипта и снизить нагрузку на контроллер домена.

  • $ G.Members отобразит всех членов домена группа $ G ... в Powershell 3. В Powershell 2 вам все равно может потребоваться поместить еще один объект Foreach внутри объекта Foreach для перечисления членов группы. ( Эй, чувак, я слышал, ты любишь петли ... )

  • Я использую здесь Write-Host , что ужасно. Вы никогда не должны использовать Write-Host . Вместо этого вы должны создавать и выводить объекты, а не текст, но это была совершенно другая тема, и мне было лень делать это для этого ответа.

25
ответ дан 2 December 2019 в 21:18

Это гораздо лучшее решение. Это поместит все в 3 столбца csv с именем группы, именем пользователя и именем учетной записи Sam. Когда в группе 400 пользователей, гораздо проще определить, в какой группе находится кто-то, так как вам не нужно прокручивать.

Import-Module ActiveDirectory

$Groups = (Get-AdGroup -filter * | Where {$_.name -like "**"} | select name -ExpandProperty name)

$Table = @()

$Record = @{
  "Group Name" = ""
  "Name" = ""
  "Username" = ""
}


Foreach ($Group in $Groups) {

  $Arrayofmembers = Get-ADGroupMember -identity $Group -recursive | select name,samaccountname

  foreach ($Member in $Arrayofmembers) {
    $Record."Group Name" = $Group
    $Record."Name" = $Member.name
    $Record."UserName" = $Member.samaccountname
    $objRecord = New-Object PSObject -property $Record
    $Table += $objrecord

  }
}

$Table | export-csv "C:\temp\SecurityGroups.csv" -NoTypeInformation
9
ответ дан 2 December 2019 в 21:18

Если вы когда-нибудь столкнетесь с проблемой Ограничение размера с группами, содержащими более 5000 членов, вы можете изменить одну строку следующим образом:

$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *
0
ответ дан 2 December 2019 в 21:18

Мне пришлось добавить .имя после $ group , чтобы эта работа работала для меня.

$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname
1
ответ дан 2 December 2019 в 21:18

Вот скрипт, который экспортирует все группы в OU в отдельный файл для каждой группы с именем и описанием группы. Если кому-то это нужно ..

$groups = Get-ADGroup -filter * -SearchBase "OU=XXX, DC=XX,DC=XX"
ForEach ($g in $groups) 
{
$path = "c:\scripts\" + $g.Name + ".csv"
Get-ADGroup -Identity $g.Name -Properties * | select name,description | Out-File $path -Append

$results = Get-ADGroupMember -Identity $g.Name -Recursive | Get-ADUser -Properties displayname, name 

ForEach ($r in $results){
New-Object PSObject -Property @{       

    DisplayName = $r.displayname | Out-File $path -Append
  }
}   
}
0
ответ дан 2 December 2019 в 21:18

Теги

Похожие вопросы