[英]Unable to display multiple PSCustomObjects in an Array list
我在同一个文件夹中有 3 个文件夹,里面有文件; 只有 3 个子文件夹中有任何内容。
我想要完成的是:
PSCustomObject
中。PSCustomObject
到我的$myArray
变量 -每个 object 的名称属性基于当前文件夹名称。PSCustomObject
的arraylist 。预期结果为:
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.