我有一堆函数,我调用它产生的输出显示在控制台上。函数可能如下所示:
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之类的事情,但只有在控制输出时才有效。
如何为这些私有函数缩进输出?
答案 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"