2012-04-24 16 views
1

私はコンソールに表示される出力を生成する関数をたくさん持っています。機能には、以下のようになります:Powershellのプライベート関数からのインデント出力

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

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

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

PowerShellは常にコンソールウィンドウで実行されるわけではないので、素晴らしい解決策はありません。他のホスティングアプリケーションは、タブ文字をサポートしている場合とサポートしていない場合があり、Write-Hostをサポートしていない場合もあります。あなたの目標が厳密にコンソールの表示をサポートしているのであれば、 "Format-Console"機能を書くことを検討してください。

nuget list NuGetPowerTools | Format-Console 

この機能の中で、パイプライン入力をキャプチャすることができます(外部コマンドなので、これは文字列と見なされます)。出力の各行は単一のStringオブジェクトになります。

これは4つのスペースでインデントされます。

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

これはちょっと素早く汚れていますが、パイプの文字列を使用すると仮定するとうまくいきます。これを関数として構築すると、再利用が可能になります。 Format-動詞を使用すると、他のユーザーに、これの出力が消耗しないように指示されます。技術的には、実際の "Format"コマンドレットではありませんが、内部フォーマット指示文は出力されません。

+0

問題は、行折り返しです。 – Jaykul

+0

@Jaykul氏によると、私が今問題にしているのは行折り返しです。誰もがこれに対処する方法のアイデアを持っていますか? – anthonyv

3

[OK]をクリックして、行の折り返しを行うバージョンを作成しました。しかし、やや複雑です。あなたは、ホストを書くためにパイプに必要があるだろう - これらの機能は、実際にオブジェクトを出力している場合、私は、Write-ホストのために仕事をしたり、冗長を書く必要があることをPoshCodeにhttp://poshcode.org/3386

それを掲示が、それはない動作します。

PoshCode上の機能は、(任意で)自動インデントスタックの深さに基づいて、だけでなく、あなたがしてnuget.exe ... | write-host -pad 5を呼び出すか、あなたがそれを必要な場所だけ| Write-Hostを固執し、できるように、、インデントを手動-Pad 5か何かを指定することができますセット$WriteVerboseAutoIndent = $true ...

希望する - それはexesの出力に手作業の行折り返しを行うので、動作するはずです。

関連する問題