Powershell中的foreach循环(列出引用的数组项命令)

3

我已经努力搜索了很久,但没有找到答案。

在对数组使用foreach后,对每个数组项运行一个命令之后,我不确定结果来自哪个数组项。

我尝试了很多变化。以下代码是我尝试过的最好的例子。

$ADGroupVar = @(
'ADGroup1'
'ADGroup2'
'ADGroup3'
);

foreach ($ADgrouplist in $ADGroupVar)
{
Write-Host $ADgrouplist
Get-ADGroupMember ($ADgrouplist) | select name
}

ADGroup1
ADGroup2
ADGroup3

Computer5
Computer10
Computer2
Computer4
Computer20
Computer3
Computer1

期望的结果是:

ADGroup1
计算机5
计算机10
ADGroup2
计算机2
计算机4
计算机20
ADGroup3
计算机3
计算机1

或者

计算机5 ADGroup1
计算机10 ADGroup1
...

3个回答

6

停止使用 Write-Host 你不能依赖它的输出,特别是当与标准输出混合时。下面的示例可以说明你想要实现的内容:

$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'

foreach ($group in $adGroupList)
{
    $group
    (Get-ADGroupMember $group).Name
}

谢谢。这个完美地运作了。我现在理解得更好了。 - Jason Robison Landstrom
@JasonRobisonLandstrom 很好!如果这回答了你的问题,请用绿色对勾标记一下。如果需要更多的解释,请随意留下更多评论。 - Maximilian Burszley
我将这个设置为答案,因为对于像我一样的初学者来说,这是第一个也是最简单的。其他的答案也很棒。谢谢大家。 - Jason Robison Landstrom

2

你并不需要你所要求的内容。一系列字符串,其中包括一些组名和一些成员名字,跟随在组名后面的名字是成员,这是一个非常脆弱的系统。

如何区分组名和成员名?如果你改变顺序,比如排序,那么组成员关系就丢失了。以这种方式处理数据将在以后变得困难。

你可以考虑使用哈希表代替:

$ADGroupVar = @(
    'ADGroup1'
    'ADGroup2'
    'ADGroup3'
);

$results = @{}
foreach ($ADgroup in $ADGroupVar)
{
    $results[$ADgroup] = Get-ADGroupMember $ADgroup | select name
}

Write-Output $results

这将每个组名与用户名称列表关联起来。使用下标操作符[]访问它们,例如:

$results['ADGroup2']

computer2
computer4
computer20

整个哈希表的内容显示方式如下:

$results

Name                           Value                                           
----                           -----                                           
ADGroup2                       {computer2, computer4, computer20}              
ADGroup3                       {computer3, computer1}                          
ADGroup1                       {computer5, computer10}                         

酷炫的输出。谢谢。 - Jason Robison Landstrom

0

为了实现其他“期望的结果”

计算机5 AD组1

计算机10 AD组1

您可以使用:

'ADGroup1', 'ADGroup2', 'ADGroup3' | ForEach-Object {
    $GroupName = $_
    Get-ADGroupMember $_ | ForEach-Object {
        "$($_.Name) $GroupName"
    }
}

或者

$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
$adGroupList | ForEach-Object {
    $GroupName = $_
    Get-ADGroupMember $_ | ForEach-Object {
        "$($_.Name) $GroupName"
    }
}

或者

$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
foreach ($adGroup in $adGroupList) {
    Get-ADGroupMember $adGroup | ForEach-Object {
        "$($_.Name) $adGroup"
    }
}

或者

$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
foreach ($adGroup in $adGroupList) {
    $adGroupMembers = (Get-ADGroupMember $adGroup).Name
    foreach ($adGroupMember in $adGroupMembers) {
        "$adGroupMember $adGroup"
    }
}

感谢您提供的所有额外方法。非常有帮助。 - Jason Robison Landstrom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接