web-dev-qa-db-ja.com

PowerShellは、ファイルを読み込むときにテキストの書式を維持します

これは簡単な質問だと思いますが、頭を抱えることはできません。 Windowsのコマンドシェルで診断コマンドを実行したい。このような:

   $cmd =  "ipconfig >> c:\test.txt"

   $message = Invoke-Expression($cmd)

   [String]$message = Get-Content c:\topsecret\testme.txt

次に、ファイルを読み取ってフォーマットを保持し、最後にAPIを介してPastebinに公開できるようにします。試しましたが、何をしてもフォーマットが失われるようです。これは可能ですか?

13
user1310856

これはキャスティングが原因で発生します。 Get-Contentは、テキストファイルの1行に文字列オブジェクトを含むオブジェクト配列を返します。 [string]にキャストすると、配列内のオブジェクトが結合されます。問題は、オブジェクトを何と結合するかを指定しないことです(例:改行(backtick)n)。

ipconfig >> test.txt

#Get array of strings. One per line in textfile
$message = Get-Content test.txt

#Get one string-object with linebreaks
$message = (Get-Content test.txt) -join "`n"
32
Frode F.

改行を埋め込んだ単一の文字列としてすべてのデータを読み取るには

$file = 'c:\testfiles\testfile.txt'

(IPconfig /all) > $file

[IO.File]::ReadAllText($file)

V3を使用している場合は、同じことを実行する-Rawパラメーターが追加されています。

Get-Content $file -Raw
22
mjolinor

おそらく、文字列の配列にキャストします。このように、最後の例では:

$message = @(Get-Content c:\topsecret\testme.txt)

またはこれは2番目のものです:

$message = [string[]](ipconfig)
1
David Brabant