在Powershell中缩进私有函数的输出

时间:2012-04-24 08:21:28

标签: powershell indentation

我有一堆函数,我调用它产生的输出显示在控制台上。函数可能如下所示:

exec { & .\xunit.console.clr4 tests.xunit }

#or

exec { & .\nuget.exe pack $source_dir\ZocMonLib\NuSpec\ZocMon.nuspec -OutputDirectory $build_dir\local -Symbols -Version $version }

现在我知道我可以做powershell indentation之类的事情,但只有在控制输出时才有效。

如何为这些私有函数缩进输出?

3 个答案:

答案 0 :(得分:3)

好的,我写了一个正确的换行版本。但它有点复杂。我把它发布在PoshCode http://poshcode.org/3386

这应该适用于Write-Host或Write-Verbose,但如果这些函数实际输出对象,它将工作 - 你必须管道写入主机。

PoshCode上的函数将(可选)根据堆栈深度自动缩进,但也允许您指定-Pad 5或其他东西来手动缩进,这样您就可以调用nuget.exe ... | write-host -pad 5或只是粘贴{ {1}}只要您需要,然后设置| Write-Host ...

希望有所帮助 - 它会对exes的输出进行手动换行,因此它应该有效。

答案 1 :(得分:1)

没有一个很好的解决方案,因为PowerShell并不总是在控制台窗口中运行。其他托管应用程序可能支持或不支持制表符,甚至可能不支持Write-Host。如果您的目标是严格支持控制台显示,请考虑编写“格式控制台”功能。

nuget list NuGetPowerTools | Format-Console

在该函数中,您可以捕获管道输入(我认为它是字符串,因为这是一个外部命令)。每行输出都是一个String对象,所以......

Write-Host "    $x"

将显示缩进四个空格。

function Format-Console {
    [CmdletBinding()]
    param([Parameter(ValueFromPipeline=$True)][string[]]$inputObject)
    PROCESS { Write-Host "    $inputObject" }
}

这有点快,又脏,但假设你只管弦,它会起作用。将其构建为一个函数可以使其更具可重用性;使用格式动词提示其他用户,其输出不是可消耗的。它在技术上不是真正的“格式”cmdlet,因为它不输出内部格式化指令,但它与

的使用模式一致

答案 2 :(得分:0)

您不能将私有函数的结果分配给字符串并将“tab”分配给该字符串吗?

$x = nuget list NuGetPowerTools
Write-Host "`t`t$x"