2015-03-12 3 views
2

Надеюсь, кто-то может указать мне в правильном направлении. Я написал скрипт, который будет искать каталоги и список файлов. Я хочу показать это с помощью таблицы формата, но я изо всех сил пытаюсь понять, как правильно собирать результаты в объекте, поскольку будут повторяться ключи и значения.Дисплей таблицы Powershell

Нижеприведенный скрипт будет работать только для первого найденного файла - я предполагаю, потому что он повторно добавляет элементы с тем же именем файла и каталога.

Я провел несколько дней, пытаясь разобраться в этом и прочесть все, что могу, и я просто не понимаю. Я был бы очень признателен за отправку в правильном направлении.

Большое спасибо за помощь. Я должен также упомянуть, что я застрял, используя 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) 
      } 
     }   
} 

ответ

2

Вы alomst там :-) Вы создаете объект для каждого файла вы найдете. Однако вам нужно хранить все эти объекты где-то ($ result в основном перезаписывается каждый раз, когда вы находите файл, поэтому он действителен только внутри цикла). Что вам нужно сделать, так это отправить каждый экземпляр $ result в другое место. Если вы сравните мое предложение с вашим, вы увидите, что единственное различие заключается в том, что я переместил вызов «new-psobject» внутри цикла файла foreach и добавил массив для фактического хранения результатов. BTW, я не могу подчеркнуть, что 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) 
      } 
     }   
} 
+0

Фантастический. Большое спасибо за Вашу помощь! Я понимаю :) –

Смежные вопросы