Home > Net >  Using a .txt file to find ManagedBy and ManagedBy Email within an AD Group
Using a .txt file to find ManagedBy and ManagedBy Email within an AD Group

Time:03-25

I'm having issues trying to have my script read and apply the AD groups with my script. Right now, it's just posting what's in my script, but I would like to have the script read what's in my .txt file and use it with the rest of my script.

$filePath = "C:\Users\UserName\Downloads\ADGroupList.txt"
Get-Content -Path $filePath

Get-ADGroup -filter {Name -like "$filePath" } -Properties managedBy |
ForEach-Object { 
$managedBy = $_.managedBy;

if ($managedBy -ne $null)
{
 $manager = (get-aduser -Identity $managedBy -Properties emailAddress);
 $managerName = $manager.Name;
 $managerEmail = $manager.emailAddress;
}
else
{
 $managerName = 'N/A';
 $managerEmail = 'N/A';
}

Write-Output $_; } |
Select-Object @{n='Group Name';e={$_.Name}}, @{n='Managed By Name';e={$managerName}}, @{n='Managed By Email';e={$managerEmail}}

Export-Csv -Path "C:\Users\UserName\Documents\ADGroupManagerList.csv"

CodePudding user response:

The easiest way is to loop over the group names you have in the ADGroupList.txt file (assuming this is a list of group names, each on a separate line)

$filePath = "C:\Users\UserName\Downloads\ADGroupList.txt"

# just loop over the group names you have in the text file and capture the output
$result = Get-Content -Path $filePath | ForEach-Object {
    $group = Get-ADGroup -Filter "Name -like '$_'" -Properties managedBy
    # create an object pre filled in when no manager was found
    $obj = [PsCustomObject]@{
        'Group Name'       = $group.Name
        'Managed By Name'  = 'N/A'
        'Managed By Email' = 'N/A'
    }
    # test if the ManagedBy is populated
    if (-not [string]::IsNullOrWhiteSpace($group.ManagedBy)) {
        # try to use the DN in property ManagedBy to find the manager
        try {
            $manager = Get-ADUser -Identity $group.ManagedBy -Properties EmailAddress -ErrorAction Stop
            $obj.'Managed By Name'  = $manager.Name
            $obj.'Managed By Email' = $manager.EmailAddress
        }
        catch {
            Write-Warning "No user found for '$($group.ManagedBy)'.. Please check AD."
        }
    }
    # output the object so it gets collected in variable $result
    $obj
}

# write the file
$result | Export-Csv -Path "C:\Users\UserName\Documents\ADGroupManagerList.csv" -NoTypeInformation

CodePudding user response:

For workaround you can use this powershell script to get the mangedBy of groups.

Get-ADGroup -filter * -Properties managedBy |
ForEach-Object { 
$managedBy = $_.managedBy;

if ($managedBy -ne $null)
{
 $manager = (get-aduser -Identity $managedBy -Properties emailAddress);
 $managerName = $manager.Name;
 $managerEmail = $manager.emailAddress;
}
else
{
 $managerName = 'N/A';
 $managerEmail = 'N/A';
}

Write-Output $_; } |
Select-Object @{n='Group Name';e={$_.Name}}, @{n='Managed By Name';e={$managerName}}, @{n='Managed By Email';e={$managerEmail}}

enter image description here

  • Related