question

YZiyaGle-8022 avatar image
0 Votes"
YZiyaGle-8022 asked YZiyaGle-8022 published

Get DisplayName of domain users who are members of local groups

I have a script which lists all local groups and their members and give CSV output.

I modified script to get displayName property of domain user members of local groups (Not domain groups not local groups and not local users. Just the displayName of domain users)

But the script does not work stable. It shows the same displayname for every member without checking if it is a domain object or local object. Or without checking if it is a group or user.

Is there any suggestion to achieve my goal?

 $complist = get-content C:\temp\comps2.txt
 foreach ($comp in $complist){
    
 $strComputer = $comp #Enter the name of the target computer, localhost is used by default
 Write-Host "Computer: $strComputer"
 $computer = [ADSI]"WinNT://$strComputer"
 $objCount = ($computer.psbase.children | measure-object).count
 Write-Host "Q-ty objects for computer '$strComputer' = $objCount"
 $Counter = 1
 $result = @()
 foreach($adsiObj in $computer.psbase.children)
 {
 switch -regex($adsiObj.psbase.SchemaClassName)
   {
     "group"
     {
       $group = $adsiObj.name
       $LocalGroup = [ADSI]"WinNT://$strComputer/$group,group"
       $Members = @($LocalGroup.psbase.Invoke("Members"))
       $objCount = ($Members | measure-object).count
       Write-Host "Q-ty objects for group '$group' = $objCount"
       $GName = $group.tostring()
    
       ForEach ($Member In $Members) {
    
          
         $Name = $Member.GetType().InvokeMember("Name", "GetProperty", $Null, $Member, $Null)
         $Path = $Member.GetType().InvokeMember("ADsPath", "GetProperty", $Null, $Member, $Null)
         $membername= Get-ADUser $name -Properties displayname | Select-Object -ExpandProperty displayname
            
         Write-Host " Object = $Path"
    
                  $isGroup = ($Member.GetType().InvokeMember("Class", "GetProperty", $Null, $Member, $Null) -eq "group")
    
                    
    
    
         If (($Path -like "*/$strComputer/*") -Or ($Path -like "WinNT://NT*")) { $Type = "Local"
         } Else 
            
         {$Type = "Domain"}
    
            
    
            
    
         $result += New-Object PSObject -Property @{
           Computername = $strComputer
           NameMember = $Name
           PathMember = $Path
           TypeMemeber = $Type
           ParentGroup = $GName
           isGroupMemeber = $isGroup
           Depth = $Counter
           Membername = $membername
    
         }
       }
     }
   } #end switch
      
 } #end foreach
    
 Write-Host "Total objects = " ($result | measure-object).count
 $result = $result | select-object Computername, ParentGroup, NameMember, TypeMemeber, PathMember, isGroupMemeber, membername
 $result | Export-Csv -append -path ("C:\temp\LocalGroups({0})-{1:yyyyMMddHHmm}.csv" -f
 $env:COMPUTERNAME,(Get-Date)) -Delimiter ";" -Encoding "UTF8" -force -NoTypeInformation}
windows-serverwindows-server-powershell
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

0 Answers