Powershell表格显示

时间:2015-03-12 10:39:31

标签: powershell

我希望有人可以指出我正确的方向。我编写了一个脚本来搜索找到的目录和列表文件。我想使用format-table来显示它,但是我很难理解如何在对象中正确地收集结果,因为会有重复的键和值。

以下脚本仅适用于找到的第一个文件 - 我假设是因为它重新添加了具有相同文件和目录名称的成员。

我花了好几天时间试图解决这个问题并尽我所能阅读,我只是不明白。我非常感谢被送往正确的方向。

非常感谢您的帮助。我还要提一下,我被困在使用v1。

$servers = @{ 
   "1" = @(
       "C:\a","C:\b"
   )
}
foreach ($h in $servers.GetEnumerator()) {
    $d = @($h.Value)
        foreach ($dir in $d) {
            if (!(Test-Path -Path $dir)) {
                Write-Host $($h.Name)
                Write-Host $dir" DOES NOT EXIST"
            } else {
                $file = Get-ChildItem "$dir" -recurse | Where-Object {$_ -is [IO.FileInfo]}

                if (!($file -eq $null)) {
                    Write-Host $($h.Name)
                    $result = New-Object PSObject              
                    foreach ($f in $file) { 
                    $result | Add-Member -MemberType NoteProperty Directory -Value $f.directory
                    $result | Add-Member -MemberType NoteProperty File -Value $f.name
                    }
                }
             Write-Output ($result | Format-Table | Out-String)
            }
        }         
}

1 个答案:

答案 0 :(得分:2)

你在那里是alomst :-) 您正在为找到的每个文件创建一个对象。但是,您需要将所有这些对象存储在某处(每次找到文件时,$ result基本上都会被覆盖,因此它只在循环内有效)。你需要做的是将$ result的每个“实例”发送到其他地方。如果你将我的建议与你的建议进行比较,你会看到唯一的区别是我已经将“new-psobject”调用移到了foreach文件循环中,并添加了一个数组来实际存储结果。 顺便说一句,我不能强调PowerShell有一个非常好的调试故事,允许你基本上通过这样的代码。花时间学习如何使用它,你不会被这样的东西困住: - )

foreach ($h in $servers.GetEnumerator()) {
    $d = @($h.Value)
    $resultarray = @()
        foreach ($dir in $d) {
            if (!(Test-Path -Path $dir)) {
                Write-Host $($h.Name)
                Write-Host $dir" DOES NOT EXIST"
            } else {
                $file = Get-ChildItem "$dir" -recurse -ErrorAction 0 | Where-Object {$_ -is [IO.FileInfo]}

                if (!($file -eq $null)) {
                    Write-Host $($h.Name)

                    foreach ($f in $file) { 
                    $result = New-Object PSObject   
                    $result | Add-Member -MemberType NoteProperty Directory -Value $f.directory
                    $result | Add-Member -MemberType NoteProperty File -Value $f.name
                    $resultarray += $result; $result=$null
                    }
                }
             Write-Output ($resultarray | Format-Table | Out-String)
            }
        }         
}