【问题标题】:Multi-Group AD Check with output带输出的多组 AD 检查
【发布时间】:2019-10-24 21:53:23
【问题描述】:

我正在尝试创建一个脚本,用于检查 A 组的成员是否不是 b-g 组的成员,如果他们不是其中的成员,则将他们的姓名输出到日志/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
        }
    }}

【问题讨论】:

  • 是否缺少某些代码? $group 在哪里指定?而且我认为您必须添加另一个foreach 循环来处理所有$checkgroups
  • 对不起,在代码中改成了 $group1 但在替换代码之前忘记更正了。我试图在 -contains 之后在代码中获取一个 foreach 对象,但可能做得不对。我试图做 -contains foreach-object ($checkgroups) 但它抛出了错误,那行代码是我无法让它正常工作的唯一区域,如果我将其更改为单个组,我可以获得结果包含或不包含,但我担心我可能需要将它展开并在其自己的代码行中将其扩展到每个组,这会很痛苦。

标签: powershell active-directory wildcard


【解决方案1】:

看看这个截图。我修改了您的代码并添加了第二个 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)
        }
    }
}

【讨论】:

  • 遗憾的是,由于某种原因,我似乎无法输出该脚本,但我确实从 reddit 上的另一篇文章中得到了一个,即使它不是完美的,它也能满足我的需求解决方案就足够了。感谢您的帮助。
【解决方案2】:

如果有人遇到类似问题,这是我从另一个帖子中得到的代码,我在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    相关资源
    最近更新 更多