从PowerShell ForEach对象访问返回的值

时间:2019-11-20 03:33:35

标签: powershell foreach

我是PowerShell的新手,我正在尝试做其他语言(例如C#.NET和Java)中相当容易的事情。

我在做什么:

  • 我正在尝试读取CSV文件,其中包含3个定义的列,分别为“ clientid”,“ parentid”和“ schoolid”。
  • 我需要将数据分组为唯一的行。
  • 我需要访问这些数据行以通过作为参数传递来解析和执行数据的其他功能

    $obj = Import-Csv $Name | Group-Object clientid, parentid, schoolid | 
        foreach-object { 
            $_.group | 
                sort-object clientid, parentid, schoolid | 
                    select  clientid, parentid, schoolid -last 1
        }
    
    foreach ( $row in $obj ) { 
        $_clientid = $row[0];
        $_parentid = $row[1];
        $_schoolid = $row[2];   
        Other-Function -client $_.clientid -parent $_.parentid -schoolid $_.schoolid
    }
    

1 个答案:

答案 0 :(得分:1)

由于您仅读取3列CSV或仅使用这3列,因此您可能希望简化很多内容:

Import-Csv $Name | 
  Select-Object clientid, parentid, schoolid -unique | 
    Foreach-Object { 
      Other-Function -client $_.clientid -parent $_.parentid -schoolid $_.schoolid
    }

那我们在做什么?

  • 导入CSV
  • 唯一选择3列
  • ...然后为每一行调用另一个函数。

(我喜欢Group-Object,并认为它没有被充分利用,但在这里并不必要,而且过于复杂;带有-Unique的Select-Object要简单得多。)

我们还可能想知道为什么您的“其他功能”使用3个单独的参数而不是对象,但这在某种程度上是一种样式选择。

让PowerShell为您完成(大部分)工作。