У меня есть команда оболочки Я хотел бы извлечь данные из Powershell. Данные, которые мне нужны, всегда будут находиться между двумя ключевыми словами, и количество захваченных строк может измениться.Извлечь несколько строк текста между двумя ключевыми словами из команды оболочки в powershell
Выход может выглядеть примерно так.
Sites:
System1:
RPAs: OK
Volumes:
WARNING: Storage group DR_UCS_01-08 contains both replicated and unreplicated volumes. ; CS_TX
WARNING: Storage group DR_UCS_21-28 contains both replicated and unreplicated volumes. ; CS_TX
WARNING: Storage group DR_UCS_31-38 contains both replicated and unreplicated volumes. ; CS_TX
Splitters: OK
System2:
RPAs: OK
Volumes:
WARNING: Storage group MA_UCS_1 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group MA_UCS_2 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group MA_UCS_3 contains both replicated and unreplicated volumes. ; CS_MA
Splitters: OK
WAN: OK
System: OK
Я хотел бы, чтобы захватить и сохранить в переменную (или текстовый файл, если проще?) Часть этих данных для повторного использования в сценарии. Например, я хотел бы, чтобы захватить все между System1: и System2: который будет производить:
RPAs: OK
Volumes:
WARNING: Storage group DR_UCS_01-08 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group DR_UCS_21-28 contains both replicated and unreplicated volumes. ; CS_MA
WARNING: Storage group DR_UCS_31-38 contains both replicated and unreplicated volumes. ; CS_MA
Splitters: OK
Я Мессинг с различными комбинациями регулярных выражений без успеха. У меня был некоторый умеренный успех с этим кодом, но он, похоже, не способен обрабатывать строки предупреждения, и я также не могу заставить Out-File работать с ним, но только Write-Host, который не помогает меня много.
$RP = plink -l User -pw Password 192.168.1.100 "get_system_status summary=no" #extract from
$script = $RP
$in = $false
$script | %{
if ($_.Contains("System1"))
{ $in = $true }
elseif ($_.Contains("System2"))
{ $in = $false; }
elseif ($in)
{ Write-Host $_ }
}
В идеале, я хотел бы иметь возможность использовать этот скрипт и использовать его для анализа данных из любой команды оболочки. В настоящее время я потерян и почти готов отказаться от этого.
Возможно, я не понимаю ваш ответ. Предполагая, что мой вывод оболочки хранится в $ text, вы можете сказать мне код, чтобы извлекать данные между двумя ключевыми словами. Это не всегда будет system1 и system2 – RichT
Хорошо, я думаю, что неверно понял вопрос. Обновлен ответ с более общим решением. – mjolinor
Это похоже на то, что я ищу! Можно ли сохранить этот вывод в новую строку, например $ output. – RichT