用于查询属于特定组名及其变体的所有用户的powershell脚本

用于查询属于特定组名及其变体的所有用户的powershell脚本,powershell,active-directory,Powershell,Active Directory,我正在尝试查找属于组“Windows”的所有用户。 我想显示他们的id、姓、名 所需的输出格式: Windows Users,1234567,John,Doe Windows Administators,7654321,Jane,Doe 这一行代码做的更多,做的更少,但我需要每次修改参数标识,从“Windows用户”到“Windows PowerUsers”再到“Windows管理员”等等 例如: Get-ADGroupMember -identity "Windows Use

我正在尝试查找属于组“Windows”的所有用户。 我想显示他们的id、姓、名

所需的输出格式:

    Windows Users,1234567,John,Doe
    Windows Administators,7654321,Jane,Doe
这一行代码做的更多,做的更少,但我需要每次修改参数标识,从“Windows用户”到“Windows PowerUsers”再到“Windows管理员”等等

例如:

Get-ADGroupMember -identity "Windows Users" -Recursive | Get-ADUser | select SamAccountName, Surname, GivenName
所以我试着把所有的东西放在一起,但它给了我错误

$ADGroups = Get-ADGroup -Filter {name -like "Windows*"} 

foreach ($ADGroup in $ADGroups) {
    Get-ADGroup -filter {Name -eq $ADGroup.Name} | Get-ADGroupMember -identity 
    $ADGroup.Name -Recursive | Get-ADUser | select SamAccountName, Surname, GivenName
 }
任何想法都将不胜感激。我不知道如何捕获属于Windows*组的所有用户,例如“Windows用户”到“Windows超级用户”到“Windows管理员”等

注意:我研究过这个,但它不是我想要的


多谢各位

我目前无法访问AD,但我会尝试一下

get-aduser -filter {memberof -like "Windows*"} -property samaccountname,surname,givenname,memberof | select samaccountname,surname,givenname
或者你可以在你原来的foreach循环中尝试这个

get-adgroup -filter {name -eq $adgroup.name} | select -expand members | get-aduser $_ | select samaccountname,surname,givenname

我不记得“members”产生了什么,我相信它是samaccountname,如果不是的话,你可以添加一个ldap过滤器来获得aduser
-filter{whatever-eq$\u}
我现在没有访问AD的权限,但我会尝试一下

get-aduser -filter {memberof -like "Windows*"} -property samaccountname,surname,givenname,memberof | select samaccountname,surname,givenname
或者你可以在你原来的foreach循环中尝试这个

get-adgroup -filter {name -eq $adgroup.name} | select -expand members | get-aduser $_ | select samaccountname,surname,givenname

我不记得“members”产生了什么,我相信它是samaccountname,如果不是的话,您可以添加一个ldap过滤器来获得aduser
-filter{whatever-eq$}
您的示例是一个好的开始

试试这个。它应该做到:

Get-ADGroup -Filter {name -like "Windows*"} | foreach {
    $currentGroup = $_.Name
    $_ | Get-ADGroupMember | foreach {
        $_ | Get-ADUser | select @{name="Group"; expression={ $currentGroup }}, SamAccountName, Surname, GivenName
    }
 }

你的例子是一个好的开始

试试这个。它应该做到:

Get-ADGroup -Filter {name -like "Windows*"} | foreach {
    $currentGroup = $_.Name
    $_ | Get-ADGroupMember | foreach {
        $_ | Get-ADUser | select @{name="Group"; expression={ $currentGroup }}, SamAccountName, Surname, GivenName
    }
 }

你确定在foreach循环中需要“getadgroup-filter{Name-eq$ADGroup.Name}|”吗?哈哈,这正是我的问题。不确定需要什么,或者整个模块是否错误,它似乎没有做任何有用的事情。就像您通过该组的组名获取组对象:)顺便说一句,是$ADGroups.name字符串数组吗?是的,我的想法是将所有组放在一个数组中,然后从该数组中查找属于该组的用户。也许甚至foreach循环中的代码块都是错误的假设您使用一个线性程序,这也应该可以使用:foreach($grp in@(“Windows用户”、“Windows超级用户”、“Windows管理员”){Get-ADGroupMember-identity$grp-Recursive | Get ADUser | select SamAccountName、姓氏、GivenName}。如果它能工作,请使用您文章中的$ADGroups.Name替换我的阵列。你得到了什么错误?你确定你需要在foreach循环中“getadgroup-filter{Name-eq$ADGroup.Name}|”吗?哈哈,这正是我的问题。不确定需要什么,或者整个模块是否错误,它似乎没有做任何有用的事情。就像您通过该组的组名获取组对象:)顺便说一句,是$ADGroups.name字符串数组吗?是的,我的想法是将所有组放在一个数组中,然后从该数组中查找属于该组的用户。也许甚至foreach循环中的代码块都是错误的假设您使用一个线性程序,这也应该可以使用:foreach($grp in@(“Windows用户”、“Windows超级用户”、“Windows管理员”){Get-ADGroupMember-identity$grp-Recursive | Get ADUser | select SamAccountName、姓氏、GivenName}。如果它能工作,请使用您文章中的$ADGroups.Name替换我的阵列。你犯了什么错误谢谢你,这很有效。我只是将{name=“Group”修改为{name=“GroupName”多个组的语法是什么?类似这样的?获取ADGroup-Filter{name-like“Windows*”和“Linux*”以及“UNIX”}@user2585000,这将像:-Filter{name-like“Windows*”-和name-like“Linux*”-以及name-like“UNIX”}谢谢,这很有效。我只修改了{name=“Group”到@{name=“GroupName”多个组的语法是什么?类似这样的东西?获取ADGroup-Filter{name-like“Windows*”和“Linux*”以及“UNIX”}@user2585000这将像:-Filter{name-like“Windows*”-和name-like“Linux*”-以及name-like“UNIX”}