Private/PowerTree/Output/Write-TreeSnapshot.ps1
|
function Write-TreeSnapshot { param( [Parameter(Mandatory=$true)] [object]$Node, [Parameter(Mandatory=$true)] [object]$TreeConfig, [Parameter(Mandatory=$true)] [object]$TreeStats, [string]$TreeIndent = "", [bool]$IsRoot = $true, [System.Text.StringBuilder]$OutputBuilder = $null ) $directories = @($Node.Directories | Where-Object { $_.IsVisible -and (-not $TreeConfig.PruneEmptyFolders -or $_.HasVisibleContent) }) $totalItems = $Node.Files.Count + $directories.Count $currentItemIndex = 0 foreach ($file in $Node.Files) { $currentItemIndex++ $isLastItem = $currentItemIndex -eq $totalItems $treeBranch = if ($isLastItem) { $TreeConfig.LineStyle.LastBranch } else { $TreeConfig.LineStyle.Branch } $treePrefix = if ($IsRoot) { $treeBranch } else { "$TreeIndent$treeBranch" } $outputInfo = Build-OutputLine -HeaderTable $TreeConfig.HeaderTable ` -Item $file ` -TreePrefix $treePrefix ` -HumanReadableSizes $TreeConfig.HumanReadableSizes if ($outputInfo.SizeColor -and $outputInfo.SizePosition -ge 0 -and $outputInfo.SizeLength -gt 0) { if ($null -ne $OutputBuilder) { [void]$OutputBuilder.AppendLine($outputInfo.Line) } else { $before = $outputInfo.Line.Substring(0, $outputInfo.SizePosition) $size = $outputInfo.Line.Substring($outputInfo.SizePosition, $outputInfo.SizeLength) $after = $outputInfo.Line.Substring($outputInfo.SizePosition + $outputInfo.SizeLength) Write-Host $before -NoNewline Write-Host $size -ForegroundColor $outputInfo.SizeColor -NoNewline Write-Host $after } } else { Write-OutputLine -Line $outputInfo.Line -OutputBuilder $OutputBuilder } $TreeStats.AddFile($file) } foreach ($child in $directories) { $currentItemIndex++ $isLastItem = $currentItemIndex -eq $totalItems if ($TreeConfig.ShowConnectorLines -and $Node.Files.Count -gt 0) { $hierarchyPosition = $TreeConfig.HeaderTable.Indentations["Hierarchy"] $connector = " " * $hierarchyPosition + "$TreeIndent$($TreeConfig.LineStyle.Vertical)" Write-OutputLine -Line $connector -OutputBuilder $OutputBuilder } $treeBranch = if ($isLastItem) { $TreeConfig.LineStyle.LastBranch } else { $TreeConfig.LineStyle.Branch } $treePrefix = if ($IsRoot) { $treeBranch } else { "$TreeIndent$treeBranch" } $outputInfo = Build-OutputLine -HeaderTable $TreeConfig.HeaderTable ` -Item $child.Item ` -TreePrefix $treePrefix ` -HumanReadableSizes $TreeConfig.HumanReadableSizes ` -DirectorySize $child.Size Write-OutputLine -Line $outputInfo.Line -OutputBuilder $OutputBuilder $TreeStats.FoldersPrinted++ $TreeStats.UpdateMaxDepth($child.Depth) if ($TreeConfig.HeaderTable.HeaderColumns -contains "Size") { $TreeStats.UpdateLargestFolder($child.Item.FullName, $child.Size) } $newTreeIndent = if ($IsRoot) { if ($isLastItem) { $TreeConfig.LineStyle.Space } else { $TreeConfig.LineStyle.VerticalLine } } else { if ($isLastItem) { "$TreeIndent$($TreeConfig.LineStyle.Space)" } else { "$TreeIndent$($TreeConfig.LineStyle.VerticalLine)" } } Write-TreeSnapshot -Node $child ` -TreeConfig $TreeConfig ` -TreeStats $TreeStats ` -TreeIndent $newTreeIndent ` -IsRoot $false ` -OutputBuilder $OutputBuilder } } |