使用 powershell 从 json 中提取数据
Extract data from json using powershell
我使用 powershell 中的 strem 执行以下命令,我使用以下代码
以 json 的形式收到响应
$session = New-SSHSession -ComputerName $S_1 -Credential $cred
$Strem = New-SSHShellStream -SSHSession $Session
$cmd_4 = $Strem.WriteLine("shell.connect('USER@X92SL224XXX2XX:3306')")
sleep -Seconds 5
$Strem.read()
$pass = $Strem.WriteLine("password")
sleep -Seconds 5
$Strem.read()
$cmd_5 = $Strem.WriteLine("var cluster = dba.getCluster('IBDCluster')")
sleep -Seconds 5
$Strem.read()
$cmd_6 = $Strem.WriteLine("cluster.status()")
sleep -Seconds 5
$ClusterStatus = $Strem.read()
[DBG]: PS C:\Windows\system32>>
cluster.status()
{
"clusterName": "IBDCluster",
"defaultReplicaSet": {
"name": "default",
"primary": "X92SL224XXX2XX:3306",
"ssl": "REQUIRED",
"status": "OK_NO_TOLERANCE",
"statusText": "Cluster is NOT tolerant to any failures. 1 member is not active.",
"topology": {
"X92SL224XXX1XX:3306": {
"address": "X92SL224XXXXXXX:3306",
"memberRole": "SECONDARY",
"mode": "R/O",
"readReplicas": {},
"role": "HA",
"status": "ONLINE",
"version": "5.7.36"
},
"X92SL224XXX2XX:3306": {
"address": "X92SL224XXX2XX:3306",
"memberRole": "PRIMARY",
"mode": "R/W",
"readReplicas": {},
"role": "HA",
"status": "ONLINE",
"version": "5.7.36"
},
"X92SL224XXXX3XX:3306": {
"address": "X92SL224XXX3XX:3306",
"instanceErrors": [
"ERROR: group_replication has stopped with an error."
],
"memberRole": "SECONDARY",
"memberState": "ERROR",
"mode": "R/O",
"readReplicas": {},
"role": "HA",
"status": "(MISSING)",
"version": "5.7.36"
}
},
"topologyMode": "Single-Primary"
},
"groupInformationSourceMember": "X92SL224XXXXXXX:3306"
}
[48;5;254m[38;5;23m My[0m[48;5;254m[38;5;166mSQL [0m[48;5;237m[38;5;15m X92SL224QDBA2DB:3306 ssl [0m[48;5;221m[38;5;0m JS [0m[48;5;0m> [0m
我需要从上面的数据中获取所有的 address, memberRole, memberState .
我正在尝试从 Json 进行转换,但出现类似
的错误
ConvertFrom-Json : Invalid JSON primitive: cluster.status.
请告诉我如何从上面获取数据
看起来您只需要删除 $Strem.Read()
returns 的 multi-line 字符串中 JSON 文本之前的 cluster.status()
行,因为以及它后面的额外行:
$ClusterStatus = $Strem.Read() -replace '^.+|.+$' | ConvertFrom-Json
注意:-replace '^.+|.+$'
会从输入字符串中删除第一行和最后一行,而不会同时尝试删除它们之后/之前的换行符;但是,这些换行符是附带的空格,不会影响 ConvertFrom-Json
.
的操作
我使用 powershell 中的 strem 执行以下命令,我使用以下代码
以 json 的形式收到响应$session = New-SSHSession -ComputerName $S_1 -Credential $cred
$Strem = New-SSHShellStream -SSHSession $Session
$cmd_4 = $Strem.WriteLine("shell.connect('USER@X92SL224XXX2XX:3306')")
sleep -Seconds 5
$Strem.read()
$pass = $Strem.WriteLine("password")
sleep -Seconds 5
$Strem.read()
$cmd_5 = $Strem.WriteLine("var cluster = dba.getCluster('IBDCluster')")
sleep -Seconds 5
$Strem.read()
$cmd_6 = $Strem.WriteLine("cluster.status()")
sleep -Seconds 5
$ClusterStatus = $Strem.read()
[DBG]: PS C:\Windows\system32>>
cluster.status()
{
"clusterName": "IBDCluster",
"defaultReplicaSet": {
"name": "default",
"primary": "X92SL224XXX2XX:3306",
"ssl": "REQUIRED",
"status": "OK_NO_TOLERANCE",
"statusText": "Cluster is NOT tolerant to any failures. 1 member is not active.",
"topology": {
"X92SL224XXX1XX:3306": {
"address": "X92SL224XXXXXXX:3306",
"memberRole": "SECONDARY",
"mode": "R/O",
"readReplicas": {},
"role": "HA",
"status": "ONLINE",
"version": "5.7.36"
},
"X92SL224XXX2XX:3306": {
"address": "X92SL224XXX2XX:3306",
"memberRole": "PRIMARY",
"mode": "R/W",
"readReplicas": {},
"role": "HA",
"status": "ONLINE",
"version": "5.7.36"
},
"X92SL224XXXX3XX:3306": {
"address": "X92SL224XXX3XX:3306",
"instanceErrors": [
"ERROR: group_replication has stopped with an error."
],
"memberRole": "SECONDARY",
"memberState": "ERROR",
"mode": "R/O",
"readReplicas": {},
"role": "HA",
"status": "(MISSING)",
"version": "5.7.36"
}
},
"topologyMode": "Single-Primary"
},
"groupInformationSourceMember": "X92SL224XXXXXXX:3306"
}
[48;5;254m[38;5;23m My[0m[48;5;254m[38;5;166mSQL [0m[48;5;237m[38;5;15m X92SL224QDBA2DB:3306 ssl [0m[48;5;221m[38;5;0m JS [0m[48;5;0m> [0m
我需要从上面的数据中获取所有的 address, memberRole, memberState .
我正在尝试从 Json 进行转换,但出现类似
的错误ConvertFrom-Json : Invalid JSON primitive: cluster.status.
请告诉我如何从上面获取数据
看起来您只需要删除 $Strem.Read()
returns 的 multi-line 字符串中 JSON 文本之前的 cluster.status()
行,因为以及它后面的额外行:
$ClusterStatus = $Strem.Read() -replace '^.+|.+$' | ConvertFrom-Json
注意:-replace '^.+|.+$'
会从输入字符串中删除第一行和最后一行,而不会同时尝试删除它们之后/之前的换行符;但是,这些换行符是附带的空格,不会影响 ConvertFrom-Json
.