2013-02-23 39 views
9

Tôi tin rằng đây là một câu hỏi đơn giản nhưng tôi không thể quấn đầu quanh nó. Tôi muốn làm lệnh chẩn đoán trong lệnh shell trên windows. Như thế này:Powershell giữ định dạng văn bản khi đọc trong một tập tin

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

    $message = Invoke-Expression($cmd) 

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

Sau đó, tôi muốn có thể đọc tệp và giữ định dạng và cuối cùng xuất bản lên pastebin qua api của chúng. Tôi đã thử nhưng dường như tôi đã mất định dạng cho dù tôi có làm gì, điều này có thể làm được không?

Trả lời

20

Điều này xảy ra vì đúc của bạn. Get-Content trả về một mảng đối tượng với một đối tượng chuỗi trên mỗi dòng trong tệp văn bản. Khi bạn truyền nó đến [string], nó sẽ tham gia các đối tượng trong mảng. Vấn đề là bạn không chỉ định những gì để tham gia các đối tượng với (ví dụ: linebreak (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

Ah vâng, điều đó giải thích. cảm ơn bạn rất nhiều! – user1310856

+2

Điều này không hiệu quả đối với tôi. Điều này dưới đây đã làm: (Get-Content test.txt) -join [Môi trường] :: NewLine – Jens

1

Truyền tới một chuỗi các chuỗi, có thể. Như thế này, ví dụ cuối cùng của bạn:

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

Hoặc này cho thứ hai:

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

Để đọc tất cả các dữ liệu như là một chuỗi duy nhất với các ngắt dòng nhúng

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

(IPconfig /all) > $file 

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

Nếu bạn có V3, họ thêm vào tham số -Raw rằng sẽ thực hiện điều tương tự:

Get-Content $file -Raw 
+1

'Get-Content $ file -Raw' hoạt động hoàn hảo –

Các vấn đề liên quan