PowerShell比较广告组,但仅显示这些我需要的内容
我有一个PowerShell脚本,它从一个file.txt文件生成一个用户和组的列表,这些用户和组所属的位置 我需要实现的下一步是确认是否将文件Groups.txt中的组分配给用户。 为此,我使用了逻辑运算符-contains,因此代码如下所示: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
$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,它只给了我错误的响应。