2016-12-24 2 views
2

Я пытаюсь перейти через переменную, строчную линию и применить регулярное выражение для синтаксического анализа строки внутри него.Powershell для каждой строки в переменной

Я загрузки данных через Invoke-restmethod и пытаюсь сделать ниже

$result= invoke-restmethod -uri $uri -method get 

foreach($line in $result) 
if($line -match $regex) 
{ 
    #parsing 
} 

выше не работает, как их только одна линия. Но когда я вывод результата в файл, а затем применить вышеуказанную логику он работает, как и

$result= invoke-restmethod -uri $uri -method get 
$result >> $filelocation 

$file = get-content $file 
foreach($line in $file) 
if($line -match $regex) 
{ 
    #parsing 
} 

Сценарий критичный по времени, поэтому я не могу позволить себе роскоши писать в файл, а затем снова, как может Я достигаю выше, не используя get-content?

+1

'-split '\ r? \ n'' – PetSerAl

+0

Я хочу видеть содержимое файла при хранении в файле, а также вывод содержимого, когда вы не храните. Просто укажите запись в хосте, чтобы получить результат в консоль и запрос вы опубликуете его. –

ответ

3

Это не проблема с Invoke-Method. Следующее работает так, как вам хотелось бы.

$result = Invoke-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ 
$result | %{ Write-Host $_ } 

Я подозреваю, что конечная точка REST дает вам новую строку UNIX вместо новой строки Windows. В UNIX новая строка - это один символ 'lf' (line feed). В окнах новая строка - это «crlf» (возврат каретки, фид строки).

Попробуйте метод разделения строки

$result.Split("`n") | %{ Write-Host $_ } 

или, если вы предпочитаете синтаксис 'Еогеасп'

foreach ($line in $result.Split("`n")) { 
    Write-Host $line 
} 

[Edit: изменен 'для' до 'Еогеасп']

+0

второй вариант сработал, но мне пришлось изменить значение foreach – rusty009

+0

@PetSerAl, хороший улов. –

+1

@ mklement0, спасибо. –

Смежные вопросы