PowerShell сохраняет форматирование текста при чтении файла

Я считаю, что это простой вопрос, но я не могу обдумать его. Я хочу выполнять диагностические команды в командной оболочке Windows. Как это:

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

   $message = Invoke-Expression($cmd)

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

Затем я хочу иметь возможность прочитать файл, сохранить форматирование и, наконец, опубликовать его в pastebin через их API. Я пытался, но, кажется, я теряю форматирование, что бы я ни делал. Возможно ли это сделать?


person user1310856    schedule 23.02.2013    source источник


Ответы (3)


Это происходит из-за вашего кастинга. 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"
person Frode F.    schedule 23.02.2013
comment
Это не сработало для меня. Это ниже: (Get-Content test.txt) -join [Environment]::NewLine - person Jens; 19.06.2015
comment
Попробуйте Get-Content test.txt -Raw, если у вас PS 3.0+. - person Frode F.; 06.04.2018

Чтобы прочитать все данные как одну строку со встроенными разрывами строк

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

(IPconfig /all) > $file

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

Если у вас есть V3, они добавили параметр -Raw, который сделает то же самое:

Get-Content $file -Raw
person mjolinor    schedule 23.02.2013

Может быть, привести к массиву строк. Вот так, для вашего последнего примера:

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

Или это для второго:

$message = [string[]](ipconfig)
person David Brabant    schedule 23.02.2013