Powershell 网格中的多行

Powershell 网格中的多行,powershell,Powershell,我正在尝试列出特定用户的所有广告组成员资格。输入将是一个用逗号分隔的登录字符串'login1,login2'。 所以我检查了每个用户,并以用户名作为标题列出了他们的成员身份。不知怎的,它只显示第一个条目。它还显示了一行中的用户组,我不知道如何更改它 代码如下: $users = $logon -split ',' $q = @() foreach ($user in $users) { $usernm = Get-ADUser -Filter 'samAccountName -like

我正在尝试列出特定用户的所有广告组成员资格。输入将是一个用逗号分隔的登录字符串
'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
...     

每当运行代码时,它将只添加第一个用户的访问权限,同时返回一行上的所有组。因此,我需要检查所有组成员身份,并为每个组成员添加一行。

基本上查询所有用户并将其存储在
$users
中,例如:

Get-ADUser -Filter * -SearchBase "dc=domain,dc=local"
然后可以将结果导出为csv或表格

要导出为CSV,请执行以下操作:

Get-ADPrincipalGroupMembership <Username> | select name, groupcategory, groupscope | export-CSV C:\data\ADUserGroups.csv` 
获取ADPrincipalGroupMembership |选择名称、groupcategory、groupscope |导出CSV C:\data\ADUserGroups.CSV`
要在控制台itslef中将结果格式化为表格,请执行以下操作:

Get-ADPrincipalGroupMembership <Username> | select name, groupcategory, groupscope | Format-Table
获取ADPrincipalGroupMembership |选择名称、groupcategory、groupscope |格式表

基本上查询所有用户并将其存储在
$users
中,例如:

Get-ADUser -Filter * -SearchBase "dc=domain,dc=local"
然后可以将结果导出为csv或表格

要导出为CSV,请执行以下操作:

Get-ADPrincipalGroupMembership <Username> | select name, groupcategory, groupscope | export-CSV C:\data\ADUserGroups.csv` 
获取ADPrincipalGroupMembership |选择名称、groupcategory、groupscope |导出CSV C:\data\ADUserGroups.CSV`
要在控制台itslef中将结果格式化为表格,请执行以下操作:

Get-ADPrincipalGroupMembership <Username> | select name, groupcategory, groupscope | Format-Table
获取ADPrincipalGroupMembership |选择名称、groupcategory、groupscope |格式表

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

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

更正:
Get ADUser
似乎自行解析筛选器字符串中的变量。我核实了那份声明

Get-ADUser -Filter 'samAccountName -eq $user'
确实返回
$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
}

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

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

更正:
Get ADUser
似乎自行解析筛选器字符串中的变量。我核实了那份声明

Get-ADUser -Filter 'samAccountName -eq $user'
确实返回
$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
}

请指定您的期望/输出应该是什么样子。如果指定
$users='login1','login2'
,则不必拆分它们,因为它将是一个可以迭代的数组。输入的处理方式很好,因为这是从文件中提取的内容,所以必须先拆分它。我希望它返回以用户名作为标题的组,就像编写的一样。请指定您期望的内容/输出应该是什么样子。如果指定
$users='login1','login2'
,则不必拆分它们,因为它将是一个可以迭代的数组。输入的处理方式很好,因为这是从文件中提取的内容,所以必须先拆分它。我希望它返回以用户名作为标题的组,就像编写的一样。我试图以特定的格式获得结果。我知道你在这里提出的问题,谢谢。我正在尝试以特定的格式得到结果。我知道你在这里提出的问题,无论如何谢谢。恐怕你没有领会我的意思。首先,用户查找部分工作得很好,它可能不是最佳解决方案,但我正在尝试让它正常工作。我所需要的帮助是,当有多个用户时,我需要执行哪种操作才能在多个列中获取输出。
PS>$user='erth'
PS>$usernm=get ADUser-Filter'samAccountName-like$user'|选择Name
PS>$usernm
提供输出:
名称:Ernst Thom
此输出似乎很有用为我工作,所以我只想看看我的实际问题,因为我想要的输出就是我得到的输出。我所需要的只是将输出放在多个列中。至于
getaduser
,你说得对。我只是