3

複数回実行したときに 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し、テーブルでそれを非表示にして、複数回表示されないようにすることです。問題はただ..どのように?:)

4

1 に答える 1

1

GroupByビュー内の情報をファイルで提供しformat.ps1xml、フォーマットデータを更新して、目的の動作を取得する必要があります。ps1xmlを記述してセッションにロードすることから抜け出すことはできません。

http://technet.microsoft.com/en-us/library/dd315396.aspx

于 2013-01-06T16:12:02.290 に答える