скрипт powershell для захвата части данных из вывода командной строки - PullRequest
0 голосов
/ 03 ноября 2018

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

Remote Copy System Information
Status: Started, Normal

Target Information

Name        ID Type Status Options Policy
3PARSYSTEM1  2 IP   ready  -       mirror_config

Link Information

Target      Node  Address      Status Options
3PARSYSTEM1 0:3:1 xxx.xxx.xxx.xxx Up     -
3PARSYSTEM1 1:3:1 xxx.xxx.xxx.xxx Up     -
receive     0:3:1 receive      Up     -
receive     1:3:1 receive      Up     -

Group Information

Name         Target      Status   Role       Mode     Options
GRP001Temp   3PARSYSTEM1 Started  Primary    Periodic Last-Sync 2018-11-04 00:08:09 MYT, Period 3h,over_per_alert
  LocalVV        ID   RemoteVV         ID   SyncStatus    LastSyncTime
  LUN001-Temp 13304 LUN001-TempDR 16914 Synced        2018-11-04 00:08:10 MYT

Name              Target      Status   Role       Mode     Options
GRP002-PHY01 3PARSYSTEM1 Started  Primary    Periodic Last-Sync 2018-11-04 01:17:54 MYT, Period 2h,auto_recover,over_per_alert
  LocalVV          ID   RemoteVV         ID   SyncStatus    LastSyncTime
  LUN001-VVT2.12  120 LUN001-VVT2.12  210 Syncing (33%) 2018-11-03 23:51:04 MYT

Name              Target      Status   Role       Mode     Options
GRP003-PHY02 3PARSYSTEM1 Started  Primary    Periodic Last-Sync 2018-11-04 01:27:12 MYT, Period 1h45m,auto_recover,over_per_alert
  LocalVV          ID   RemoteVV         ID   SyncStatus    LastSyncTime
  LUN002-VVT2.14  130 LUN002-VVT2.14  207 Syncing (49%) 2018-11-03 23:59:27 MYT

Name              Target      Status   Role       Mode     Options
GRP001-PRD-ORA 3PARSYSTEM1 Started  Primary    Periodic Last-Sync 2018-11-04 00:45:09 MYT, Period 2h,auto_recover,over_per_alert
  LocalVV                      ID   RemoteVV                     ID   SyncStatus    LastSyncTime
  ORA-PROD-VG01.35   97 ORA-PROD-VG01.35 2451 Synced        2018-11-04 00:45:54 MYT
  ORA-PROD-VG02.36   98 ORA-PROD-VG02.36 2452 Synced        2018-11-04 00:46:10 MYT
  ORA-PROD-VG03.37   99 ORA-PROD-VG03.37 2453 Synced        2018-11-04 00:45:48 MYT
  ORA-PROD-VG04.38  100 ORA-PROD-VG04.38 2454 Synced        2018-11-04 00:45:12 MYT
  ORA-PROD-VG05.39  101 ORA-PROD-VG05.39 2455 Synced        2018-11-04 00:45:12 MYT

Name              Target      Status   Role       Mode     Options
GRP001-PRD-SAP 3PARSYSTEM1 Started  Primary    Periodic Last-Sync 2018-11-04 01:24:25 MYT, Period 23m,auto_recover,over_per_alert
  LocalVV                 ID   RemoteVV                ID   SyncStatus    LastSyncTime
  SAP-PROD-APPS.4        80 SAP-PROD-APPS.4      1474 Synced        2018-11-04 01:24:28 MYT
  SAP-PROD-LOCK.19       95 SAP-PROD-LOCK.19     1490 Synced        2018-11-04 01:24:25 MYT
  SAP-PROD-SAPDT1.5      81 SAP-PROD-SAPDT1.5    1475 Synced        2018-11-04 01:25:16 MYT
  SAP-PROD-SAPDT2.6      82 SAP-PROD-SAPDT2.6    1476 Synced        2018-11-04 01:25:05 MYT
  SAP-PROD-SAPDT3.7      83 SAP-PROD-SAPDT3.7    1477 Synced        2018-11-04 01:25:07 MYT
  SAP-PROD-SAPDT4.8      84 SAP-PROD-SAPDT4.8    1478 Synced        2018-11-04 01:25:41 MYT
  SAP-PROD-SAPDT5.9      85 SAP-PROD-SAPDT5.9    1479 Synced        2018-11-04 01:25:35 MYT
  SAP-PROD-SAPDT6.10     86 SAP-PROD-SAPDT6.10   1480 Synced        2018-11-04 01:25:56 MYT

Name              Target      Status   Role       Mode     Options
GRP002-PRD-SAP 3PARSYSTEM1 Started  Primary    Periodic Last-Sync 2018-11-04 01:24:55 MYT, Period 23m,over_per_alert
  LocalVV          ID   RemoteVV          ID   SyncStatus    LastSyncTime
  SAP-PROD-VG01.10   15 SAP-PROD-VG01.10 29769 Synced        2018-11-04 01:28:44 MYT

и я хочу использовать powershell для захвата информации о группе, чтобы я мог получить имя группы и запустить другую команду для циклического просмотра имени группы. Пример вывода приведен ниже.

GRP001Temp
GRP002-PHY01
GRP003-PHY02
GRP001-PRD-ORA
GRP001-PRD-SAP
GRP002-PRD-SAP

Надеюсь, ты поможешь мне с моей проблемой. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

Вы можете разделить вывод по разрыву строки и зациклить результат. Если строка начинается с Name, разделите следующую строку пробелом и запишите первый элемент в вывод.

Что-то вроде:

param($output)

$lines = $output -split [Environment]::NewLine
$name = $false
foreach($line in $lines) {
    if($name) {
        ($line -split ' ')[0] | Write-Output
        $name = $false
    }
    if($line.Startswith('Name')) {
        $name = $true
    }
}
0 голосов
/ 04 ноября 2018

Очевидно, что вы после первого слова, следующего за заголовком

Name         Target      Status   Role       Mode     Options

Не включая false header

Name        ID Type Status Options Policy

другие ответы не исключают.

Таким образом, я разделяю содержимое файла с помощью RegEx по этому заголовку на разделы и пропускаю первый.
Затем разбейте каждый раздел на слова , разделенные пробелом \s, и получите первый [0]

(Get-Content .\SO_53154266.txt -raw) -split "(?sm)^Name\s+Target.*?`r?`n" |
  Select-Object -skip 1|
    ForEach-Object { ($_ -split '\s')[0] }

Пример вывода:

GRP001Temp
GRP002-PHY01
GRP003-PHY02
GRP001-PRD-ORA
GRP001-PRD-SAP
GRP002-PRD-SAP
0 голосов
/ 03 ноября 2018

, если каждая группа входит в роль «Первичная», одним простым способом может быть следующее утверждение:

get-content Demo.txt | where { $_ -match "Primary" } | % { $_.Split(" ")[0] }  

Он получает строки, содержащие слово «Primary», и берет первое слово (в вашем случае название группы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...