从Invoke-Command返回对象数组

时间:2017-12-05 16:23:56

标签: powershell

Powershell脚本只返回Invoke-Command中的一个值,而不是我期望的所有对象。

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

$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
}
Answer:
  $inventory = $args[0] ---> $inventory = $args

1 个答案:

答案 0 :(得分:1)

尝试使用$inventory = $args代替$inventory = $args[0]

将数组传递给脚本块并不是最简单的事情,因为$args将所有内容展平为单个数组。如果您通过-ArgumentList @(1,2,3), 4,那么$Args将是一个数组@(1,2,3,4),而$Args[0]将是1

如果您需要使用-ArgumentList传递复杂参数,请将它们全部作为单个HashTable传递:-ArgumentList @{FirstArg = @(1,2,3); SecondArg = 4}