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

时间:2018-08-28 01:42:25

标签: arrays powershell foreach command

我在高潮和低潮中搜索,没有运气。
对数组使用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
       Computer2
       电脑4
       电脑20
       ADGroup3
       Computer3
       Computer1


Computer5 ADGroup1
Computer10 ADGroup1
...

3 个答案:

答案 0 :(得分:3)

使用Write-Host停止。您不能依靠其输出,尤其是在与stdout混合时。此示例应举例说明您要完成的任务:

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

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

答案 1 :(得分:2)

您真的不想要您想要的东西。一系列字符串,一些组名和一些成员名(其中组名后面的名称是成员)是一个非常脆弱的系统。

如何区分组名和成员名?如果更改顺序(例如通过排序),则组成员身份将丢失。以后将很难以这种方式处理数据。

您可以考虑改用 hashtable

  $ ADGroupVar = @(
    “ ADGroup1”
    “ ADGroup2”
    “ ADGroup3”
);

$ results = @ {}
foreach($ ADGroupVar中的$ ADgroup)
{
    $ results [$ ADgroup] = Get-ADGroupMember $ ADgroup |选择名字
}

写输出$结果
 

这会将每个组名与用户名列表相关联。使用下标运算符 [] 访问它们,例如:

  $ results ['ADGroup2']

计算机2
电脑4
电脑20
 

整个哈希表的内容以这种方式显示:

  $ results

名称值
---- -----
ADGroup2 {计算机2,计算机4,计算机20}
ADGroup3 {计算机3,计算机1}
ADGroup1 {计算机5,计算机10}
 

答案 2 :(得分:0)

要获得其他“期望的结果”

Computer5 ADGroup1

Computer10 ADGroup1

您可以使用:

'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"
    }
}