使用 .txt 文件在 AD 组中查找 ManagedBy 和 ManagedBy Email

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

我在尝试读取我的脚本并将 AD 组应用到我的脚本时遇到问题。现在,它只是发布我的脚本中的内容,但我想让脚本读取我的 .txt 文件中的内容,并将其与脚本的其余部分一起使用。

$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"

对于解决方法,您可以使用此 powershell 脚本获取组的 mangedBy

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}}

最简单的方法是遍历 ADGroupList.txt 文件中的组名(假设这是一个组名列表,每个组名单独一行)

$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