現在、サーバーにpingを実行し、各サーバーで実行されているサービスの状態を確認するスクリプトがあります。
出力をOut-Fileで保存しますが、PowerShellは長い文字列の後に省略記号または「...」を配置します。そんなことはしたくない。例えば:
MachineName ServiceName Status StartType
----------- ----------- ------ ---------
SrvGtw01 Test.MyService.... Running
次のようなフルネームを表示したい:
MachineName ServiceName Status StartType
----------- ----------- ------ ---------
SrvGtw01 Test.MyServiceName.Here Stopped Disabled
$FormatEnumerationLimit
設定変数を-1
に設定できることを読んでいますが、試してみましたが機能しません。スクリプトにどのように配置するのかわかりません。
$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以降、この望ましくない最後の列のパディングが削除されました。