powershell invoke-command 到变量并写为 table
powershell invoke-command to variable and write out as a table
我有以下代码,从我想要得到的输出到
$output
最后写主机:
$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
我收到错误
Missing '=' operator after key in hash literal
问题来自 New-Object
cmdlet,它期望向 -Property
参数提供散列 table。
我认为您根本不需要 New-Object
来获得我认为您想要的东西。
您可能还想考虑使用 Select-Object
而不是 Format-Table
,然后在最后使用 Format-Table
,以便在需要时可以更灵活地进一步处理结果.
您也可以 return 直接 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
我不能说你的散列,但自定义对象的构造看起来很不稳定。我将从为 $outputs 中你想要的每个项目使用 Name/Value 对正确格式化自定义对象开始,并在每次迭代中直接附加 $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}
}
}
我有以下代码,从我想要得到的输出到
$output
最后写主机:
$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
我收到错误
Missing '=' operator after key in hash literal
问题来自 New-Object
cmdlet,它期望向 -Property
参数提供散列 table。
我认为您根本不需要 New-Object
来获得我认为您想要的东西。
您可能还想考虑使用 Select-Object
而不是 Format-Table
,然后在最后使用 Format-Table
,以便在需要时可以更灵活地进一步处理结果.
您也可以 return 直接 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
我不能说你的散列,但自定义对象的构造看起来很不稳定。我将从为 $outputs 中你想要的每个项目使用 Name/Value 对正确格式化自定义对象开始,并在每次迭代中直接附加 $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}
}
}