将输出合并到一个表中

时间:2016-07-27 21:19:46

标签: powershell

我使用this code我已修改删除了一些我不需要的项目,我正在尝试将输出合并到一个表中。我已经走到了这一步:

$SCVMs | ForEach-Object {
  $VMName = Get-SCVirtualMachine $_.Name | Select -Expand Name
  $ReportData = $ReportData + (Get-SCVirtualMachine $_.Name |
    Get-SCVirtualHardDisk |
    Select @{Label="VM Name";Expression={$VMName}},
           @{Label="VHD Name";Expression={$_.Name}},
           @{Label="VHD Location";Expression={$_.Location}},
           @{Label="Max Disk Size (GB)";Expression={($_.MaximumSize/1GB)}},
           @{Label="Disk Space Used (GB)";Expression={"{0:N2}" -f ($_.Size/1GB)}},
           @{Label="Disk Space Used (%)";Expression={[math]::Round((($_.Size/1GB)/($_.MaximumSize/1GB))*100)}},
           @{Label="Free Disk Space (GB)";Expression={"{0:N2}" -f (($_.MaximumSize/1GB) - ($_.Size/1GB))}} |
    ConvertTo-Html -as Table -Fragment)
}

报告在同一个表中显示特定VM的硬盘驱动器,但它为每个VM创建一个单独的表。我想为所有VM生成一个表,为VM中的每个硬盘驱动器都有一个单独的行。

我相信诀窍在于我如何选择物体并将它们一起管道,但我没有足够的经验来看它是如何做到的。

我不需要HTML格式的报告,CSV就可以了。

2 个答案:

答案 0 :(得分:0)

您将每个对象传递到ConvertTo-Html,因此您可以获得每个对象的表格片段。而不是这样做(并在其上添加循环)将ForEach-Object 放在之外的$SCVMs | ForEach-Object { $VMName = ... $ReportData = $ReportData + (Get-SCVirtualMachine $_.Name | Get-SCVirtualHardDisk | Select ... | ConvertTo-Html -as Table -Fragment) } 循环。

改变这个:

$ReportData = $SCVMs | ForEach-Object {
  $VMName = ...
  Get-SCVirtualMachine $_.Name |
    Get-SCVirtualHardDisk |
    Select ...
} | ConvertTo-Html -as Table -Fragment

进入这个:

$ReportData

或者这个(如果你需要附加到$ReportData += $SCVMs | ForEach-Object { $VMName = ... Get-SCVirtualMachine $_.Name | Get-SCVirtualHardDisk | Select ... } | ConvertTo-Html -as Table -Fragment ):

ConvertTo-Html

要切换为CSV输出,您只需将ConvertTo-Csv替换为Export-Csvthis

答案 1 :(得分:0)

取出中间变量并从循环中删除ConvertTo-Html。最好还是直接导出到CSV。像这样:

$SCVMs | ForEach-Object {
$VMName = Get-SCVirtualMachine $_.Name | Select -Expand Name
$ReportData = $ReportData + (Get-SCVirtualMachine $_.Name | Get-SCVirtualHardDisk | Select `
    @{Label="VM Name";Expression={$VMName}}, `
    @{Label="VHD Name";Expression={$_.Name}}, `
    @{Label="VHD Location";Expression={$_.Location}}, `
    @{Label="Max Disk Size (GB)";Expression={($_.MaximumSize/1GB)}}, `
    @{Label="Disk Space Used (GB)";Expression={"{0:N2}" -f ($_.Size/1GB)}}, `
    @{Label="Disk Space Used (%)";Expression={[math]::Round((($_.Size/1GB)/($_.MaximumSize/1GB))*100)}}, ` 
    @{Label="Free Disk Space (GB)";Expression={"{0:N2}" -f (($_.MaximumSize/1GB) - ($_.Size/1GB))}} | ConvertTo-HTML -as Table -Fragment) }