Hello,
This is the current script:
Import-Module ActiveDirectory
$Searcher = New-Object DirectoryServices.DirectorySearcher([ADSI]"")
$Searcher.SearchRoot = 'LDAP://OU=2019,OU=App,OU=Windows'
$Searcher.Filter = "(objectClass=computer)"
$Computers = ($Searcher.Findall())
$Results = @()
md C:\All_Local_Admins
Foreach ($Computer in $Computers){
$Path=$Computer.Path
[string]$Name=([ADSI]"$Path").Name
write-host $Name
$members =[ADSI]"WinNT://$Name/Administrators"
$members = @($members.psbase.Invoke("Members"))
$members | foreach {
$LocalAdmins = $.GetType().InvokeMember("Name", 'GetProperty', $null, $, $null) # Create a new object for the purpose of exporting as a CSV
$Class = $.GetType().InvokeMember("Class", 'GetProperty', $null, $, $null)
$pubObject = new-object PSObject
$pubObject | add-member -membertype NoteProperty -name "Server" -Value $Name
$pubObject | add-member -membertype NoteProperty -name "Administrators" -Value $LocalAdmins
$pubObject | add-Member -membertype NoteProperty -name "Class" -Value $Class
# Find out if this is a user or group object
if ($Class -like "User"){
$Type = "User"
$DisplayName = Get-ADUser -Identity $LocalAdmins | Select Name
$pubObject | add-Member -membertype NoteProperty -name "Display Name" -Value $DisplayName
}
else {
$Type = "Group"
$Grp_Names = Get-ADGroupMember $LocalAdmins | Select name
$Grp_Names | foreach {
if ($Class -like "User"){
$Type = "User"
$DisplayName = Get-ADUser -Identity $LocalAdmins | Select Name
$pubObject | add-Member -membertype NoteProperty -name "Display Name" -Value $DisplayName
}
else {
$Type = "Group"
$Grp_Names = Get-ADGroupMember $LocalAdmins | Select name
$Grp_Names | foreach {
if ($Class -like "User"){
$Type = "User"
$DisplayName = Get-ADUser -Identity $LocalAdmins | Select Name
$pubObject | add-Member -membertype NoteProperty -name "Display Name" -Value $DisplayName
}
else {}
}
}
}
}
# Append this iteration of our for loop to our results array.
$Results += $pubObject
}
}
$Results | Export-Csv -Path "C:\All_Local_Admins\ServerLocalAdmins.csv" -NoTypeInformation
$Results = $Null
This update helps a lot thanks a lot now the results are showing as:
"Server","Administrators","Class","Display Name"
"VIT2019","Administrator","User","@{Name=Administrator}"
"VIT2019","Domain Admins","Group",
"VIT2019","MITS Server Service Accounts","Group",
"VIT2019","MCCS Server Staff Admin","Group",
"VIT2019","Azure QA-TEST VM Admins","Group",
"VIT2019","aaaaaa","User","@{Name=xxxx [T1]}"
I am not sure where to place the try/catch?
Also I need more information about the groups I would like to list the details per users...
e.g.: MCCS Server Staff Admins contains several groups and multiple users as well...
3 sub-groups and then within these 3 sub-groups 8 + 12 + 6 users so I would like these 26 users listed...
All 'objectclass: group' needs to be expanded to their 'objectclass: user'...
Thanks,
Dom