Вашей проблемой могло быть любое количество вещей, но так как ясно, что Вы уже не первая вещь, которую необходимо сделать, установить Monit или некоторое подобное программное обеспечение. Monit является демоном, который работает на Вашем сервере и, пока ОС работает, осуществляет регулярные проверки, которые осуществляют приложения, которые Вы определяете. Можно сказать этому проверять, что Apache доступен и если это не апач перезапуска. Можно также сказать этому перезапускать апача в зависимости от системных переменных как высокая загрузка или полный поршень. После того как Вы имеете, которые настраивают Вас, может, по крайней мере, знать, что Ваш сайт не понизится, когда это произойдет, и Monit пошлет Вам по электронной почте, когда он принимает меры, таким образом, у Вас будет легкий журнал того, когда проблема произойдет для сравнения журналам и т.д.
Дайте мне коды!
силы, активируйте!
$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
. Вместо этого вы должны создавать и выводить объекты, а не текст, но это была совершенно другая тема, и мне было лень делать это для этого ответа.
Это гораздо лучшее решение. Это поместит все в 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
Если вы когда-нибудь столкнетесь с проблемой Ограничение размера
с группами, содержащими более 5000 членов, вы можете изменить одну строку следующим образом:
$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *
Мне пришлось добавить .имя
после $ group
, чтобы эта работа работала для меня.
$Arrayofmembers = Get-ADGroupMember -identity $Group.name -recursive | select name,samaccountname
Вот скрипт, который экспортирует все группы в 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
}
}
}