Multi-Group AD Проверка с выходом - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь создать скрипт для проверки, не является ли член группы A членом группы bg, и если они не являются их членами, чтобы вывести свое имя в журнал / лист Excel - я получилон выводит имена людей, которые являются членами этих групп, но я не могу заставить его вернуть противоположное для нескольких групп. Если бы я мог сделать лист Excel, который возвращает, какие пользователи являются частью групп в одном столбце, а другие - в другом, это было бы здорово, но у меня были проблемы с выводом на лист Excel. Вот код, который я сделал до сих пор. любая помощь приветствуется

    $logfile = "C:\Users\x\temp\outputgroupmembers.log"
    $group1 = get-adgroup group-a
    $checkgroups = Get-ADGroup -filter 'Name -like "AREA_*"' | Select-Object Name
    Foreach ($Usr In Get-ADGroupMember -Identity $group1.DistinguishedName)
    {
        # If the 'MemberOf' array of $Usr's group memberships contains 'group1', then...
        If ((Get-ADUser $Usr.SamAccountName -Properties MemberOf).MemberOf -contains $checkgroups)
        {
            try{
            # output user information to document log'.
            $displayname = get-aduser $Usr.SamAccountName -Properties DisplayName | select -expand displayname
            write-output $Usr.SamAccountName $displayname >> $logfile
            }
        catch {
            write-output "Domain users group NOT output to logfile" >> $logfile
        }
    }}

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Это код, который я получил для работы из другого поста, который я сделал с тем же вопросом на Reddit, если у кого-то есть аналогичные проблемы

$ReferenceGroup = Get-ADGroupMember BBB
$GroupList = @('CCC')
$Output = New-Object System.Collections.Generic.List[System.Object]
foreach ($User in  $ReferenceGroup) {
    $MemberObject = [pscustomobject]@{
            Name = $User.name
    }
            foreach ($Group in $GroupList) {
            if ((Get-ADGroupMember $Group)-match $User){
                $MemberObject | Add-Member -MemberType NoteProperty -Name $Group -Value Yes
            }
            else {
                $MemberObject | Add-Member -MemberType NoteProperty -Name $Group -Value No
            }
        }
    $Output.Add($MemberObject)
}
$Output | Export-Csv -Path C:\Users\Public\test.csv
0 голосов
/ 25 октября 2019

Взгляните на это порезано. Я изменил ваш код и добавил второй цикл foreach.
Возможно, это поможет решить вашу задачу.

[System.String]$InputADGroup = 'group-a'
[Microsoft.ActiveDirectory.Management.ADGroup[]]$ADGroupsToCheck = Get-ADGroup -Filter 'Name -like "AREA_*"'

foreach ($Member in (Get-ADGroupMember -Identity $InputADGroup)) #Process each member of the input ad group
{
    #Get MemberOf from user
    [System.String[]]$MemberOfGroups = (Get-ADUser -Identity $Member.SamAccountName -Properties MemberOf).MemberOf

    #Check each MemberOf group
    foreach ($MemberOfGroup in $MemberOfGroups)
    {
        #Check if user is member of one of the check groups
        if ($ADGroupsToCheck.DistinguishedName -contains $MemberOfGroup)
        {
            Write-Output -InputObject ('User ' + $Member.SamAccountName + ' is member of ' + $MemberOfGroup)
        }
    }
}
...