2013-02-23 7 views
9

これは簡単な質問だと思いますが、私はその周りを頭で囲むことはできません。私はWindows上のコマンドシェルで診断コマンドを実行したい。このように:Powershellはファイルの読み込み時にテキスト書式を保持します

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

    $message = Invoke-Expression($cmd) 

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

それから私は、ファイルを読み込み、書式設定を維持し、最後にそのAPIを介してペーストビンにそれを公開することができるようにしたいです。私は試しましたが、私が何をしてもフォーマットを失うようですが、これは可能ですか?

答えて

20

これは、あなたの鋳物起こります。 Get-Contentは、テキストファイル内の行ごとに文字列オブジェクトを含むオブジェクト配列を返します。 [string]にキャストすると、配列内のオブジェクトに結合されます。問題は、オブジェクトを結合する対象を指定しないことです(例:改行(backtick)n)。あなたはV3を持っている場合は

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

(IPconfig /all) > $file 

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

を埋め込まれた改行を1つの文字列として、すべてのデータを読み取ることが

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" 
+0

ああ、それはそれを説明します。どうもありがとうございます! – user1310856

+2

これは私には役に立たなかった。これは以下の通りです: (Get-Content test.txt)-join [環境] :: NewLine – Jens

1

多分、文字列の配列にキャストしてください。このように、あなたの最後の例:1秒間

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

またはこの:

$message = [string[]](ipconfig) 
15

は、彼らが同じことを達成する-rawパラメータを追加しました:

Get-Content $file -Raw 
+1

'Get-Content $ file -Raw'は完璧に動作します –

関連する問題