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

その関数内で、パイプライン入力をキャプチャできます (これは外部コマンドであるため、文字列であると推測されます)。出力の各行は単一の String オブジェクトになるため...

Write-Host "    $x"

4 つのスペースでインデントして表示します。

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

これはちょっと手早くて汚いですが、文字列をパイプするだけだと仮定すると、うまくいきます。これを関数として構築すると、より再利用しやすくなります。Format-動詞を使用すると、他のユーザーは、この出力が消費可能になることを意図していないことを示します。内部フォーマット ディレクティブを出力しないため、技術的には真の「フォーマット」コマンドレットではありませんが、

于 2012-04-24T15:30:09.220 に答える
0

プライベート関数の結果を文字列に割り当てて、その文字列を「タブ」にすることはできませんか?

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