none
Вывод списка групп и пользователей в них из всего домена RRS feed

  • Вопрос

  • Добрый день,

    подсобите создать скрипт вывода Списка групп с пользователями и свойствами групп из Всего домена.

    Пока написал только такую штуку

    get-adgroupmember 1C -r | Get-aduser | FT samaccountname, surname

    administrator Иван Иванович Иванов

    но в итоге мне надо получить примерно такое на выходе

    1C (Global/Security)
       Member: administrator(User) Иван Иванович Иванов

    2С (Global/Security)
       Member: administrator(User) Иван Иванович Иванов


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.


    • Изменено PuCtoy 22 июня 2016 г. 7:12
    22 июня 2016 г. 7:05

Ответы

  • Get-ADGroup -Filter * | Foreach {
    	"{0}({1}/{2})" -f $_.Name,$_.GroupScope,$_.GroupCategory
    	Get-ADGroupMember $_ -Recursive | Where {$_.objectClass -eq "user"} | Foreach {
    		"`tMember: {0}(User) {1}" -f $_.SamAccountName,$_.Name
    	}
    }

    • Помечено в качестве ответа PuCtoy 22 июня 2016 г. 7:40
    22 июня 2016 г. 7:21
  • $user = Get-ADUser $_ -Properties SurName
    "`tMember: {0}(User) {1} {2}" -f $user.SamAccountName,$user.Name,$user.SurName

    • Помечено в качестве ответа PuCtoy 22 июня 2016 г. 7:48
    22 июня 2016 г. 7:43
  • Выводит ошибки?
    Function EnumGroup ($ADGroup)
    {
        ForEach ($MemberDN In $ADGroup.member)
        {
            $MemberDN = $MemberDN.Replace("/", "\/")
            $Member = [ADSI]"LDAP://$MemberDN"
            $Class = $Member.Class
            $Name = ($Member.distinguishedName).ToString()
           
    		If ($Class -ne "group")
    		{
    			If ($Script:Users.ContainsKey($MemberDN) -eq $False)
    			{
    				$Script:Users.Add($MemberDN,0)
    				"`tMember: {0}(User) {1}" -f $Member.SamAccountName.ToString(),$Member.Name.ToString()
    			}
    		}
            
    		If ($Class -eq "group")
            {
                EnumGroup $Member
            }
        }
    }
    
    $D = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
    $Domain = [ADSI]"LDAP://$D"
    $Searcher = New-Object System.DirectoryServices.DirectorySearcher
    $Searcher.PageSize = 200
    $Searcher.SearchScope = "subtree"
    $Searcher.PropertiesToLoad.Add("distinguishedName") | Out-Null
    $Searcher.SearchRoot = "LDAP://" + $Domain.distinguishedName
    
    Get-ADGroup -Filter * | Foreach {
    	$Script:Users = @{}
    	"{0}({1}/{2})" -f $_.Name,$_.GroupScope,$_.GroupCategory
    	
    	$DN = $_.distinguishedName
    	$DN = $DN.Replace("/", "\/")
    	$Group = [ADSI]"LDAP://$DN"
    
    	EnumGroup $Group
    }
    

    • Помечено в качестве ответа PuCtoy 14 июля 2016 г. 12:14
    14 июля 2016 г. 11:55

Все ответы

  • Get-ADGroup -Filter * | Foreach {
    	"{0}({1}/{2})" -f $_.Name,$_.GroupScope,$_.GroupCategory
    	Get-ADGroupMember $_ -Recursive | Where {$_.objectClass -eq "user"} | Foreach {
    		"`tMember: {0}(User) {1}" -f $_.SamAccountName,$_.Name
    	}
    }

    • Помечено в качестве ответа PuCtoy 22 июня 2016 г. 7:40
    22 июня 2016 г. 7:21
  • Подскажите пожалуйста как можно вывести поле surname для пользователя

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    22 июня 2016 г. 7:40
  • $user = Get-ADUser $_ -Properties SurName
    "`tMember: {0}(User) {1} {2}" -f $user.SamAccountName,$user.Name,$user.SurName

    • Помечено в качестве ответа PuCtoy 22 июня 2016 г. 7:48
    22 июня 2016 г. 7:43
  • $user = Get-ADUser $_ -Properties SurName
    "`tMember: {0}(User) {1} {2}" -f $user.SamAccountName,$user.Name,$user.SurName

    Спасибо огромное

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    • Помечено в качестве ответа PuCtoy 22 июня 2016 г. 7:47
    • Снята пометка об ответе PuCtoy 22 июня 2016 г. 7:47
    22 июня 2016 г. 7:47
  • Столкнулся с проблемой при попытке получения списка пользователей.

    Get-ADGroupMember : Сервер не смог обработать запрос в связи с внутренней ошибкой.  Для получения дополнительных сведений об ошибке либо включите IncludeExceptionDetailIn
    Faults (с помощью атрибута ServiceBehaviorAttribute или через поведение < serviceDebug >) на сервере для того чтобы выслать информацию об исключении назад клиенту, или включить трассировку согласно инструкции Microsoft .NET Framework SDK и проверить записи журнала трассировки клиента.
    строка:3 знак:2

    Подскажите как вылечить пожалуйста.


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    14 июля 2016 г. 9:46
  • Ошибка возникает для всех групп  в которых есть foreign security principals или у определенной?
    14 июля 2016 г. 9:59
  • Дело в том что мне по наследству достался скрипт на VB его я и хоте модернизировать.

    и перевести на PoSh Ошибка вот на таких группах

    Administrators(DomainLocal/Security)

    Remote Desktop Users(DomainLocal/Security)

    Если я правильно понял вывод

    ' DocumentGroups.vbs
    ' VBScript program to document all groups in Active Directory.
    ' Outputs group name, type of group, all members, and types of member.
    ' Lists all groups that are members, but does not list the nested group
    ' membership.
    '
    ' ---------------------------------------------------------------------
    ' Copyright (c) 2002 Richard L. Mueller
    ' Hilltop Lab web site - http://www.rlmueller.net
    ' Version 1.0 - November 10, 2002
    ' Version 1.1 - February 19, 2003 - Standardize Hungarian notation.
    ' Version 1.2 - March 11, 2003 - Remove SearchScope property.
    '
    ' This script is designed to be run at a command prompt, using the
    ' Cscript host. The output can be redirected to a text file.
    ' For example:
    ' cscript //nologo DocumentGroups.vbs > groups.txt
    '
    ' You have a royalty-free right to use, modify, reproduce, and
    ' distribute this script file in any way you find useful, provided that
    ' you agree that the copyright owner above has no warranty, obligations
    ' or liability for such use.

    Option Explicit

    Dim objConnection, objCommand, objRootDSE, strDNSDomain, strQuery
    Dim objRecordSet, strDN, objGroup

    ' Use ADO to search Active Directory.
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand = CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"
    Set objCommand.ActiveConnection = objConnection

    ' Determine the DNS domain from the RootDSE object.
    Set objRootDSE = GetObject("LDAP://RootDSE")
    strDNSDomain = objRootDSE.Get("defaultNamingContext")

    ' Search for all groups, return the Distinguished Name of each.
    strQuery = "<LDAP://" & strDNSDomain _
      & ">;(objectClass=group);distinguishedName;subtree"
    objCommand.CommandText = strQuery
    objCommand.Properties("Page Size") = 100
    objCommand.Properties("Timeout") = 30
    objCommand.Properties("Cache Results") = False

    Set objRecordSet = objCommand.Execute
    If objRecordSet.EOF Then
      Wscript.Echo "No groups found"
      objConnection.Close
      Set objRootDSE = Nothing
      Set objConnection = Nothing
      Set objCommand = Nothing
      Set objRecordSet = Nothing
      Wscript.Quit
    End If

    ' Enumerate all groups, bind to each, and document group members.
    Do Until objRecordSet.EOF
      strDN = objRecordSet.Fields("distinguishedName")
      Set objGroup = GetObject("LDAP://" & strDN)
      Wscript.Echo objGroup.sAMAccountName _
        & " (" & GetType(objGroup.groupType) & ")"
      Call GetMembers(objGroup)
      objRecordSet.MoveNext
    Loop

    ' Clean up.
    objConnection.Close
    Set objRootDSE = Nothing
    Set objGroup = Nothing
    Set objConnection = Nothing
    Set objCommand = Nothing
    Set objRecordSet = Nothing

    Function GetType(intType)
    ' Function to determine group type from the GroupType attribute.
      If (intType And &h01) <> 0 Then
        GetType = "Built-in"
      ElseIf (intType And &h02) <> 0 Then
        GetType = "Global"
      ElseIf (intType And &h04) <> 0 Then
        GetType = "Local"
      ElseIf (intType And &h08) <> 0 Then
        GetType = "Universal"
      End If
      If (intType And &h80000000) <> 0 Then
        GetType = GetType & "/Security"
      Else
        GetType = GetType & "/Distribution"
      End If
    End Function

    Sub GetMembers(objADObject)
    ' Subroutine to document group membership.
    ' Members can be users or groups.
      Dim objMember, strType
      For Each objMember In objADObject.Members
        If UCase(Left(objMember.objectCategory, 8)) = "CN=GROUP" Then
          strType = "Group"
        Else
          strType = "User"
        End If
        Wscript.Echo "   Member: " & objMember.sAMAccountName _
          & " (" & strType & ")"
      Next
      Set objMember = Nothing
    End Sub


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    14 июля 2016 г. 11:46
  • Выводит ошибки?
    Function EnumGroup ($ADGroup)
    {
        ForEach ($MemberDN In $ADGroup.member)
        {
            $MemberDN = $MemberDN.Replace("/", "\/")
            $Member = [ADSI]"LDAP://$MemberDN"
            $Class = $Member.Class
            $Name = ($Member.distinguishedName).ToString()
           
    		If ($Class -ne "group")
    		{
    			If ($Script:Users.ContainsKey($MemberDN) -eq $False)
    			{
    				$Script:Users.Add($MemberDN,0)
    				"`tMember: {0}(User) {1}" -f $Member.SamAccountName.ToString(),$Member.Name.ToString()
    			}
    		}
            
    		If ($Class -eq "group")
            {
                EnumGroup $Member
            }
        }
    }
    
    $D = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
    $Domain = [ADSI]"LDAP://$D"
    $Searcher = New-Object System.DirectoryServices.DirectorySearcher
    $Searcher.PageSize = 200
    $Searcher.SearchScope = "subtree"
    $Searcher.PropertiesToLoad.Add("distinguishedName") | Out-Null
    $Searcher.SearchRoot = "LDAP://" + $Domain.distinguishedName
    
    Get-ADGroup -Filter * | Foreach {
    	$Script:Users = @{}
    	"{0}({1}/{2})" -f $_.Name,$_.GroupScope,$_.GroupCategory
    	
    	$DN = $_.distinguishedName
    	$DN = $DN.Replace("/", "\/")
    	$Group = [ADSI]"LDAP://$DN"
    
    	EnumGroup $Group
    }
    

    • Помечено в качестве ответа PuCtoy 14 июля 2016 г. 12:14
    14 июля 2016 г. 11:55
  • Вывод к сожалению

    Member: (User) S-1-5-21-131031252-614067625-1734988925-3371


    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    14 июля 2016 г. 12:10
  • Прошу прощения, все я понял причины ошибок, в данном случае мой склероз привел к тому что там юзеры с другово домена. И они естесно не будут отображаться....

    Все что вы делаете, вы делаете на свой страх и риск. Делайте Backup правильно.

    14 июля 2016 г. 12:14