【问题标题】:Powershell foreach (list the array item command referenced)Powershell foreach(列出引用的数组项命令)
【发布时间】:2019-02-02 13:28:49
【问题描述】:

我搜索了高低都没有运气。
对数组使用 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
...

【问题讨论】:

    标签: arrays powershell foreach command


    【解决方案1】:

    停止使用Write-Host 你不能依赖它的输出,尤其是与标准输出混合时。这个例子应该能说明你想要完成的事情:

    $adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
    
    foreach ($group in $adGroupList)
    {
        $group
        (Get-ADGroupMember $group).Name
    }
    

    【讨论】:

    • 谢谢。这很完美。我现在明白了。
    • @JasonRobisonLandstrom 太棒了!如果这回答了您的问题,请用绿色复选标记进行标记。如果您需要更多解释,请随时留下更多 cmets。
    • 我将其设置为答案,因为对于像我一样学习的任何人来说,它都是第一个也是最简单的。其他答案也很棒。谢谢大家。
    【解决方案2】:

    你并不真正想要你所要求的。一系列字符串,一些组名和一些成员名,其中组名后面的名称是成员是一个非常脆弱的系统。

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

    您可以考虑改用hashtable

    $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}                         
    

    【讨论】:

    • 酷输出。谢谢
    【解决方案3】:

    实现其他“期望的结果”

    计算机 5 ADGroup1

    计算机 10 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"
        }
    }
    

    【讨论】:

    • 感谢您提供的所有其他方法。很有帮助。
    猜你喜欢
    • 2014-02-13
    • 2021-07-13
    • 1970-01-01
    • 2018-05-23
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    相关资源
    最近更新 更多