我在同一個檔案夾中有 3 個檔案夾,里面有檔案;只有 3 個子檔案夾中有任何內容。
我想要完成的是:
- 查詢根檔案夾以獲取其中的子檔案夾(如果我想添加更多,這可以讓我更加動態)。
- 分別查詢每個檔案夾,將所有輸出檔案(當前回圈迭代編號與名稱連接)分配到
PSCustomObject. - 然后,將每個新創建的附加
PSCustomObject到我的$myArray變數 -每個物件的 name 屬性基于當前檔案夾 name。 - 最后,以Table格式顯示's的陣列串列。
PSCustomObject
預期結果為:
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)
我目前得到的只是陣列中的第一個物件:
subfolder1
----------
1: 1
2: New folder
3: New folder (2)
...但是,我可以將逗號用作一元運算子,它將顯示串列中的其他物件。挖掘陣列的內在成員也是.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,并且能夠訪問每個物件。也可以:$myArray.foreach{$_ | ft *}但是,它會將其展平,因此我不能再將組合結果顯示為表格;任何其他方法都對我不起作用,例如管道到Write-Output.
uj5u.com熱心網友回復:
基本上,您的代碼正在做的是將每個檔案夾的內容存盤在Object[]where$myArray[0]的所有內容中subFolder1,以及$myArray[1]的所有內容中subFolder2,依此類推。您缺少的是您將每個陣列的每個元素合并或連接PSCustomObject為 one 的部分,如下所示:
[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
}
}
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/418459.html
標籤:
