显示管道之间-PowerShell



我想得到一组用户所在的组的列表。我已经尝试过:

Get-AdGroupMember Users | Get-ADPrincipalGroupMembership | Format-Table -Property name

但这只会为我提供关于所有组的输出,而没有列出集合组中的原始用户。对Powershell来说相当陌生,所以也许我错过了一些东西。我希望看到这样的输出:

user123
-------
Domain Users
Sec Group
Bob Group
user555
------
Domain Users

我想我理解你的要求。正如您所看到的,PowerShell正在执行您要求它执行的操作…从Get-ADPrincipalGroupMembership创建一个包含所有name的表。管道正在收集信息,以便将其显示为一个单元。

从预期输出的外观来看,您实际上希望按用户划分数据。有几种方法可以做到这一点。直接的方法是构建一个循环,并为每个循环创建一个单独的输出。

Get-ADGroupMember "Domain Admins" | ForEach-Object{
    $_.Name
    "--------"
    $_ | Get-ADPrincipalGroupMembership | Select-Object -ExpandProperty Name
    ""
}

这将产生您在问题中看到的输出。我不太喜欢这个输出,因为它被发送到输出流,并且不利用对象。所以,虽然我不喜欢你想要的输出,但我会考虑一些不同的东西,比如:

Get-ADGroupMember "Domain Admins" | ForEach-Object{
    $user =  $_
    $_ | Get-ADPrincipalGroupMembership | ForEach-Object{"{0} - {1}" -f $user.Name, $_.Name}
}

或者

Get-ADGroupMember "Domain Admins" | Select Name,@{Name="PrincipalGroupMembership";Expression={
    ($_ | Get-ADPrincipalGroupMembership | Select-Object -ExpandProperty Name) -join ";"
}} 

这将对您有利,因为如果您想使用Export-CSV,现在可以将其导出到CSV。

8:21 AM

你没有正确使用管道。在面向对象编程中,你首先得到一个对象,然后用它的属性过滤它。例如:

 Get-WmiObject Win32_UserAccount  | Where-Object {$_.FullName -eq "Doe, John"}

首先,我使用cmdlet"Get-WmiObject"来调用对象"Win32_UserAccount"。这包括AD上的所有用户帐户。然后我将这些结果管道传输到另一个Cmdlet"Where Object"中,该Cmdlet将过滤结果。Where Object有自己的属性,必须以自己的方式使用。"{}"用于表示语句的开头和结尾。"$_."是让它知道它是Win32_UserAccount的属性的方式。"-eq"代表等于,然后我给它一个我要找的字符串"Doe,John"。

如果您已连接到域,则可以使用WMI检索帐户数据。使用此命令获取所有不同的帐户:

Get-WmiObject Win32_Account

对于更具体的结果,您可以使用不同的WMI,如:

Get-WmiObject Win32_UserAccount
Get-WmiObject Win32_Group
Get-WmiObject Win32_SystemAccount

希望这能有所帮助,但听起来你需要更多关于PowerShell的知识。

最新更新