をAnsgar Wiechers' helpful answerを補完するために外部コマンドを呼び出す
は、文字列の配列として出力行を返します。あなたのケースでは
、配列は、その配列が、その場合にはPowerShellがスペース文字を使用して配列の要素を結合し、単一の文字列を余儀なくされたので、元の行の書式が失われました。例えば:
> [string] 1, 2, 3
1 2 3 # single string containing the array elements joined with spaces
配管Out-String
には、アンスガーの答えのように、配列の作成を防ぎ、単一文字列として外部コマンドの出力を返します。
> (1, 2, 3 | Out-String | Measure-Object).Count
1 # Out-String output a single string
別のオプションを使用すると、コンソールに違いは見られません(必要に応じて改行を持つ配列要素に参加するだろうが、あなたは、この技術では、単一、複数行の出力文字列を取得行います
> (net users) -join "`n" # or, more robustly: [environment]::NewLine
あなたは[Console]::OutputEncoding
(一時的に)設定することにより、外部コマンドから期待して何のエンコードPowerShellを伝えることができます:
これは、外部ユーティリティがデフォルト(システムのアクティブなOEMコードページ)以外の出力エンコーディングを使用することを知っている場合にのみ必要です - それはnet users
に必要であるとは考えられません。それはどのように動作するのかは次のとおりです:
$prevEnc = [Console]::OutputEncoding
[Console]::OutputEncoding = New-Object System.Text.UTF8Encoding
$str = net users | Out-String # `net users` output is now properly decoded as UTF-8
[Console]::OutputEncoding = $prevEnc
どのように形式が違うのですか?あなたの質問を直接更新してください。 – mklement0