首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >powershell脚本从命令行输出中捕获部分数据

powershell脚本从命令行输出中捕获部分数据
EN

Stack Overflow用户
提问于 2018-11-03 18:26:00
回答 3查看 110关注 0票数 0

对不起,如果标题有点混乱,老实说,我不知道如何把它写成平淡无奇的文字,也不知道到底要搜索什么。我有一个来自命令行的输出,如下所示。

代码语言:javascript
复制
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来捕获组信息,这样我就可以获得组名并运行另一个命令来遍历组名。示例输出如下所示。

代码语言:javascript
复制
GRP001Temp
GRP002-PHY01
GRP003-PHY02
GRP001-PRD-ORA
GRP001-PRD-SAP
GRP002-PRD-SAP

希望你能帮我解决问题。提前谢谢你。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-03 18:42:56

您可以将输出拆分为换行并循环结果。如果一行以Name开头,则将下一行拆分为空格,并将第一个元素写入输出。

类似于:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-11-03 18:36:29

如果每个组都处于“主”角色中,一种简单的方法可能是以下语句:

代码语言:javascript
复制
get-content Demo.txt | where { $_ -match "Primary" } | % { $_.Split(" ")[0] }  

它获取包含单词“主”的行,并接受第一个单词(在您的例子中是组名)。

票数 1
EN

Stack Overflow用户

发布于 2018-11-03 22:30:00

显然,您是在标题后面的第一个单词后面。

代码语言:javascript
复制
Name         Target      Status   Role       Mode     Options

不包括

代码语言:javascript
复制
Name        ID Type Status Options Policy

其他答案也不排除。

因此,我会将带有RegEx的文件内容分成几个部分,然后跳过第一个部分。

然后将每个部分分割为单词,用空格\s分隔,并获得第一个[0]

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

样本输出:

代码语言:javascript
复制
GRP001Temp
GRP002-PHY01
GRP003-PHY02
GRP001-PRD-ORA
GRP001-PRD-SAP
GRP002-PRD-SAP
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53134266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档