2016-07-27 100 views
0

我使用的是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中的每个硬盘驱动器生成一个单独的表,并为其分配一行。

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

我不需要HTML中的报告,CSV就没问题。

+0

它在我看来像你有它的要点。你错过了什么? – zdan

回答

0

将每个对象管道化为ConvertTo-Html,以便为每个对象获取表格片段。而不是这样做(并在最上面的循环中追加)将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 

要切换到CSV输出你只用ConvertTo-CsvExport-Csv替换ConvertTo-Html

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) }