如何将 PowerShell 树输出到文本或 Excel 文件
Posted
技术标签:
【中文标题】如何将 PowerShell 树输出到文本或 Excel 文件【英文标题】:How to output PowerShell tree to text or Excel file 【发布时间】:2021-12-08 23:56:51 【问题描述】:我有以下代码:
$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 $writePath\OwnerTree.txt -Encoding UTF8
时,我的输出文件是空白的。
有谁知道如何获得与 PowerShell 中显示的布局相同的输出文件?
【问题讨论】:
【参考方案1】:只有几件事:
-
让你的函数输出字符串而不是使用
Write-Host
,其中唯一的目的是写入控制台屏幕进行显示
在变量中捕获函数的结果并将其保存到文件中
如果您想同时写入文件和控制台,请使用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 "$writePath\OwnerTree.txt" -Encoding UTF8 -PassThru
我还更改了函数名称以符合 PowerShell 的 Verb-Noun 命名约定
【讨论】:
这似乎已经完成了 - 谢谢你,西奥!以上是关于如何将 PowerShell 树输出到文本或 Excel 文件的主要内容,如果未能解决你的问题,请参考以下文章
将输出流以外的两个或多个 Powershell 流重定向到同一个文件