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