繁体   English   中英

无法在数组列表中显示多个 PSCustomObject

[英]Unable to display multiple PSCustomObjects in an Array list

我在同一个文件夹中有 3 个文件夹,里面有文件; 只有 3 个子文件夹中有任何内容。

我想要完成的是:

  1. 查询根文件夹以获取其中的子文件夹(如果我想添加更多,这可以让我更加动态)。
  2. 分别查询每个文件夹,将所有 output 文件(当前循环迭代编号与名称连接)分配到PSCustomObject中。
  3. 然后, append 每个新创建的PSCustomObject到我的$myArray变量 -每个 object 的名称属性基于当前文件夹名称
  4. 最后,以表格格式显示PSCustomObjectarraylist

预期结果为:

subfolder1        subfolder2    subfolder3      
----------        ----------    -----------      
1: 1              4: 2          6: 3             
2: New folder     5: New folder 7: New folder    
3: New folder (2)               8: New folder (2)

我目前得到的只是我阵列中的第一个object:

subfolder1       
----------       
1: 1             
2: New folder    
3: New folder (2)

...但是,我可以将逗号用作一元运算符,它将显示列表中的其他对象。 利用 .psobject 的 arrays 内在成员也是.psobject ,它也会在那里显示对象。

足够的背景故事,这是我的代码:

Get-ChildItem -Path "C:\Users\Abraham\Desktop\test" -Directory | 
    ForEach-Object -Begin {
        $myArray = [System.Collections.ArrayList]::new()
        $i = 0
    } -Process {
        foreach ($folder in $input)
        {
            $name = $folder.BaseName
            $myArray.Add(
                $(foreach ($file in (Get-ChildItem -Path $folder.FullName))
                {
                    $i++
                    [PSCustomObject]@{
                        $name = "{0}: {1}" -f $i,$file.Name
                    }
                }) 
            ) | Out-Null
        }
    } -End { 
        $myArray
    }

问题:关于如何以表格格式显示附加的PSCustomObject的任何想法?


奇怪的是我可以使用Select-Object -First 1/2/3 ,并且能够访问每个 object。 也可以这样做: $myArray.foreach{$_ | ft *} $myArray.foreach{$_ | ft *}但是,它会将其展平,因此我不能再将组合结果显示为表格; 任何其他方法都对我不起作用,例如管道到Write-Output

基本上,这就是您当前的代码在每一行上所做的事情:

[pscustomobject]@{
    subfolder1 = '2: New folder'
}
[pscustomobject]@{
    subfolder2 = '5: New folder'
}
[pscustomobject]@{
    subfolder3 = '7: New folder'
}

这就是你想要做的:

[pscustomobject]@{
    subfolder1 = '2: New folder'
    subfolder2 = '5: New folder'
    subfolder3 = '7: New folder'
}

这是我对该问题的解决方案:

using namespace System.Collections.Generic
using namespace System.Collections

(Get-ChildItem -Path "C:\Users\Abraham\Desktop\test" -Directory).foreach({
    begin {
        $myArray = [Dictionary[string, ArrayList]]::new()
        $i = 0
    }
    process {
        foreach ($file in Get-ChildItem -Path $_.FullName)
        {
            $i++
            $file = "{0}: {1}" -f $i,$file.Name
            if($thisKey = $myArray[$_.BaseName])
            {
                $null = $thisKey.Add($file)
                continue
            }
            $null = $myArray.Add($_.BaseName, @($file))
        }
    }
    end {
        $max = $myArray.Keys.ForEach({ $myArray[$_].Count }) | Measure-Object -Maximum
        for($i = 0; $i -lt $max.Maximum; $i++)
        {
            $out = [ordered]@{}
            foreach($key in $myArray.Keys)
            {
                $out[$key] = $myArray[$key][$i]
            }
            [pscustomobject]$out
        }
    }
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM