複数回実行したときに get-childitem のような関数からの出力を表示する方法を知っている人はいますか (配列パイプライン入力)? 例を挙げて説明します。
PS C:\Users> ".\Graimer", ".\Public" | Get-ChildItem
Directory: C:\Users\Graimer
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 20.12.2012 15:59 Contacts
d-r-- 06.01.2013 01:23 Desktop
d-r-- 02.01.2013 17:15 Documents
d-r-- 05.01.2013 16:38 Downloads
d-r-- 20.12.2012 15:59 Favorites
d-r-- 20.12.2012 15:59 Links
d-r-- 20.12.2012 15:59 Music
d-r-- 20.12.2012 15:59 Pictures
d-r-- 20.12.2012 15:59 Saved Games
d-r-- 20.12.2012 15:59 Searches
d-r-- 20.12.2012 15:59 Videos
Directory: C:\Users\Public
Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 20.12.2012 13:57 Documents
d-r-- 26.07.2012 10:13 Downloads
d-r-- 26.07.2012 10:13 Music
d-r-- 26.07.2012 10:13 Pictures
d-r-- 26.07.2012 10:13 Videos
私の関数では、配列入力を使用して { } ブロックを処理すると、Write-output はすべての結果を 1 つのテーブルに配置します。しかし、どうすればこのようにフォーマットできますか?標準のオブジェクト配列として格納されている間、表示されるときにディレクトリごとに分離しますか? それに関する記事が見つからないようです。コンパイルされたコマンドレットでのみ可能かどうかは問題ではありません。何があっても手がかりを探しているだけです:)
編集:私のコードを追加しました。psobjects を作成し、Write-Object を使用してそれらを表示するだけです。
Function Get-RecurseFileCount
{
[CmdletBinding()]
Param
(
[Parameter(ValueFromPipeline=$true)]
[String[]]$Path = "."
)
Begin
{
}
Process
{
foreach ($rootpath in $Path)
{
Write-Verbose "Testing if path of rootdirectory exists"
if(Test-Path $rootpath)
{
Write-Verbose "Getting all recursive subfolders"
$folders = Get-ChildItem $rootpath -Recurse -ErrorAction SilentlyContinue | where {$_.PSIsContainer}
Write-Verbose "Starting to count files in rootfolder"
$folder = Get-Item $rootpath
$fcount = (Get-ChildItem $rootpath -ErrorAction SilentlyContinue | where {!$_.PSIsContainer}).Count
New-Object psobject -Property @{FolderName = $folder.Name; FolderPath = $folder.FullName; FileCount = $fcount} | Write-Output
Write-Verbose "Starting to count files in subfolders"
foreach($folder in $folders)
{
$fname = $folder.Name
$fpath = $folder.FullName
$fcount = (Get-ChildItem $fpath -ErrorAction SilentlyContinue | where {!$_.PSIsContainer}).Count
New-Object psobject -Property @{FolderName = $fname; FolderPath = $fpath; FileCount = $fcount} | Write-Output
}
Write-Verbose "Finished with filecount"
}
}
}
End
{
}
}
そしてFormat-Table -GroupBy ..
、答えではありません。解決策は、呼び出されたプロパティを追加し、プロパティroot = $rootpath
でグループ化するデフォルトのビューを追加root
し、テーブルでそれを非表示にして、複数回表示されないようにすることです。問題はただ..どのように?:)