Извлечение ADUser из списка групп AD в другом домене - PullRequest
0 голосов
/ 22 мая 2019

У меня есть этот код, который извлекает информацию ADuser из списка групп AD, однако некоторые группы AD расположены в другом домене.Проблема заключается в том, что код извлекает только информацию ADuser о первом Домене1 , упомянутом в списке доменов, он не переходит в другой домен и не извлекает информацию о группе AD, которая находится в другом домене.

$outFile=".\Output.csv"
$report=@()
$ADGroups = Get-Content ".\ADGroups.txt"

$Domains = @("Domain1.com","Domain2.com","Domain3.com","Domain4.com","Domain5.com")

foreach ($ADGroup in $ADGroups)
{

   try{

Foreach ($Domain in $Domains)


           {
$ADGroupMem = Get-ADGroupMember -Identity $ADGroup  -server $Domain

ForEach ($Member in $ADGroupMem){

    $ADUser = $Member | Get-ADUser -Properties SamAccountName,Department,Title,Manager,l,Mobile
    [PSCustomObject]@{
            UserID = $ADUser.SamAccountName
            Group = $ADGroup
            City = $ADUser.l

                      } 

     $localAdminsReport = new-object PSObject
     $localAdminsReport | add-member -membertype NoteProperty -name "UserID" -Value $ADUser.SamAccountName
     $localAdminsReport | add-member -membertype NoteProperty -name "Group" -Value  $ADGroup
     $localAdminsReport | add-member -membertype NoteProperty -name "City" -Value  $ADUser.l


    #Write output into .csv file
    #write-host  $report  -ForegroundColor cyan 
     write-host   $Domain                
    $report +=$localAdminsReport
    $report|Export-Csv -Path $outFile -NoTypeInformation 

                                } 
            }

         }
      Catch{}
}

Когда отчет извлекается, он извлекает информацию только из первых групп AD Domain1 и оставляет другие группы AD, которые расположены в Domain2, Domain3 .....

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Это сработало для меня. Спасибо, Мервальд

    $outFile = ".\Output.csv"
    $report = @()
    $ADGroups = Get-Content ".\ADGroupslist.txt"



    foreach ($ADGroup in $ADGroups) {


    $Domains = @("Domain1","Domain2","Domain3","Domain4","Domain5")

    foreach ($Domain in $Domains)
    {


        try
        {
            $ADGroupMem = Get-ADGroupMember -Identity $ADGroup -server $Domain
            ForEach ($Member in $ADGroupMem) {

                    $ADUser = $Member | Get-ADUser -Properties SamAccountName, l
                    [PSCustomObject]@{
                        UserID = $ADUser.SamAccountName
                        Group = $ADGroup
                        City = $ADUser.l

                                      } 
                    $localAdminsReport = new-object PSObject
                    $localAdminsReport | add-member -membertype NoteProperty -name "UserID" -Value $ADUser.SamAccountName
                    $localAdminsReport | add-member -membertype NoteProperty -name "Group" -Value  $ADGroup
                    $localAdminsReport | add-member -membertype NoteProperty -name "City" -Value  $ADUser.l

                    $report += $localAdminsReport
                    $report | Export-Csv -Path $outFile -NoTypeInformation -Append
                    write-host   "$ADGroup : $Domain"   -ForegroundColor cyan   

                    }
        }
        catch
        {
             Write-Error "Exception occurred $_"

        }

    }


}
$ErrorActionPreference = "Continue"
$report | ForEach-Object { Write-Host $_}  
0 голосов
/ 22 мая 2019

Я переработал твой сценарий.Как уже упоминалось в комментарии выше, вы должны использовать переключатель -Append командлета Export-Csv.Другое дело, что ваше предложение catch пусто, поэтому вы не сможете распознать ошибки.Я также рекомендовал бы установить $ErrorPreference на Stop, иначе командлеты не будут выдавать ошибку.Вот переработанный код:

    $outFile = ".\Output.csv"
    $report = @()
    $ADGroups = Get-Content ".\ADGroups.txt"

    $Domains = @("Domain1.com", "Domain2.com", "Domain3.com", "Domain4.com", "Domain5.com")
    $ErrorActionPreference = "Stop"
    foreach ($ADGroup in $ADGroups) {
        try {
            Foreach ($Domain in $Domains) {
                $ADGroupMem = Get-ADGroupMember -Identity $ADGroup -server $Domain
                ForEach ($Member in $ADGroupMem) {

                    $ADUser = $Member | Get-ADUser -Properties SamAccountName, Department, Title, Manager, l, Mobile
                    $localAdminsReport = new-object PSObject
                    $localAdminsReport | add-member -membertype NoteProperty -name "UserID" -Value $ADUser.SamAccountName
                    $localAdminsReport | add-member -membertype NoteProperty -name "Group" -Value  $ADGroup
                    $localAdminsReport | add-member -membertype NoteProperty -name "City" -Value  $ADUser.l

                    $report += $localAdminsReport
                    $report | Export-Csv -Path $outFile -NoTypeInformation -Append
                } 
            }
        }
        Catch { 
            Write-Error "Exception occurred $_"
        }
    }
    $ErrorActionPreference = "SilentlyContinue"
    $report | ForEach-Object { Write-Host $_}

. При коде содержимое $report выводится для целей отладки.Проверьте, имеет ли $report разницу с экспортированным CSV-файлом.

Вы также можете отлаживать свой код с помощью Код Visual Studio , командной строки degguer или Powershell ISE .

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...