Powershell 从Invoke命令返回对象数组

Powershell 从Invoke命令返回对象数组,powershell,Powershell,Powershell脚本仅从Invoke命令返回一个值,而不是我期望的所有对象 我正在向远程服务器上的现有对象添加属性,然后将其返回 $inventory包含如下所示的应用程序对象: Name : Centinel-Dev-AmazonServer Platform : Centinel Type : Windows Service Tier : APP Status : Running Name : Port

Powershell脚本仅从Invoke命令返回一个值,而不是我期望的所有对象

我正在向远程服务器上的现有对象添加属性,然后将其返回

$inventory
包含如下所示的应用程序对象:

Name         : Centinel-Dev-AmazonServer
Platform     : Centinel
Type         : Windows Service
Tier         : APP
Status       : Running

Name         : Portal-QA-Walmart
Platform     : Portal
Type         : Windows Service
Tier         : APP
Status       : Running
还有更多的应用程序对象类似于我运行脚本时给出的两个,它只返回第一个对象,而不是全部

function verify_workingDir {
    param($server)
    $inventory = GetInventory -Server $server
    $return_object = @()
    $return_object += Invoke-Command -ComputerName $server -ScriptBlock {
        $inventory = $args[0]

        $return_object = @()
        foreach ($Application in $inventory) {

            $applicationParamters = Get-ItemProperty -Path x:\x\x\x\$($Application.Name)\Parameters


            $verify_object = [pscustomobject] @{
                WorkingDirectory = $applicationParamters.ServiceWorkingDir
            }


            $ExpandVerifyObject = $verify_object | Select-Object -Property @{
                Name       = "MyProperties"
                Expression = {$_.WorkingDirectory }
            } | Select-Object -ExpandProperty MyProperties

            Add-Member -MemberType NoteProperty -Name WorkingDirectory -InputObject $Application -TypeName PSObject -Value $ExpandVerifyObject
            $return_object += $Application    
        }

        return $return_object

    } -ArgumentList ($inventory) #| Select Name, Platform, Type, Tier, Status, ServerName, WorkingDirectory

    return $return_object
}


尝试
$inventory=$args
而不是
$inventory=$args[0]

将数组传递给脚本块不是一件容易的事情,因为
$args
会将所有内容展平到单个数组中。如果传递
-ArgumentList@(1,2,3),4
,则
$Args
将是单个数组
@(1,2,3,4)
$Args[0]
将是
1

如果需要通过
-ArgumentList
传递复杂参数,请将它们作为一个哈希表传递:
-ArgumentList@{FirstArg=@(1,2,3);SecondArg=4}

将数组传递给脚本块不是一件容易的事情,因为
$args
将所有内容展平到单个数组。你能举个例子吗?我正在尝试
Invoke命令-Command{ConvertTo Json-InputObject$args-Compress}-ArgumentList@(1,2,3),4
并获取
[[1,2,3],4]
。这里没有压扁。@PetSerAl或一定是我在想的问题。真正的问题出现在需要将多个数组作为参数传递时,因为
-Arg(,$Arr1),$Val1,(,$Arr2)
可能根本不起作用。因为
-Arg(,$Arr1),$Val1,(,$Arr2)
可能根本不起作用。可能是因为您应该使用
$Arr1、$Val1、$Arr2
。除非只传递一个参数,否则不应该这样写。@PetSerAl“不应该这样写”为什么?这很好:
x=@(1,2,3)$y=@(,$x),4,(,$x))$y[0]$y[1]$y[2]。事实上,使用
Invoke命令
时,您必须说
$x=@(1,2,3);调用命令-命令{$args[0][0];$args[1];$args[2][0]}-ArgumentList@((,$x),4,(,$x))
是异常的。由于所有的后台封装,该语言的行为应该是一致的,并且在这里没有。这就是为什么我说:把所有的参数都放在一个
哈希表中
,并以这种方式传递参数。这是最一致和最明显的行为。这很好:
$x=@(1,2,3)$y=@(,$x),4,(,$x))$y[0]$y[1]$y[2]。但是
$y[0]。长度$y[2]。长度
将返回
1
1
,但不返回
3
3
Answer:
  $inventory = $args[0] ---> $inventory = $args