使用 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.

的操作