网格中的多行

时间:2018-08-29 08:21:49

标签: powershell

我正在尝试列出特定用户的所有广告组成员身份。输入将是用逗号'login1,login2'分隔的登录字符串。 因此,我遍历每个用户,并以用户名作为标题列出其成员身份。不知何故,它仅显示第一个条目。它还将用户组显示为一行,我不知道如何更改。

以下代码:

$users = $logon -split ','
$q = @()

foreach ($user in $users) {
    $usernm = Get-ADUser -Filter 'samAccountName -like $user' | select Name
    $useraccess = Get-ADPrincipalGroupMembership $user | Select-Object Name
    $userobj = New-Object PSObject
    $userobj | Add-Member Noteproperty $usernm.Name $useraccess.Name
    $q += $userobj
}

预期的输出将类似于:

fullnameuser1           fullnameuser2         list of users goes on...
-------------           -------------         ------------------------
adgroup1                adgroup3              ...
adgroup2                adgroup4
...                     ...

原则上,这还意味着如果我键入$q.'fullnameuser1',输出将是:

fullnameuser1 
-------------
adgroup1
adgroup2
...     

无论何时运行代码,它都只会添加第一个用户的访问权限,并在一行上返回所有组。因此,我需要以某种方式遍历所有组成员身份,并为每个成员添加一行。

2 个答案:

答案 0 :(得分:2)

首先,PowerShell不会在单引号字符串中扩展变量。因此,Get-ADUser永远不会找到匹配项,除非您有一个使用文字帐户名$user的用户。另外,使用不带通配符的-like运算符会产生与-eq运算符相同的结果。如果您正在寻找完全匹配的商品,请使用后者。您可能还需要添加嵌套的引号。

Get-ADUser -Filter "samAccountName -eq '${user}'"

更正Get-ADUser似乎可以自己解决过滤器字符串中的变量。我验证了该声明

Get-ADUser -Filter 'samAccountName -eq $user'

确实确实返回了$user的用户对象,尽管该字符串用单引号引起了。


如果要进行模糊匹配,最好使用ambiguous name resolution

Get-ADUser -LDAPFilter "(anr=${user})"

您可能还希望避免在循环中附加到数组,并在创建后将成员添加到自定义对象。两者都是缓慢的操作。将循环输出收集到一个变量中,并在创建对象时直接指定对象属性。

$q = foreach ($user in $users) {
    ...
    New-Object -Type PSObject -Property {
        $usernm.Name = $useraccess.Name
    }
}

最后,我会考虑使用用户名作为不良设计的属性名。如果您要构建哈希表(将唯一键映射到值),那没关系,但是对于自定义对象,属性名称对于相同种类的所有对象都应该相同。

New-Object -Type PSObject -Property {
    Name  = $usernm.Name
    Group = $useraccess.Name
}

答案 1 :(得分:0)

轻松查询所有用户并将其存储在$users中,例如:

Get-ADUser -Filter * -SearchBase "dc=domain,dc=local"

然后您可以将结果导出为csv或表。

要导出为CSV格式:

Get-ADPrincipalGroupMembership <Username> | select name, groupcategory, groupscope | export-CSV C:\data\ADUserGroups.csv` 

要在控制台中将结果格式化为Table格式:

Get-ADPrincipalGroupMembership <Username> | select name, groupcategory, groupscope | Format-Table