在PowerShell脚本中返回解析函数

问题描述

我正在尝试从PowerShell脚本中的功能之一解析响应,并根据响应做出一些决定。

函数成功返回JSON对象,但无法解析该函数​​的响应。我需要检查有效节点数是否为0。

      [String[]] $NodeList = 'a1572dev00e001','a1572dev00q001'


$Response = Get-Nodes
Write-Output "Response $Response"
        $JSRes = $Response | ConvertFrom-Json
        Write-Output "Parsing response $JSRes"
        #$Result = "success"

        if($JSRes.ValidNodes.Count -gt 0)
            {
                 Write-Output "$JSRes.ValidNodes"
                 $Result = "success"
                 

            }
            else
                {
                    Write-Output "All nodes are Invalid"
                    Write-Output "Invalid Nodes: $JSRes.Invalid"
                    $Result = "Failed"
                    $ErrorMessage = "All nodes are Invalid"
    
            }
        Write-Output $Result


#Function
function Get-Nodes
{
    $ValidNodes=@()
    $InvalidNodes=@()

foreach($Node in $NodeList)
{
    if(Get-ADComputer -filter {Name -eq $Node})
    {
        $ValidNodes +=$Node
    }
    else
    {
        $InvalidNodes +=$Node
    }
}
    $JRes = @{"ValidNodes"=$ValidNodes;"Invalid"=$InvalidNodes} | ConvertTo-Json -Compress
    Write-Output $JRes 
    return $JRes
}

输出

Response {"ValidNodes":["a1572dev00e001","a1572dev00q001"],"Invalid":[]} {"ValidNodes":["
a1572dev00e001","Invalid":[]}
Parsing response 
All nodes are Invalid
Invalid Nodes: 
Failed

解决方法

一个问题是您输出两次$ Jres。

Write-Output $JRes 
return $JRes

这些有效地做完全相同的事情。接下来,您似乎应该使用ConvertFrom-String

时使用ConvertFrom-Json
$JSON = $Response | ConvertFrom-String

最后,您尝试输出仅存在于函数中的$ValidNodes$InvalidNodes。将它们更改为$JSON.ValidNodes$JSON.InvalidNodes

另一个建议是参数化Nodelist,以便您可以将节点传递给函数。

#Function
function Get-Nodes
{
    Param([string[]]$nodelist)
    $ValidNodes=@()
    $InvalidNodes=@()

foreach($Node in $NodeList)
{
    if(Get-ADComputer -filter {Name -eq $Node})
    {
        $ValidNodes +=$Node
    }
    else
    {
        $InvalidNodes +=$Node
    }
}
    $JRes = @{"ValidNodes"=$ValidNodes;"Invalid"=$InvalidNodes} | ConvertTo-Json -Compress
    $JRes 
}

$Response = Get-Nodes a1572dev00e001,a1572dev00q001

Write-Output "Response $Response"
$JSON = $Response | ConvertFrom-Json
Write-Output "Parsing response $JSON"

if($JSON.ValidNodes.Count -gt 0)
    {
            Write-Output "Valid Nodes: $($JSON.ValidNodes)"
            $Result = "success"
             
    }
    else
    {
            Write-Output "All nodes are Invalid"
            Write-Output "Invalid Nodes: $($JSON.InValidNodes)"
            $Result = "failed"
            $ErrorMessage = "All nodes are Invalid"

    }
Write-Output $Result

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...