सभी समूहों और उनके सदस्यों को Win2008r2 पर PowerShell के साथ सूचीबद्ध करें


14

मैं पॉवरशेल के लिए नया हूं, लेकिन मैंने मैनुअल पढ़ा है और थोड़ा अभ्यास किया है। मेरा उद्देश्य निर्दिष्ट पथ के तहत सभी उपयोगकर्ताओं को सभी सुरक्षा समूहों में सूचीबद्ध करना है। मुझे इसे करने का तरीका मिल गया है:

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

लेकिन समस्या यह है कि मुझे समूह का नाम नहीं दिखता है। मेरे पास सभी उपयोगकर्ताओं का एक समूह है। यह अच्छा होगा यदि कोई मुझे बता सके कि इस समूह के सभी सदस्यों को सूचीबद्ध करने से पहले समूह का नाम कैसे प्रदर्शित किया जाए। धन्यवाद।


2
यदि आप सर्चबेस के बाद बदलते समय के साथ खेलते हैं, % { "GroupName: $($_.Name)"; "==========" ; Get-ADGroupMember $_ } | ft nameतो आपको वह मिल सकता है जो आप के बाद है। रयान का जवाब अब भी बेहतर है, लेकिन अगर आप चाहें तो यह एक ही लाइन है।
क्लेनर

थैंक्यू थेरियन। जैसे मैंने कहा कि मैं PS के लिए नया हूं, लेकिन ये उदाहरण वास्तव में समझ के साथ मदद करते हैं।
एलेक टी

आपका उदाहरण भी महान काम करता है!
एलेक टी

जवाबों:


26

Gimme the codes! शक्तियां, सक्रिय करें!

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

बिंदु जा रहा है, बस अपना समय लें और इसे चरणों में तोड़ दें। मुझे पता है कि सब कुछ प्राप्त करने की कोशिश करना मजेदार है और रसोई सिंक पॉवर्सशेल के साथ एक-लाइनर में फिट होने के लिए, लेकिन यह किसी भी तरह से आवश्यक है।

कुछ नोट:

  • Get-ADGroupMemberयदि आपको प्रारंभिक Get-ADGroupCmdlet में सदस्यों की संपत्ति एकत्र करने की आवश्यकता नहीं है । इसके बारे में अच्छी बात यह है कि यह आपके द्वारा AD को किए जाने वाले कॉल की मात्रा को आधा कर देता है, जिससे आपकी स्क्रिप्ट को तेज़ी से चलना चाहिए, और यह डोमेन नियंत्रक पर बोझ को कम करता है।

  • $ G.Members समूह के सभी सदस्यों को $ G ... Powershell 3 में प्रदर्शित करेगा। Powershell 2 में, आपको अभी भी समूह सदस्यों के माध्यम से गणना करने के लिए Foreach के अंदर एक और Foreach लगाने की आवश्यकता हो सकती है। ( यो डॉग, मैंने सुना है आपको लूप पसंद है ... )

  • मैं Write-Hostयहां उपयोग करता हूं , जो स्थूल है। आपको वास्तव में कभी भी उपयोग नहीं करना चाहिए Write-Host। इसके बजाय, आपको वस्तुओं का निर्माण और आउटपुट करना चाहिए, न कि टेक्स्ट, लेकिन यह एक पूरी तरह से अन्य विषय था और मैं इस उत्तर के लिए बहुत आलसी था।


10

यहाँ एक बेहतर समाधान है। यह समूह नाम, उपयोगकर्ता नाम और सैम खाते के नाम के साथ 3 कॉलम सीएसवी में सब कुछ डाल देगा। जब किसी समूह में 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

संभव है कि किसी समूह में 400 उपयोगकर्ता जोड़ें और csv या xlsx फ़ाइल से डेटा पकड़ें?
किकेनीट

मेरी अज्ञानता के लिए खेद है, लेकिन आपके कोड में कौन सा लंगूर है?
स्कॉट जूल

मेरी टिप्पणियों के लिए खेद है, लेकिन शक्तिशालि भाषा थी
रिले कार्नी

1

मेरे लिए यह काम करने के .nameबाद मुझे जोड़ना पड़ा $group

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

0

यदि आप कभी Size Limitभी 5000 से अधिक सदस्यों वाले समूहों के साथ समस्या में भाग लेते हैं, तो आप निम्नानुसार एक पंक्ति को बदल सकते हैं:

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

0

यहां एक स्क्रिप्ट है जो 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
  }
}   
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.