Win2008r2'de PowerShell ile Tüm Grupları ve Üyelerini Listele


14

Powershell'de yeniyim, ancak el kitapları okuyorum ve biraz pratik yaptım. Amacım, tüm Güvenlik Gruplarındaki tüm kullanıcıları belirtilen yol altında listelemek. Bunu yapmanın yolunu buldum:

 get-adgroup -Filter * -SearchBase "OU=Groups,DC=corp,DC=ourcompany,DC=Com"  | %{Get-ADGroupMember $_.name} | ft name

Ama sorun şu ki grup adını göremiyorum. Tek aldığım bir grup kullanıcı. Birisi bana bu grubun tüm üyeleri listelenmeden önce grup adını nasıl görüntüleyebileceğimi söylese iyi olur. Teşekkürler.


2
Eğer arama üssünden sonra değişerek oynarsanız, % { "GroupName: $($_.Name)"; "==========" ; Get-ADGroupMember $_ } | ft nameo zaman peşinde olduğunuz şeyi de alabilirsiniz. Ryan'ın cevabı hala daha iyi, ama isterseniz tek bir satır.
TheCleaner

Teşekkürler TheCleaner. Dediğim gibi PS için yeniyim, ama bu örnekler anlamada gerçekten yardımcı oluyor.
Alec T

Örneğiniz de harika çalışıyor!
Alec T

Yanıtlar:


26

Gimme the codes! güçler, etkinleştirin!

$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
}

Mesele şu ki, sadece zaman ayırın ve adımlara ayırın. Her şeyi ve mutfak lavabosunu Powershell ile bir astar içine sığdırmaya çalışmanın eğlenceli olduğunu biliyorum, ama kesinlikle gerekli değil.

Birkaç not:

  • Get-ADGroupMemberİlk Get-ADGroupCmdlet'te Members özelliğini toplarsanız bunu yapmanız gerekmez . Bununla ilgili iyi bir şey, AD'ye yapmanız gereken çağrıların sayısını yarıya indirir, bu da komut dosyanızın daha hızlı çalışmasını sağlar ve etki alanı denetleyicisindeki yükü kolaylaştırır.

  • $ G.Üyeler Powershell 3'te $ G ... grubunun tüm üyelerini görüntüler. Powershell 2'de, yine de grup üyeleri arasında numaralandırmak için Foreach'ın içine başka bir Foreach koymanız gerekebilir. ( Hey, seni döngüler gibi duydum ... )

  • Kullandığım Write-Hostbrüt olan burada. Asla gerçekten kullanmamalısınız Write-Host. Bunun yerine, metin değil, nesneler inşa etmeli ve çıktı almalısınız, ama bu başka bir konuydu ve bu cevap için bunu yapmak için çok tembeltim.


10

İşte çok daha iyi bir çözüm. Bu, her şeyi grup adı, kullanıcı adı ve sam hesap adı ile 3 sütunluk bir csv'ye koyacaktır. Kaydırma yapmak zorunda olmadığınız için bir grupta 400 kullanıcı olduğunda birisinin hangi grupta olduğunu bulmak çok daha kolay.

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

Belki bir gruba 400 kullanıcı eklemek ve csv veya xlsx dosyasından veri yakalamak mümkün ?
Kiquenet

cehaletim için üzgünüm ama kodun hangi dilde?
ScottC

yorumum için üzgünüm gecikme ama powershell dil oldu
Riley Carney

1

Benim için bu işi yapmak için .namesonra eklemek zorunda kaldı $group.

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

0

Sorun Size Limit, 5000'den fazla üye içeren gruplarla karşılaşırsanız, bir satırı aşağıdaki gibi değiştirebilirsiniz:

$Arrayofmembers = (Get-ADGroup $Group -Properties member).member | Get-ADUser -Properties *

0

Bir kuruluş birimindeki tüm grupları, grup adı ve açıklamasına sahip her grup için ayrı bir dosyaya aktaran komut dosyaları aşağıdadır. Birisi isterse ..

$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
  }
}   
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.