Я пытаюсь создать скрипт для проверки, не является ли член группы 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
        }
    }}
1
Andrew Baker 25 Окт 2019 в 00:53
Не хватает какого-то кода? Где указан $group? И я думаю, вам нужно добавить еще один цикл foreach для обработки всех $checkgroups.
 – 
Patrick
25 Окт 2019 в 09:32
Извините, что в коде был изменен на $ group1, но забыл исправить перед заменой кода. Я попытался получить объект foreach в коде после -contains, но, возможно, делал это неправильно. Я попытался сделать -contains foreach-object ($ checkgroups), но он выдал ошибки, эта строка кода - единственная область, я не могу заставить ее работать правильно, я могу получить результаты, если перейду на одну группу как содержит или не содержит, но я боюсь, что мне может потребоваться распространить его и распространить на каждую группу в отдельной строке кода, что было бы проблемой.
 – 
Andrew Baker
25 Окт 2019 в 13:44

2 ответа

Взгляните на это. Я изменил ваш код и добавил второй цикл 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)
        }
    }
}
0
Patrick 25 Окт 2019 в 15:29
К сожалению, по какой-то причине я не могу заставить этот скрипт выводиться, но я получил его из другого поста на Reddit, который я сделал, который будет работать для моих нужд, хотя это не идеальное решение, оно достаточно хорошее. Спасибо за помощь.
 – 
Andrew Baker
25 Окт 2019 в 22:51

Это код, который я получил из другого сообщения, которое я сделал с тем же вопросом на 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
Andrew Baker 25 Окт 2019 в 22:52