active directory - पावरशेल+एडी: विशिष्ट ओ में किसी भी समूह के भीतर से उपयोगकर्ताओं को वापस आइए, प्लस गणना



active-directory powershell-v3.0 (1)

पावरशेल "सफेद बेल्ट" यहां, पहली बार पोस्टर मैं इस तरह के एक उपयोगी समुदाय की सामूहिक बुद्धि को कम करने की कोशिश नहीं करूंगा जब तक मैं यहाँ हूँ! :) मैं PowerShell 3.0 को क्वेस्ट की स्थापना के साथ चला रहा हूं।

मेरे संगठन के पास कई सुरक्षा समूहों के साथ एक सक्रिय निर्देशिका ओ है, जो कि सभी नियंत्रण वीपीएन पहुंच - इन नामकरण सम्मेलनों (यूग!) से पहले के दिनों में इन्हें बनाया गया था

मैं "मुझे एक्स और वाई और जेड के सदस्यों को पाने के लिए" नामों पर भरोसा नहीं करना पसंद करता हूं, परन्तु बल्कि कहते हैं "इसके बजाय मुझे" ओयू XXX में कुछ के सदस्य प्राप्त करें "

आदर्श रूप में, मैं अंत में एक गिनती भी चाहूंगा, क्योंकि अंततः यह "कितने उपयोगकर्ताओं को वीपीएन पहुंच है" का लेखा-परीक्षण करने के लिए है (हालांकि मैं किसी सीएसवी या किसी अन्य चीज़ के लिए परिणाम निकाल सकता है यदि वह बहुत जटिल है)

तो मेरे पास कुछ टुकड़े हैं जो इस का भाग लेंगे, मैं ये बिल्कुल कल्पना नहीं कर सकता कि इन सबको एक साथ फिट कैसे करना है। किसी भी सहायता की सराहना की जाएगी। यहां मेरे चलते हिस्से हैं:

उपयोगकर्ताओं को एक विशिष्ट समूह में वापस लाता है:

get-adgroupmember "group_of_coolness" -recursive | Select name

"खोजबेस" का उपयोग करके उपयोगकर्ता द्वारा भरे हुए ओयू से परिणाम निकालते हैं:

Get-ADUser -Filter * -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname | 
select GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname | Out-GridView 

कुछ विशिष्ट समूहों से परिणाम देता है, लेकिन यह भी एक गिनती देता है (मेरा सबसे उन्नत पैच-काम अभी तक ^^):

    $GroupMembers=(get-ADGroup -filter {(Name -eq "XXXX") -or (Name -eq "YYYY")} |
     get-adgroupmember -Recursive | select distinguishedname -Unique)

    $Users=foreach ($user in $GroupMembers.distinguishedname) {
    Get-ADUser $user
    }

    $Users | Sort-Object DistinguishedName |
    select name, DistinguishedName

    Write-Host
    Write-Host "Total Users = " $Users.count

वह अंतिम कोड-स्निपेट मुझसे निकटतम लग रहा है, अगर मैं "name-eq XXXX या YYYY" को "-searchbase" ou = XXX के साथ बदल सकता हूं ... "

आप स्मार्ट लोगों को क्या सोचते हैं - क्या मैं जवाब के करीब हूं? फिर, किसी भी सलाह के लिए धन्यवाद, और मुझे बताएं कि क्या मैं एक जैक-गधा और एक धागा देख रहा हूं जहां यह पहले से ही उत्तर दिया गया है (मुझे कुछ करीबी फोन मिल गए हैं, लेकिन काफी धन नहीं है)।

मुझे यह देखने के लिए उत्साहित है कि मुझे क्या याद आ रहा है :)


आप इसे आसानी से सरल कर सकते हैं:

$Users = Get-ADGroup -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Filter * `
    | Get-ADGroupMember -Recursive `
    | Select-Object -Unique `
    | Sort-Object DistinguishedName;
$Users | Select-Object Name, DistinguishedName;
Write-Output ("Total Users = {0}" -f $Users.Count);

यदि आप समूह के नाम से खोजना चाहते हैं, तो आप पहली पंक्ति को Get-ADGroup -Filter {(Name -eq "Group A") -or (Name -eq "Group B")} जैसे आप उपयोग कर रहे थे।

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

यदि आपको अतिरिक्त गुण नाम और प्रतिष्ठित नाम से परे प्राप्त करने की आवश्यकता है, तो आपको ऐसा करने की आवश्यकता है। आप इसे ऐसा कर सकते हैं:

$Users = Get-ADGroup -SearchBase 'ou=XXX,ou=XXX,dc=XXX,dc=XXX,dc=org' -Filter * `
    | Get-ADGroupMember -Recursive `
    | Select-Object -Unique `
    | ForEach-Object { Get-ADUser $_ -Properties GivenName, Surname, EmailAddress, Office, Company, Title, distinguishedname; } `
    | Sort-Object DistinguishedName;