एक उपयोगकर्ता का एक समूह है कि सभी समूहों को कैसे प्राप्त करें?


135

PowerShell का Get-ADGroupMembercmdlet किसी विशिष्ट समूह के सदस्यों को देता है। क्या उन सभी समूहों को प्राप्त करने के लिए एक cmdlet या संपत्ति है जो किसी विशेष उपयोगकर्ता का सदस्य है?


मैंने अपनी गलती तय की: Get-Memberहोना चाहिए Get-ADGroupMember


प्रश्न स्पष्ट नहीं है। क्या आप इसका खंडन कर सकते हैं या एक उदाहरण जोड़ सकते हैं?
मोहित चक्रवर्ती 1

1
देखें stackoverflow.com/questions/668321/... और technet.microsoft.com/en-us/library/dd315351.aspx । क्या आप सुनिश्चित हैं कि गेट-मेंबर ऐसा करता है जो आपको लगता है कि यह करता है?
tBL2014

@ मोहित चक्रवर्ती क्या अब ज्यादा स्पष्ट हैं?
प्रिमोज़

1
तेजी से आप का उपयोग कर सकते हैं net user /domain username, अन्य समूहों में
मोहम्मद

जवाबों:


282

Get-ADPrincipalGroupMembership यह करेगा।

Get-ADPrincipalGroupMembership username | select name

name
----
Domain Users
Domain Computers
Workstation Admins
Company Users
Company Developers
AutomatedProcessingTeam

1
इसने मुझे इस खोजने की सबसे जटिल और लंबी घुमावदार विधि का उपयोग करने से बचाया। जानते थे कि पॉवरशेल में कुछ इस तरह होगा लेकिन इसे कहीं भी नहीं पाया जा सकता है। +1
टिम अलेक्जेंडर

7
ध्यान दें कि यह ActiveDirectory मॉड्यूल उपलब्ध होने पर निर्भर करता है। यह आवश्यक रूप से क्लाइंट मशीन पर काम नहीं करेगा जहाँ आप पॉवरशेल स्क्रिप्ट चला रहे हैं, या डाउनलेवल क्लाइंट पर। यदि आप ऐसा करना चाहते हैं, तो इस घोल का उपयोग करें
डैनियल .S

5
उपरोक्त मुझे त्रुटियाँ दे रहा था ("आंतरिक त्रुटि के कारण सर्वर अनुरोध को संसाधित करने में असमर्थ था" - संभवतः सर्वर पर उपलब्ध कार्यक्षमता नहीं है)। get-aduser $username -Properties memberof | select -expand memberofहालांकि ठीक काम किया।
JohnLBevan

5
यदि आप सर्वर के बजाय विंडोज 10 वर्कस्टेशन पर हैं , तो यहां से RSAT इंस्टॉल करें , फिर import-module activedirectoryपॉवरशेल कमांडलाइन पर टाइप करें , फिर यह चलना चाहिए।
जेम्स टुमी

3
यदि मॉड्यूल स्थापित नहीं है: Install-WindowsFeature RSAT-AD-PowerShell
Preben Huybrechts

81

एकल पंक्ति, कोई मॉड्यूल आवश्यक नहीं, वर्तमान लॉग इन उपयोगकर्ता का उपयोग करता है:

(New-Object System.DirectoryServices.DirectorySearcher("(&(objectCategory=User)(samAccountName=$($env:username)))")).FindOne().GetDirectoryEntry().memberOf

इस vbs / अधिकार लेख के लिए क़ुदोस: http://technet.microsoft.com/en-us/library/ff730963.aspx


5
धन्यवाद, मैं इस नो-मॉड्यूल संस्करण की सराहना करता हूं। मैंने बस से चर को बदल दिया $env:usernameहै $usernameऔर $username = "testuser"आसानी से अन्य उपयोगकर्ता के लुकअप के लिए चर प्रतिस्थापन के साथ सेट किया है।
प्रोजेक्टडैप

बस फिर से यहाँ वापस मेरे रास्ते googled! अभी भी यादृच्छिक स्थितियों में उपयोगी है जहां विज्ञापन उपकरण उपलब्ध नहीं हैं।
नाथन

43

वर्तमान में लॉग-ऑन उपयोगकर्ता के लिए समूह सदस्यता प्राप्त करने के लिए Canoas द्वारा पोस्ट किए गए एक अधिक संक्षिप्त विकल्प।

मैं इस ब्लॉग पोस्ट में इस तरीके से आया हूं: http://www.travisrunyard.com/2013/03/26/auto-create-outlook-mapi-user-profiles/

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof

एक और भी बेहतर संस्करण, जो LDAP guff को हटाने के लिए एक regex का उपयोग करता है और केवल समूह नाम छोड़ता है:

([ADSISEARCHER]"samaccountname=$($env:USERNAME)").Findone().Properties.memberof -replace '^CN=([^,]+).+$','$1'

[ADSISEARCHER] प्रकार त्वरक का उपयोग करने के बारे में अधिक जानकारी स्क्रिप्टिंग पुरुष ब्लॉग पर पाई जा सकती है: http://blogs.technet.com/b/heyscriptingguy/archive/2010/08/24/use-the-powershell-adsisearcher-type -accelerator करने वाली खोज सक्रिय-directory.aspx


1
ये दोनों मुझे त्रुटि देते हैं: अपवाद "0" तर्क (ओं) के साथ "फाइंडऑन" को कॉल करना: "samaccountname = खोज फ़िल्टर अमान्य है।"
डलास

अजीब .... मैंने अभी इसे फिर से परीक्षण किया, लेकिन विंडोज 7 पर पूरी तरह से अलग वातावरण में, और यह यहां भी ठीक काम करता है।
डैनियल।

मैंने अभी फिर से कोशिश की, अभी भी विन 7 पर, और यह ठीक काम करता है। शायद मैं टाइपो था जब पहली बार यह बाहर की कोशिश कर रहा। जंगल को बाहर निकालने के लिए प्रतिस्थापित करने के लिए धन्यवाद "गुफ"।
डैलस

2
महान काम करता है, | Sort-Objectइसे और भी अधिक पठनीय बनाने के लिए संलग्न करें।
मार्टिन हॉलिंगवर्थ

31

सीएमडी से पुराना स्कूल का रास्ता:

net user mst999 /domain 

1
यह अतिरिक्त एडी टूल्स के बिना क्लाइंट मशीनों पर भी काम करता है
रास्ट

4
दुर्भाग्य से - यदि आपके समूहों के नाम लंबे हैं (यानी> 21 वर्ण) तो यह उन्हें छोटा कर देगा ...
kiltannen

वह हर दूसरे तरीके से धड़कता है! ब्रावो
स्टेचूल

24
(GET-ADUSER Identity USERNAME Properties MemberOf | Select-Object MemberOf).MemberOf

धन्यवाद! यह काम किया। केवल नकारात्मक पक्ष यह है कि लौटाया गया मूल्य एक स्ट्रिंग है।
शर्मसार

3
| get-adgroup समूह ऑब्जेक्ट को आउटपुट करेगा। प्रतिभाशाली!
8DH

1
या, $ env का उपयोग करें: USERNAME के ​​बजाय वर्तमान में लॉग इन उपयोगकर्ता के उपयोगकर्ता नाम को हथियाने के लिए
डेव ल्यूक्रे

6

यदि आपको काम करने के लिए Get-ADPrincipalGroupMembership नहीं मिल सकती है तो आप उस उपयोगकर्ता के रूप में लॉगिंग का उपयोग कर सकते हैं।

$id = [Security.Principal.WindowsIdentity]::GetCurrent()
$groups = $id.Groups | foreach-object {$_.Translate([Security.Principal.NTAccount])}
$groups | select *

आपको उपयोगकर्ता के रूप में लॉगिन करने की आवश्यकता नहीं है यदि आप कुछ का उपयोग करते हैं जैसे$id = [Security.Principal.WindowsIdentity]("username")
बिटकॉइन मर्डरस मनिक

1
यह एक लाइनर के लिए अच्छी तरह से छोटा है [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | % {$_.Translate([Security.Principal.NTAccount])}
alx9r

5

उपयोगकर्ता के लिए समूह सदस्यता प्राप्त करें:

$strUserName = "Primoz"
$strUser = get-qaduser -SamAccountName $strUserName
$strUser.memberof

उपयोगकर्ता के लिए समूह सदस्यता प्राप्त करें देखें

लेकिन यह भी सक्रिय निर्देशिका के लिए क्वेस्ट नि: शुल्क PowerShell कमांड देखें ।

[ संपादित करें : Get-ADPrincipalGroupMembership कमांड Windows 2008 R2 के साथ v2 के बाद से पॉवर्सशेल में शामिल है। नीचे देखें kstrauss का उत्तर।]


2
वास्तव में क्वेस्ट cmdlets के साथ एक आसान तरीका है: Get-QADGroup -Contains Primoz
fenster

18
अब यह सबसे अच्छा जवाब नहीं है क्योंकि Get-ADPrincipalGroupMembership अब PowerShell
Rob Cannon

1
नीचे वोट दिया गया क्योंकि Get-ADPrincipalGroupMembership का उपयोग करना बेहतर होगा। मैं इस गिरावट को पूर्ववत करना चाहूंगा, लेकिन मैं ऐसा नहीं कर सकता। मैं इस बात का जवाब देने के लिए कहूंगा कि बिल्ट इन ऑप्शन अब मौजूद है।
अब्राहम

4

Get-Member.NET के सदस्यों को सूचीबद्ध करने के लिए एक cmdlet है object। इसका उपयोगकर्ता / समूह सदस्यता से कोई लेना-देना नहीं है। आप वर्तमान उपयोगकर्ता की समूह सदस्यता जैसी प्राप्त कर सकते हैं:

PS> [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | 
         Format-Table -auto

BinaryLength AccountDomainSid    Value
------------ ----------------    -----
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-513
          12                     S-1-1-0
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1010
          28 S-1-5-21-...        S-1-5-21-2229937839-1383249143-3977914998-1003
          16                     S-1-5-32-545
...

यदि आपको उपयोगकर्ताओं के समूह की जानकारी तक पहुंच की आवश्यकता है तो क्वेस्ट एडी cmdlets का उपयोग करने का @tiagoinu सुझाव एक बेहतर तरीका है।


4

सबसे पहले, सक्रियण मॉड्यूल को आयात करें:

import-module activedirectory

फिर यह आदेश जारी करें:

Get-ADGroupMember -Identity $group | foreach-object {
    Write-Host $_.SamAccountName
}

यह निर्दिष्ट समूह के सदस्यों को प्रदर्शित करेगा।


ओपी इसके विपरीत पूछता है। सभी समूहों को एक निर्दिष्ट उपयोगकर्ता प्राप्त करें जिसका सदस्य है।
8DH

4

जब यह एक सरल एक लाइनर है, तो लंबी स्क्रिप्ट की आवश्यकता नहीं है।

QUEST कमांड

(Get-QADUser -Identity john -IncludedProperties MemberOf | Select-Object MemberOf).MemberOf

MS AD कमान

(GET-ADUSER Identity john Properties MemberOf | Select-Object MemberOf).MemberOf

मुझे लगता है कि एमएस विज्ञापन cmd तेज है, लेकिन कुछ लोग क्वेस्ट को बेहतर पसंद करते हैं ..

स्टीव


4

गेट-मेंबर यूजर की ग्रुप मेंबरशिप पाने के लिए नहीं है। यदि आप उन समूहों की सूची प्राप्त करना चाहते हैं जो उपयोगकर्ता स्थानीय प्रणाली पर हैं, तो आप ऐसा कर सकते हैं:

$query = "ASSOCIATORS OF {Win32_Account.Name='DemoUser1',Domain='DomainName'} WHERE ResultRole=GroupComponent ResultClass=Win32_Account"

Get-WMIObject -Query $query | Select Name

उपरोक्त क्वेरी में, अपने इच्छित उपयोगकर्ता नाम और डोमेननेम को अपने स्थानीय कंप्यूटर नाम या डोमेन नाम के साथ डेमो यू 1 की जगह लें।


यह क्वेरी बहुत समय लेने वाली होती है और वातावरण में कई उपयोगकर्ता और समूह होने पर बहुत धीमी गति से प्रतिक्रिया करती है
randeepsp

जो कोई भी उत्तर संपादित कर रहा है, सुनिश्चित करें कि आप इसे सही तरीके से संपादित करते हैं। मैं ओपी को सुझाव दे रहा था कि वह जो भी यूजरनेम चाहता है उसके साथ डेमो यू 1 को बदले। और, आपने उस अर्थ को पूरी तरह से बदल दिया।
रविकांत

4

उपयोग:

Get-ADPrincipalGroupMembership username | select name | export-CSV username.csv

यह CSV फ़ाइल में कमांड का आउटपुट देता है ।


4

यह आपको वर्तमान उपयोगकर्ता के लिए विवरण प्रदान करना चाहिए। शक्तियों की जरूरत नहीं है।

whoami /groups


3

यह सिर्फ एक पंक्ति है:

(get-aduser joe.bloggs -properties *).memberof

का अंत :)


एक select -expandproperty memberofइच्छा के अनुसार उत्पादन को थोड़ा अधिक पठनीय / उपयोगी बना देगा।
बेन थुल

2

मैंने गेट-ADPrincipalGroupMembershipRecursive नामक एक PowerShell फ़ंक्शन लिखा। यह उपयोगकर्ता, कंप्यूटर, समूह या सेवा खाते के DSN को स्वीकार करता है। यह खाते के सदस्य की विशेषता से समूहों की एक प्रारंभिक सूची निकालता है, फिर उन समूह के सदस्यों की पुनरावृत्ति की जाँच करता है। संक्षिप्त कोड नीचे है। टिप्पणियों के साथ पूर्ण स्रोत कोड यहां पाया जा सकता है

function Get-ADPrincipalGroupMembershipRecursive( ) {

    Param(
        [string] $dsn,
        [array]$groups = @()
    )

    $obj = Get-ADObject $dsn -Properties memberOf

    foreach( $groupDsn in $obj.memberOf ) {

        $tmpGrp = Get-ADObject $groupDsn -Properties memberOf

        if( ($groups | where { $_.DistinguishedName -eq $groupDsn }).Count -eq 0 ) {
            $groups +=  $tmpGrp           
            $groups = Get-ADPrincipalGroupMembershipRecursive $groupDsn $groups
        }
    }

    return $groups
}

# Simple Example of how to use the function
$username = Read-Host -Prompt "Enter a username"
$groups   = Get-ADPrincipalGroupMembershipRecursive (Get-ADUser $username).DistinguishedName
$groups | Sort-Object -Property name | Format-Table

2

नीचे अच्छा काम करता है:

get-aduser $username -Properties memberof | select -expand memberof

यदि आपके पास उपयोगकर्ताओं की सूची है:

$list = 'administrator','testuser1','testuser2'
$list | `
    %{  
        $user = $_; 
        get-aduser $user -Properties memberof | `
        select -expand memberof | `
        %{new-object PSObject -property @{User=$user;Group=$_;}} `
    }

1

Get-QADUser -SamAccountName LoginID | % {$ _। मेंबरऑफ} | Get-QADGroup | नाम चुनें


1

मुझे किसी विशेष उपयोगकर्ता के लिए काम करने के लिए निम्नलिखित नहीं मिला:

Get-ADPrincipalGroupMembership username

यह एक त्रुटि थी कि मैं समस्या निवारण के लिए तैयार नहीं था।

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

#Get the groups that list of users are the member of using a wildcard search

[string]$UserNameLike = "*PartOfUsersName*" #Use * for wildcards here
[array]$AccountNames = $(Get-ADUser -Filter {Name -like $UserNameLike}).SamAccountName

ForEach ($AccountName In $AccountNames) {
Write-Host "`nGETTING GROUPS FOR" $AccountName.ToUpper() ":"
(Get-ADUser -Identity $AccountName -Properties MemberOf|select MemberOf).MemberOf|
    Get-ADGroup|select Name|sort name
    }

विशाल मुझे इस समाधान के लिए schmeckendeugler और 8DH के लिए सहारा देता है। आप दोनों को +1।


1

जबकि यहाँ कई उत्कृष्ट उत्तर हैं, एक वह है जिसे मैं व्यक्तिगत रूप से ढूंढ रहा था वह गायब था। एक बार जब मुझे यह पता चला - मुझे लगा कि मुझे इसे उस स्थिति में पोस्ट करना चाहिए, जिसे मैं इसे बाद में ढूंढना चाहता हूं, या यह वास्तव में किसी और की मदद करने का प्रबंधन करता है:

Get-ADPrincipalGroupMembership username | Format-Table -auto

इसे प्रस्तुत करने के लिए एक दूसरा तरीका यह है कि आप जिस व्यक्तिगत कॉलम में रुचि रखते हैं उसे निर्दिष्ट करें:

Get-ADPrincipalGroupMembership username | select name, GroupScope, GroupCategory

यह उन सभी AD समूहों को देता है जो उपयोगकर्ता नाम से संबंधित है - लेकिन यह भी एक तालिका के रूप में अच्छी तरह से स्वरूपित प्रत्येक समूह के सभी डिफ़ॉल्ट गुणों को प्रस्तुत करता है।

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

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

0
Import-Module ActiveDirectory
Get-ADUser -SearchBase "OU=Users,DC=domain,DC=local" -Filter * | foreach-object {
write-host "User:" $_.Name -foreground green
    Get-ADPrincipalGroupMembership $_.SamAccountName | foreach-object {
        write-host "Member Of:" $_.name
    }
}

उन उपयोगकर्ताओं को सूचीबद्ध करने के लिए OU को प्रतिबिंबित करने के लिए -SearchBase का मान बदलें :)

यह उस OU में सभी उपयोगकर्ताओं को सूचीबद्ध करेगा और आपको दिखाएगा कि वे किस समूह के सदस्य हैं।



0
   Get-ADUser -Filter { memberOf -RecursiveMatch "CN=Administrators,CN=Builtin,DC=Fabrikam,DC=com" } -SearchBase "CN=Administrator,CN=Users,DC=Fabrikam,DC=com"  -SearchScope Base
                  ## NOTE: The above command will return the user object (Administrator in this case) if it finds a match recursively in memberOf attribute. 

0

यह केवल नाम पाने का सबसे सरल तरीका है:

Get-ADPrincipalGroupMembership "YourUserName"

# Returns distinguishedName : CN=users,OU=test,DC=SomeWhere GroupCategory : Security GroupScope : Global name : testGroup objectClass : group objectGUID : 2130ed49-24c4-4a17-88e6-dd4477d15a4c SamAccountName : testGroup SID : S-1-5-21-2114067515-1964795913-1973001494-71628

प्रतिक्रिया को ट्रिम करने के लिए या OU में प्रत्येक उपयोगकर्ता को प्रत्येक समूह को प्राप्त करने के लिए एक चयन कथन जोड़ें:

foreach ($user in (get-aduser -SearchScope Subtree -SearchBase $oupath -filter * -Properties samaccountName, MemberOf | select samaccountName)){ Get-ADPrincipalGroupMembership $user.samaccountName | select name}


0

इसे पुन: प्राप्त करने के लिए, आप इसका उपयोग कर सकते हैं:

<# 
    .SYNOPSIS   
        Get all the groups that a user is MemberOf.

    .DESCRIPTION
        This script retrieves all the groups that a user is MemberOf in a recursive way.

    .PARAMETER SamAccountName
        The name of the user you want to check #>

Param (
    [String]$SamAccountName = 'test',
    $DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=domain,DC=net'
)


Function Get-ADMemberOf {
    Param (
        [Parameter(ValueFromPipeline)]
        [PSObject[]]$Group,
        [String]$DomainUsersGroup = 'CN=Domain Users,CN=Users,DC=grouphc,DC=net'
    )
    Process {
        foreach ($G in $Group) {
            $G | Get-ADGroup | Select -ExpandProperty Name
            Get-ADGroup $G -Properties MemberOf| Select-Object Memberof | ForEach-Object {
                Get-ADMemberOf $_.Memberof
            }
        }
    }
}


$Groups = Get-ADUser $SamAccountName -Properties MemberOf | Select-Object -ExpandProperty MemberOf
$Groups += $DomainUsersGroup
$Groups | Get-ADMemberOf | Select -Unique | Sort-Object

0

लगभग सभी उपरोक्त समाधानों ने ActiveDirecotryमॉड्यूल का उपयोग किया जो कि ज्यादातर मामलों में डिफ़ॉल्ट रूप से उपलब्ध नहीं हो सकता है।

मैंने नीचे विधि का उपयोग किया। थोड़ा अप्रत्यक्ष, लेकिन मेरे उद्देश्य की सेवा की।

सभी उपलब्ध समूहों की सूची बनाएं

Get-WmiObject -Class Win32_Group

और फिर उन समूहों को सूचीबद्ध करें जो उपयोगकर्ता के हैं

[System.Security.Principal.WindowsIdentity]::GetCurrent().Groups

तब तुलना को जाँच के माध्यम से किया जा सकता है SIDs। यह लॉग इन यूजर के लिए काम करता है। अगर मैं गलत हूं कृपया मुझे सही। पॉवरशेल के लिए पूरी तरह से नया है, लेकिन इसे एक कार्य प्रतिबद्धता के लिए प्राप्त करना था।


यदि आप एक उपयोगकर्ता की जाँच कर रहे हैं जो पहले से ही प्रशासक समूह का सदस्य है, तो "रन अस एडमिनिस्ट्रेटर" द्वारा PowerShell को शुरू करना सुनिश्चित करें, अन्यथा समूह को 2 कमांड के लिए सही ढंग से सूचीबद्ध नहीं किया जाएगा ... यह पता लगाने में काफी समय लगा यह बाहर ... खिड़कियां ...
Ruifeng मा

0

उपयोगकर्ता इनपुट और फैंसी आउटपुट स्वरूपण के साथ:

[CmdletBinding(SupportsShouldProcess=$True)] 
Param( 
    [Parameter(Mandatory = $True)] 
    [String]$UserName 
) 
Import-Module ActiveDirectory 
If ($UserName) { 
    $UserName = $UserName.ToUpper().Trim() 
    $Res = (Get-ADPrincipalGroupMembership $UserName | Measure-Object).Count 
    If ($Res -GT 0) { 
        Write-Output "`n" 
        Write-Output "$UserName AD Group Membership:" 
        Write-Output "===========================================================" 
        Get-ADPrincipalGroupMembership $UserName | Select-Object -Property Name, GroupScope, GroupCategory | Sort-Object -Property Name | FT -A 
    } 
}

0

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

मैं प्रत्येक उपयोगकर्ता के समूह सदस्यता के लिए CSV आउटपुट करने के लिए नीचे दिए गए कोड ब्लॉक का उपयोग कर रहा हूं।

Get-ADUser -Filter * |`
  ForEach-Object { `
    $FileName = $_.SamAccountName + ".csv" ; `
    $FileName ; `
    Get-ADPrincipalGroupMembership $_ | `
      Select-Object -Property SamAccountName, name, GroupScope, GroupCategory | `
        Sort-Object -Property SamAccountName | `
          Export-Csv -Path $FileName -Encoding ASCII ; `
  }

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

Get-ADGroup -Filter * | `
 Select-Object -Property Name, DistinguishedName, GroupScope, GroupCategory | `
  Sort-Object -Property GroupScope, GroupCategory, Name | `
   Export-Csv -Path ADGroupsNew.csv -Encoding ASCII

$MyCSV = Import-Csv -Path .\ADGroupsNew.csv -Encoding ASCII

$MyCSV | `
 ForEach-Object { `
  $FN = $_.GroupScope + ", " + $_.GroupCategory + ", " + $_.Name + ".txt" ; `
  $FN ; `
  Get-ADGroupMember -Identity $_.DistinguishedName | `
   Out-File -FilePath $FN -Encoding ASCII ; $FN=""; `
  }

0

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

[array] $script:groupsdns = @()
function Get-ADPrincipalGroupMembershipRecursive() 
{
  Param( [string] $dn, [int] $level = 0, [array] $groups = @() )

  #if(($groupsdns | where { $_.DistinguishedName -eq $dn }).Count -ne 0 ) { return $groups } # dependency on next statement
  #$groupsdns += (Get-ADObject $dn -Properties MemberOf) # Get-ADObject cannot find an object with identity
  if ($script:groupsdns.Contains($dn)) { return $groups }
  $script:groupsdns += $dn
  $mo = $Null
  $mo = Get-ADObject $dn -Properties MemberOf # Get-ADObject cannot find an object with identity
  $group = ($dn + " (" + $level.ToString())
  if ($mo -eq $Null) { $group += "!" }
  $group += ")"
  $groups += $group
  foreach( $groupdn in $mo.MemberOf )
  {
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $groupdn -level ($level+1) -groups $groups
  }
  if ($level -le 0) 
  { 
    $primarygroupdn = (Get-ADUser -Identity $dn -Properties PrimaryGroup).PrimaryGroup 
    $groups = Get-ADPrincipalGroupMembershipRecursive -dn $primarygroupdn -level ($level+1) -groups $groups
  }
  return $groups
}
$adusergroups = Get-ADPrincipalGroupMembershipRecursive -dn $aduser.DistinguishedName
$adusergroups | ft -AutoSize | `
              Out-File -Width 512 Get-ADPrincipalGroupMembershipRecursive.txt #-Append #-Wrap # | Sort-Object -Property Name

क्षमा करें मैं स्पष्ट करना भूल गया। इसे पहले करें: $ aduserDistinguishedName = "CN = name, OU = ..." $ aduser = Get-ADUser -Identity $ aduserDistinguishedName -Properties *
ES44AC SD70MAC

0

जब आपके पास अन्य सदस्य समूहों से परामर्श करने के लिए विशेषाधिकार नहीं होते हैं, लेकिन समूह के सदस्यों से परामर्श करने का विशेषाधिकार आपके पास होता है, तो आप निम्नलिखित कर सकते हैं कि किस समूह के उपयोगकर्ता किस समूह तक पहुँच बना सकते हैं।

$groups = get-adgroup -Filter * | sort name | select Name
$users = @{}
foreach($group in $groups) {
    $groupUsers = @()
    $groupUsers = Get-ADGroupMember -Identity $group.Name | Select-Object SamAccountName
    $groupUsers | % {
        if(!$users.ContainsKey($_.SamAccountName)){
            $users[$_.SamAccountName] = @()
        }
        ($users[$_.SamAccountName]) += ($group.Name)
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.