2013-02-23 90 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)。

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 2013-02-23 15:54:24

+2

這不適合我。這下面做了: (Get-Content test.txt)-join [環境] :: NewLine – Jens 2015-06-19 08:48:05

1

可能投射到一個字符串數組。與此類似,您的最後一個例子:

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

或者本作的第二個:

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

要讀取的所有數據作爲單個字符串嵌入

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

(IPconfig /all) > $file 

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

如果你有V3的換行符,他們增加了-raw參數,將完成同樣的事情:

Get-Content $file -Raw 
+1

'Get-Content $ file -Raw'完美運作 – 2017-04-22 19:35:42