web-dev-qa-db-ja.com

値を切り捨てずにFormat-Tableを使用するにはどうすればよいですか?

現在、サーバーにpingを実行し、各サーバーで実行されているサービスの状態を確認するスクリプトがあります。

出力をOut-Fileで保存しますが、PowerShellは長い文字列の後に省略記号または「...」を配置します。そんなことはしたくない。例えば:

MachineName  ServiceName             Status StartType
-----------  -----------             ------ ---------
SrvGtw01     Test.MyService....       Running  

次のようなフルネームを表示したい:

MachineName  ServiceName              Status StartType
-----------  -----------              ------ ---------
SrvGtw01     Test.MyServiceName.Here  Stopped  Disabled

$FormatEnumerationLimit設定変数を-1に設定できることを読んでいますが、試してみましたが機能しません。スクリプトにどのように配置するのかわかりません。

9
Kade Williams

$FormatEnumerationLimitプリファレンス変数はここに適用されません。その目的は、表示するcollection-valuedプロパティの要素数を決定することであるため(たとえば、$FormatEnumerationLimit = 2; [pscustomobject] @{ prop = 1, 2, 3 }は、(最大で).propの値から2つの要素を出力し、...でさらに存在することを示唆します(例:{1, 2...})。

代わりに、以下を行う必要があります。

  • (a)個々の列が値を切り捨てないことを確認表示:

    • Format-Table -Autosize最初にパイプします。
  • and(b)全体の出力幅がすべての列に収まることを確認

    • Out-File -Widthにパイプして、十分な大きさの値(ただし、[int]::MaxValueは使用しないでください。ただし、表形式の出力のすべての行はその幅にパディングされます。[1])。

    • 警告:-Widthを明示的に設定しない場合-たとえば>を使用した場合のように-現在のコンソールウィンドウの幅が使用されます-それが何であれ。

例えば:

# Assumes that the objects in $results only contain the properties
# of interest (MachineName, ServiceName, Status, StartType); you 
# can also pass an explicit list of output properties to Format-Table, however.
$results | Format-Table -AutoSize | Out-File -Width 512 C:\log.txt -Append

注:コンソールで出力をプレビューするには(行の折り返しが必要な場合があります)
Out-String -Width 512代わりに。


[1] PowerShellCoreでは、少なくともv6.1.0以降、この望ましくない最後の列のパディングが削除されました。

6
mklement0