Как вывести дерево PowerShell в текстовый файл или файл Excel

#powershell #output #txt #write

Вопрос:

У меня есть следующий код:

 $readPath = "C:FirstFolder"
$writePath = "C:SecondFolder"

Function Recurse($folder, $lvl) {

    Get-ChildItem -Path $folder -File | ForEach-Object {
        Write-Host "$("  "*$lvl)> $($_.Name) - $((Get-Acl -Path $_.FullName).Owner)"
    }

    Get-ChildItem -Path $folder -Directory | ForEach-Object {
        Write-Host "$("  "*$lvl)> $($_.Name)"
        Recurse -folder $_.FullName -lvl $($lvl 1)
    }

}

$root = Get-Item -Path $readPath
Recurse -folder $root.FullName -lvl 0
 

что дает такой результат:

 > File0.xlsx - OwnerB
> Directory1
  >File1.1.txt - OwnerB
  >File1.2.ppt - OwnerA
>Directory2
  >File2.1 - OwnerA
  >File2.2 - OwnerA
 

Когда я добавляю код $log | Out-File $writePathOwnerTree.txt -Encoding UTF8 , мой выходной файл пуст.

Кто-нибудь знает, как получить выходной файл с тем же макетом, что и в PowerShell?

Ответ №1:

Всего несколько вещей:

  1. Сделайте так , чтобы ваша функция выводила строки вместо использования Write-Host , единственной целью которого является запись на экран консоли для отображения
  2. запишите результат вашей функции в переменную и сохраните его в файл
  3. Если вы хотите записывать как в файл, так и в консоль , используйте Set-Content вместо Out-File , потому что у этого также есть переключатель -PassThru
 function Get-OwnerTree ([string]$folder, [int]$lvl) {
    Get-ChildItem -Path $folder -File | ForEach-Object {
        "$("  "*$lvl)> $($_.Name) - $((Get-Acl -Path $_.FullName).Owner)"
    }

    Get-ChildItem -Path $folder -Directory | ForEach-Object {
        "$("  "*$lvl)> $($_.Name)"
        Get-OwnerTree -folder $_.FullName -lvl (  $lvl)
    }

}

$root = Get-Item -Path $readPath
$log = Get-OwnerTree -folder $root.FullName -lvl 0

$log | Set-Content -Path "$writePathOwnerTree.txt" -Encoding UTF8 -PassThru
 

Я также изменил имя функции в соответствии с соглашением PowerShell об именовании глаголов и существительных

Комментарии:

1. Похоже, это сделало трек — спасибо, Тео!