Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell:列出ADusers-用户所属的需要组_Powershell - Fatal编程技术网

Powershell:列出ADusers-用户所属的需要组

Powershell:列出ADusers-用户所属的需要组,powershell,Powershell,我有一个用户列表(他们的CN),我想要一个他们所属组的列表。 我已经有了一个几乎可以实现这一目的的代码,但它显示如下: User1-group1;第2组 User2-group1;第2组;第三组等等 此外,组显示为可分辨名称(带有容器等),因此非常长。我只想要名字 我想展示如下: 用户1-组1 用户1-组2 User2-group1等 下面的代码显示了用户所属的组,但不是以我喜欢的直观方式显示的: Import-Csv -Path .\Input_CN.csv | ForEach-Object

我有一个用户列表(他们的CN),我想要一个他们所属组的列表。 我已经有了一个几乎可以实现这一目的的代码,但它显示如下:

User1-group1;第2组

User2-group1;第2组;第三组等等

此外,组显示为可分辨名称(带有容器等),因此非常长。我只想要名字

我想展示如下:

用户1-组1

用户1-组2

User2-group1等

下面的代码显示了用户所属的组,但不是以我喜欢的直观方式显示的:

Import-Csv -Path .\Input_CN.csv | 
ForEach-Object {
    $User = Get-ADUser -filter "CN -eq '$($_.CN)'" -properties memberof 
    [PSCustomObject]@{
        SourceCN = $_.CN
        MemberOf = $User.MemberOf -join ";"
    }
} | Export-Csv -Path .\Output.csv -Delimiter ";" -NoTypeInformation
.\Output.csv
我有一些其他代码列出了我想要的组,但我无法按用户列出。无法将其与上述代码组合

get-aduser -filter {cn -eq "Testuser"} -properties memberof |
Select -ExpandProperty memberof |
ForEach-Object{Get-ADGroup $_} |
Select -ExpandProperty Name

提前感谢:)

您可以这样组合两个代码段:

Import-Csv -Path .\Input_CN.csv | 
ForEach-Object {
    $user = Get-ADUser -Filter "CN -eq '$($_.CN)'" -Properties MemberOf, CN -ErrorAction SilentlyContinue
    foreach($group in $user.MemberOf) {
        [PSCustomObject]@{
            SourceCN = $user.CN
            MemberOf = (Get-ADGroup -Identity $group).Name
        }
    }
} | Export-Csv -Path .\Output.csv -Delimiter ";" -NoTypeInformation

编辑

虽然我从未见过广告用户完全没有组成员资格(在MemberOf属性中至少应该有默认的
域用户
),但您评论说您也希望对此进行测试

Import-Csv -Path .\Input_CN.csv | 
ForEach-Object {
    $user = Get-ADUser -Filter "CN -eq '$($_.CN)'" -Properties MemberOf, CN -ErrorAction SilentlyContinue
    if (!$user) {
        Write-Warning "No user found with CN '$($_.CN)'"
        # skip this one and resume with the next CN in the list
        continue
    }
    $groups = $user.MemberOf
    if (!$groups -or $groups.Count -eq 0) {
            [PSCustomObject]@{
                SourceCN = $user.CN
                MemberOf = 'No Groups'
            }
    }
    else {
        foreach($group in $groups) {
            [PSCustomObject]@{
                SourceCN = $user.CN
                MemberOf = (Get-ADGroup -Identity $group).Name
            }
        }
    }
} | Export-Csv -Path .\Output.csv -Delimiter ";" -NoTypeInformation

您可以这样组合两个代码段:

Import-Csv -Path .\Input_CN.csv | 
ForEach-Object {
    $user = Get-ADUser -Filter "CN -eq '$($_.CN)'" -Properties MemberOf, CN -ErrorAction SilentlyContinue
    foreach($group in $user.MemberOf) {
        [PSCustomObject]@{
            SourceCN = $user.CN
            MemberOf = (Get-ADGroup -Identity $group).Name
        }
    }
} | Export-Csv -Path .\Output.csv -Delimiter ";" -NoTypeInformation

编辑

虽然我从未见过广告用户完全没有组成员资格(在MemberOf属性中至少应该有默认的
域用户
),但您评论说您也希望对此进行测试

Import-Csv -Path .\Input_CN.csv | 
ForEach-Object {
    $user = Get-ADUser -Filter "CN -eq '$($_.CN)'" -Properties MemberOf, CN -ErrorAction SilentlyContinue
    if (!$user) {
        Write-Warning "No user found with CN '$($_.CN)'"
        # skip this one and resume with the next CN in the list
        continue
    }
    $groups = $user.MemberOf
    if (!$groups -or $groups.Count -eq 0) {
            [PSCustomObject]@{
                SourceCN = $user.CN
                MemberOf = 'No Groups'
            }
    }
    else {
        foreach($group in $groups) {
            [PSCustomObject]@{
                SourceCN = $user.CN
                MemberOf = (Get-ADGroup -Identity $group).Name
            }
        }
    }
} | Export-Csv -Path .\Output.csv -Delimiter ";" -NoTypeInformation

这有点笨重,但可以使用嵌套循环:

Import-Csv -Path .\Input_CN.csv | ForEach-Object {
    $user = Get-ADUser -filter "CN -eq '$($_.CN)'" -properties cn, memberof
        $user | ForEach-Object {
            $_.MemberOf |
                ForEach-Object {
                    [PSCustomObject]@{
                        SourceCN = $user.CN
                        MemberOf = $_.split('[=,]')[1]
                }
        }
    }
} | Where-Object {$null -ne $_.MemberOf} | 
        Export-Csv -Path .\Output.csv -Delimiter ";" -NoTypeInformation

更新:更新为仅显示组名的“CN”部分,并筛选任何非组成员的用户

这有点笨重,但您可以使用嵌套循环:

Import-Csv -Path .\Input_CN.csv | ForEach-Object {
    $user = Get-ADUser -filter "CN -eq '$($_.CN)'" -properties cn, memberof
        $user | ForEach-Object {
            $_.MemberOf |
                ForEach-Object {
                    [PSCustomObject]@{
                        SourceCN = $user.CN
                        MemberOf = $_.split('[=,]')[1]
                }
        }
    }
} | Where-Object {$null -ne $_.MemberOf} | 
        Export-Csv -Path .\Output.csv -Delimiter ";" -NoTypeInformation

更新:更新为仅显示组名的“CN”部分,并筛选任何非组成员的用户

这将组显示为SamAccountName,这很好。但是,这些组仍然位于用户后面的1行上,以“;”分隔。User1-group1;组2用户2-组1;第2组;第3组etc@Maikel对不起,我误解了。我已经更新了代码以导出所需的格式。太好了,谢谢!是否可以同时显示非组成员的用户?例如,显示“无组成员”的内容?我用
MemberOf=If((Get-ADGroup-Identity$group).Name){(Get-ADGroup-Identity$group.Name}Else{'**No-Groups**'}
尝试了一些东西,我猜这不起作用,因为用户被过滤掉是因为foreach?@Maikel广告用户总是默认
域用户组的成员。在域中创建用户帐户时,它将自动添加到此组。根本不存在用户不属于任何组的情况。看见如果您想让用户不是特定组的成员,那是另一个问题。@Maikel我觉得不太可能,但我添加了新代码来测试用户的MemberOf属性是否完全为空。这将组显示为SamAccountName,这很好。但是,这些组仍然位于用户后面的1行上,以“;”分隔。User1-group1;组2用户2-组1;第2组;第3组etc@Maikel对不起,我误解了。我已经更新了代码以导出所需的格式。太好了,谢谢!是否可以同时显示非组成员的用户?例如,显示“无组成员”的内容?我用
MemberOf=If((Get-ADGroup-Identity$group).Name){(Get-ADGroup-Identity$group.Name}Else{'**No-Groups**'}
尝试了一些东西,我猜这不起作用,因为用户被过滤掉是因为foreach?@Maikel广告用户总是默认
域用户组的成员。在域中创建用户帐户时,它将自动添加到此组。根本不存在用户不属于任何组的情况。看见如果你想让用户不是特定组的成员,那是另一个问题。@Maikel我觉得不太可能,但我添加了新代码来测试用户的MemberOf属性是否完全为空。这几乎就是我需要的。它在单独的一行上显示每个组。但是有两件小事情我希望能够解决:1:如果用户不是组的成员,则不会显示该用户。因此,它只显示属于组的用户。2:是否可以只显示组的名称/SamAccountname?@Maikel,我根据您的评论更新了我的示例。希望有帮助。谢谢,这给了我几乎我喜欢的结果。请参阅下面带有@Theo的注释,它提供了与代码相同的输出。因此,我只需要向没有组的用户显示这几乎就是我所需要的。它在单独的一行上显示每个组。但是有两件小事情我希望能够解决:1:如果用户不是组的成员,则不会显示该用户。因此,它只显示属于组的用户。2:是否可以只显示组的名称/SamAccountname?@Maikel,我根据您的评论更新了我的示例。希望有帮助。谢谢,这给了我几乎我喜欢的结果。请参阅下面带有@Theo的注释,它提供了与代码相同的输出。因此,我只需要显示没有组的用户