PowerShell比较广告组,但仅显示这些我需要的内容

PowerShell比较广告组,但仅显示这些我需要的内容,powershell,Powershell,我有一个PowerShell脚本,它从一个file.txt文件生成一个用户和组的列表,这些用户和组所属的位置 我需要实现的下一步是确认是否将文件Groups.txt中的组分配给用户。 为此,我使用了逻辑运算符-contains,因此代码如下所示: $UserList = Get-Content ("C:\users.txt") $GroupList = Get-Content ("C:\Groups.txt") $result = @() foreach ($UserList in $User

我有一个PowerShell脚本,它从一个file.txt文件生成一个用户和组的列表,这些用户和组所属的位置

我需要实现的下一步是确认是否将文件Groups.txt中的组分配给用户。 为此,我使用了逻辑运算符-contains,因此代码如下所示:

$UserList = Get-Content ("C:\users.txt")
$GroupList = Get-Content ("C:\Groups.txt")
$result = @()

foreach ($UserList in $UserList){
    $data = New-Object PSObject
    $Group = (Get-ADPrincipalGroupMembership -Identity $UserList | foreach {$_.SamAccountName}) -contains $GroupList
    $data = get-aduser $Userlist -properties samaccountname,givenname,surname | select samaccountname,givenname,surname, @{name="Groups";expression={$Group}}
    $result += $data 
} 
$result 
当我在Groups.txt文件中只有一个组时,代码正在工作。如果我有两个或更多,它只应用最后一个值为True的

我所期望的决议是

当用户拥有文件Group.txt中的一个或多个组时,脚本应提及该组名称,而不提及其他内容

更准确地说,我需要这样的结果:

samaccountname givenname surname       Groups
-------------- --------- -------       ------
User           FirstName Surname        False (or anything)
User1          Firstname Surname        Group1, Group2, Group3

非常感谢您在这件事上提供的帮助。

您可以执行以下操作:

$UserList = Get-Content "C:\users.txt"
$GroupList = Get-Content "C:\Groups.txt"

$result = foreach ($User in $UserList) {
    $Groups = Get-ADPrincipalGroupMembership -Identity $User |
        Where SamAccountName -in $GroupList
    Get-ADUser -Identity $User -Properties GivenName,Surname |
        Select-Object SamAccountName,GivenName,Surname,@{name="Groups";expression={$Groups.SamAccountName}}
}
$result
使用
foreach
循环时,正确的语法是
foreach($){statements}
$
只是一个可以在语句中引用的变量,它应该是一个在该点之前未赋值的变量。看

如果您的
foreach
语句像本例一样生成输出,则只需将变量分配给
foreach
循环即可收集这些输出。这将导致更有效的数组分配。使用
+=
有效地扩展一个数组,只会在每个循环迭代中创建一个比前一个循环更大的新数组。这是没有效率的,在这种情况下是没有必要的


关于集合比较,将左侧(LHS)单个项目与右侧(RHS)集合进行比较时,将使用
-contains
。示例语法为
$-包含$
<代码>-in用于比较LHS单个项目与RHS集合。示例语法是$中的
$-in。看


由于您最终希望根据特定条件从命令输出中收集组,因此这是
Where
Where Object
的主要候选对象。它的伪代码用法是
在这20项中,告诉我哪些符合特定条件。请参阅。

-contains
,当比较的左侧(LHS)是集合,而右侧是单个项目时,将使用它。当左侧为单个项目,右侧为集合时,使用
-in
。您的foreach循环有问题
foreach($users中的users)
什么也不做,因为
$users
是空的。您的for-each循环被破坏,您在$users中使用的是
$users
,这没有意义,在使用
Get-ADPrincipalGroupMembership
时,您不应该使用
$UserList
,您应该使用
foreach
变量:)谢谢@I.tdelink我纠正了它,这是我在复制脚本时犯的错误。@我试图替换的东西的AdminOfThings-in-contains,它只给了我错误的响应。