powershell invoke-command to variable并写出一个表

问题描述 投票:0回答:2

我有以下代码,从我想要输出到

$输出

并在最后写主持人:

$outputs = @()
foreach ($comp in $maschines.name) { 
    $output = New-Object PSObject -Property @{
            invoke-command -computer comp3 -ScriptBlock { get-vm –VMName $using:comp | Select-Object VMId | Get-VHD | ft @{
            label="vm"; expression={$using:comp}}, 
            path,
            VhdType, 
            VhdFormat, 
            @{label="file(gb)"; expression={($_.FileSize / 1GB) -as [int]}}, 
            @{label="size(gb)"; expression={($_.Size / 1GB) -as [int]}} -AutoSize 
        }
    }
    $outputs += $output
}

$outputs

我收到了错误

在哈希文字中键入后缺少'='运算符

powershell invoke-command
2个回答
4
投票

问题来自New-Object cmdlet,它期望将哈希表提供给-Property参数。

我认为你根本不需要New-Object得到我认为你想要的东西。

您可能还需要考虑使用Select-Object而不是Format-Table,然后在最后使用Format-Table,以便在需要时如何进一步操作结果时提供更大的灵活性。

您也可以直接返回ForEach的结果,而不是添加到数组,因为每次重新创建数组时效率较低:

$output = foreach ($comp in $maschines.name) { 
    invoke-command -computer comp3 -ScriptBlock {
        get-vm –VMName $using:comp | Select-Object VMId | Get-VHD | Select-Object @{ label = "vm"; expression = {$using:comp} }, 
        path,
        VhdType, 
        VhdFormat, 
        @{label = "file(gb)"; expression = {($_.FileSize / 1GB) -as [int]} }, 
        @{label = "size(gb)"; expression = {($_.Size / 1GB) -as [int]} }
    }
}

$output | Format-Table -AutoSize 

0
投票

我不能说你的哈希,但自定义对象的构造看起来很不稳定。我将首先使用名称/值对为$ outputs中的每个项目正确格式化自定义对象,并在每次迭代时直接附加$ outputs ...

$outputs = @()

foreach ($comp in $maschines.name) { 

    $outputs += [pscustomobject]@{

        Prop1 = Get-VM -Name $comp | Select -ExpandProperty Value1
        Prop2 = Get-VM -Name $comp | Select -ExpandProperty Value2
        Prop3 = Invoke-Commmand -ComputerName $comp -Scriptblock {Get-Something | Select Something}

    } 

}
© www.soinside.com 2019 - 2024. All rights reserved.