0

背景。

我有 IBM CDC Replication 引擎,我需要使用 Zabbix 检查订阅状态。

cmd.exe /C "C:\Program Files\IBM\InfoSphere Data Replication\Management Console\bin\chcclp.exe" -f c:\CDC_Check.txt我通过CDC_Check.txt 是该 chcclp CLI 的脚本来调用 subs 状态

//Check the status of all subscriptions

//Source datastore:  ***
//Target datastore:  ***


chcclp session set to cdc;

// Turn on verbose output.
set verbose;

// Setting variables.
set variable name "ACCESS_HOSTNAME" value "";
set variable name "ACCESS_PORT" value "";
set variable name "ACCESS_USERNAME" value "";
set variable name "ACCESS_PASSWORD" value "";
set variable name "SOURCE_DATASTORE" value "";
set variable name "TARGET_DATASTORE" value "";

// Connecting to Access Server.
connect server
    hostname "%ACCESS_HOSTNAME%"
    port "%ACCESS_PORT%"
    username "%ACCESS_USERNAME%"
    password "%ACCESS_PASSWORD%";

// Connecting to the source and target datastores.
connect datastore name "%SOURCE_DATASTORE%";
connect datastore name "%TARGET_DATASTORE%";

// Setting the datastore context.
select datastore name "%SOURCE_DATASTORE%" context source;
select datastore name "%TARGET_DATASTORE%" context target;

// List replication state and latency of all subscriptions.
monitor replication;

// Disconnecting from datastores and Access Server.
disconnect datastore name "%SOURCE_DATASTORE%";
disconnect datastore name "%TARGET_DATASTORE%";

// Disconnect from Access Server and terminate the script.
disconnect server;
exit;

我收到以下结果:
在此处输入图像描述
在此处输入图像描述

我正在尝试解析订阅 + 状态并将其移动到 Json 以便与 zabbix 进行下一次集成。我在 PS 方面很新,所以我仍然没有正常的进步。我理解我需要捕获任何在 SUBSCRIPTIONS 和 STATE 下的内容并将其写入 Json 的想法。

4

1 回答 1

0

第一步是重定向应用程序的输出,以便您可以读取它以进行解析。

cmd.exe /C "C:\Program Files\IBM\InfoSphere Data Replication\Management Console\bin\chcclp.exe" -f c:\CDC_Check.txt > C:\temp\file.log

然后您可以使用 get Get-Contentcmdlet 在控制台会话中获取它

$fileContent = Get-Content -Path "C:\temp\file.log"

一旦它在一个数组中,您就可以像这样解析它。

$i=0
$fileContent | %{
  $i++
  if($_ | Select-String -Pattern "SUBSCRIPTION       STATE" -CaseSensitive){
    $headerIndex = $i
  }
}
$headerIndex += 2 #start of report data to capture

这个循环一直持续到它在输出中找到空行

$hashObj= @{}
for ($x = $headerIndex; $fileContent[$x].length -gt 1 ;$x++){ 
  $hashObj.Add("$($fileContent[$x].Substring(0,19).Trim(' '))","$($fileContent[$x].Substring(20,19).Trim(' '))")
}    

#converts your hashtable to json object
$jsonObj = $hashObj | convertto-json

不完全确定您需要如何格式化 json,但这将是您期望的输出类似于

{
  "S_ACC_D":  "Mirror Continuous",
  "S_ACC_E":  "Mirror Continuous",
  "S_ACC_A":  "Mirror Continuous",
  "S_ACC_B":  "Mirror Continuous",
  "S_ACC_C":  "Mirror Continuous"
}
于 2021-09-30T17:18:33.027 回答