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
答案 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}
。