1

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

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 缩进之类的事情,但这只有在我控制输出时才有效。

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

4

3 回答 3

3

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

这应该适用于 Write-Host 或 Write-Verbose,但如果这些函数实际上是在输出对象,它就不起作用——您必须通过管道传输到 Write-Host。

PoshCode 上的函数将(可选)根据堆栈深度自动缩进,但也允许您指定-Pad 5或手动缩进,因此您可以调用nuget.exe ... | write-host -pad 5或粘贴| Write-Host在任何需要的地方,然后设置$WriteVerboseAutoIndent = $true...

希望有所帮助——它确实对 exe 的输出进行了手动换行,所以它应该可以工作。

于 2012-04-29T04:38:09.970 回答
1

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

nuget list NuGetPowerTools | Format-Console

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

Write-Host "    $x"

将显示缩进四个空格。

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

这有点快速和肮脏,但假设你只用管道连接它,它会起作用。将其构建为函数可以使其更可重用;使用 Format- 动词会提示其他用户 this 的输出不是可消费的。从技术上讲,它不是真正的“格式”cmdlet,因为它不输出内部格式化指令,但它与

于 2012-04-24T15:30:09.220 回答
0

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

$x = nuget list NuGetPowerTools
Write-Host "`t`t$x"
于 2012-04-24T09:19:45.963 回答