将成员增加到对象中,错误

时间:2013-11-26 20:22:03

标签: variables powershell

$list = @()
$cels = @()
$objResult = @()

$list = 
"1384630490 1 68 4 adm-media03 4184066 4184062 0 nbpem CLIENT  POLICY SBT_windows_srv_siteservers_isolation  SCHED Diff  EXIT STATUS 0 (the requested operation was successfully completed)",
"1385148607 1 68 4 adm-media01 4277480 4277295 0  nbpem CLIENT   POLICY   SCHED Full  EXIT STATUS 87 (media close error)"

$i = 0
foreach ($row in $list){

        $cels = $row.split(" ")

        foreach ($cel in $cels) {

            $objResult += New-Object -TypeName PSObject -Property @{
                "T$i" = $cel
            }
            $i++
        }      
}

的结果
  

$ objResult |克

是:

Name        MemberType   Definition                    
----        ----------   ----------                    
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()             
GetType     Method       type GetType()                
ToString    Method       string ToString()             
T0          NoteProperty System.String T0=1384630490   

为什么不将所有的属性添加到对象中? 应在$ i迭代后插入每个新属性,其值为$ cell 并且shomething不行,我无法弄清楚问题是什么。 它应该看起来像:

Name        MemberType   Definition                    
----        ----------   ----------                    
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()             
GetType     Method       type GetType()                
ToString    Method       string ToString()             
T0          NoteProperty System.String T0=1384630490
T1          NoteProperty System.String T1=1
T2          NoteProperty System.String T2=68
T3          NoteProperty System.String T3=4
T4          NoteProperty System.String T4=adm-media03

2 个答案:

答案 0 :(得分:1)

如果每行需要一个对象,则需要在创建对象之前将所有属性累积到单个哈希中:

$list = @()
$cels = @()
$objResult = @()


$list = 
"1384630490 1 68 4 adm-media03 4184066 4184062 0 nbpem CLIENT  POLICY SBT_windows_srv_siteservers_isolation  SCHED Diff  EXIT STATUS 0 (the requested operation was successfully completed)",
"1385148607 1 68 4 adm-media01 4277480 4277295 0  nbpem CLIENT   POLICY   SCHED Full  EXIT STATUS 87 (media close error)"

    foreach ($row in $list){

    $i = 0

    $PropertyHash = @{}

    $cels = $row.split(" ")

    foreach ($cel in $cels) {

        $PropertyHash +=  @{
            "T$i" = $cel
          }
        $i++

    } 

  $objResult += $objResult += New-Object -TypeName PSObject -Property $PropertyHash     
}

$objResult

现在,您正在为行拆分中的每个项目创建一个具有单个属性的对象。

答案 1 :(得分:0)

这是因为你在最内层的foreach循环的每次迭代中都创建了一个新的PSObject。

您可能希望使用Add-Member,而不是这样做:

$list = @()
$cels = @()
$objResult = New-Object -TypeName PSObject

$list = 
"1384630490 1 68 4 adm-media03 4184066 4184062 0 nbpem CLIENT  POLICY SBT_windows_srv_siteservers_isolation  SCHED Diff  EXIT STATUS 0 (the requested operation was successfully completed)",
"1385148607 1 68 4 adm-media01 4277480 4277295 0  nbpem CLIENT   POLICY   SCHED Full  EXIT STATUS 87 (media close error)"

$i = 0
foreach ($row in $list) {

    $cels = $row.split(" ")

    foreach ($cel in $cels) {
        $objResult | Add-Member -MemberType NoteProperty -Name "T$i" -Value $cel
        $i++
    }      
}