Powershell 如何将两个HTML表的输出合并为具有某些列的单个HTML表

Powershell 如何将两个HTML表的输出合并为具有某些列的单个HTML表,powershell,Powershell,我想将Get-VM和Measure-VMcmdlet的输出与Get-VM和Measure-VM的一些列合并到一个HTML表中 我想要VMName、State、RAM和DISK列 Get VM给我VMName和State,Measure VM给我RAM和磁盘。 所以我想将这四列合并到一个HTML表中 $data = foreach ($hostnm in $vmhost) { $resources = @{} Measure-VM –Name * -ComputerName $ho

我想将
Get-VM
Measure-VM
cmdlet的输出与
Get-VM
Measure-VM
的一些列合并到一个HTML表中

我想要VMName、State、RAM和DISK列

Get VM
给我VMName和State,
Measure VM
给我RAM和磁盘。 所以我想将这四列合并到一个HTML表中

$data = foreach ($hostnm in $vmhost) {
    $resources = @{}
    Measure-VM –Name * -ComputerName $hostnm | ForEach-Object {
        $resources[$_.VMName] = $_ | Select-Object MaxRAM, TotalDisk
    }

    Get-VM –ComputerName $hostnm |
        Select-Object Name, State,
            @{n='RAM in GB';e={[Math]::Round($resources[$_.Name].RAM/1024, 2)}},
            @{n='Disk in GB';e={[Math]::Round($resources[$_.Name].TotalDisk/1024, 2)}}
}
$table = $data | ConvertTo-Html -Head $a 
我已经创建了如下代码

Get-VM –ComputerName $hostnm |
    Select-Object Name, State, Uptime,
        @{Name="RAM In GB";Expression={[Math]::Round($_.MemoryAssigned/1GB, 2)}} |
    ConvertTo-Html -Head $a

Measure-VM –Name * -Computername $hostnm |
    Sort-Object VMName |
    Select-Object VMName,
        @{Name="RAM In GB";Expression={[Math]::Round($_.MaxRAM/1024, 2)}},
        @{Name="Disk Size in GB";Expression={[Math]::Round($_.TotalDisk/1024, 2)}} |
    ConvertTo-Html -Head $a
那么我该如何结合这些呢

$vmhost = Get-Content C:\Users\Share1\Desktop\Scripts\VMHosts.txt
$file = "C:\Users\Share1\Desktop\Scripts\output.htm"

$report = "<html> <body>"
$a = "<style>"
$a = $a + "body {font-family: Tahoma; background-color:#fff;}"
$a = $a + "table {font-family: Tahoma;width: $($rptWidth)px;font-size: 12px;border-collapse:collapse;}"
$a = $a + "th {background-color: #cccc99;border: 1px solid #a7a9ac;border-bottom: none;}"
$a = $a + "td {background-color: #ffffff;border: 1px solid #a7a9ac;padding: 2px 3px 2px 3px;vertical-align: middle;text-align:center;}"
$a = $a + "</style>"

$op1 = @()
$op2 = @()
$myresult = @()

$output = foreach ($hostnm in $vmhost) {
    Enable-VMResourceMetering -Name $hostnm -ResourcePoolType @("Processor","VHD","Ethernet","Memory")

    echo "--------------------</br>"
    echo "<b>" $hostnm  "</b></br>"
    echo "--------------------</br>" 

    $op1 = Get-VM –ComputerName $hostnm |
           Select-Object Name, State, Uptime,
               @{Name="RAM In GB"; Expression={[Math]::Round($_.MemoryAssigned/1GB, 2)}} |
           ConvertTo-Html -Head $a 

    Get-VM –Name * -ComputerName $hostnm | Enable-VMResourceMetering
    $op2 = Measure-VM –Name * -ComputerName $hostnm |
           Sort-Object VMName |
           Select-Object VMName,
               @{Name="RAM In GB";Expression={[Math]::Round($_.MaxRAM/1024, 2)}},
               @{Name="Disk Size in GB";Expression={[Math]::Round($_.TotalDisk/1024, 2)}} |
           ConvertTo-Html -Head $a

    $myresult = $op1 + $op2
}

$report = $report + $output + $myresult + "</body></html>"
$report | Out-File $file
$vmhost=获取内容C:\Users\Share1\Desktop\Scripts\VMHosts.txt
$file=“C:\Users\Share1\Desktop\Scripts\output.htm”
$report=“”
$a=“”
$a=$a+“正文{font-family:Tahoma;背景色:#fff;}”
$a=$a+“表{font-family:Tahoma;宽度:$($rptWidth)px;字体大小:12px;边框折叠:折叠;}”
$a=$a+“th{背景色:#cccc99;边框:1px实心#a7a9ac;边框底部:无;}”
$a=$a+“td{背景色:#ffffff;边框:1px实心#a7a9ac;填充:2px 3px 2px 3px;垂直对齐:中间;文本对齐:中心;}”
$a=$a+“”
$op1=@()
$op2=@()
$myresult=@()
$output=foreach($vmhost中的主机名){
启用VMResourceMetering-名称$hostnm-ResourcePoolType@(“处理器”、“VHD”、“以太网”、“内存”)
回音“--------------
” 回显“$hostnm”
“ 回音“--------------
” $op1=获取虚拟机–计算机名$hostnm| 选择对象名称、状态、正常运行时间、, @{Name=“内存在GB中”;表达式={[Math]::Round($\内存签名/1GB,2)}| 转换为Html-头$a 获取VM–名称*-计算机名称$hostnm |启用VMResourceMetering $op2=度量VM–名称*-计算机名称$hostnm| 排序对象VMName| 选择对象名称, @{Name=“RAM In GB”;表达式={[Math]::Round($\ux.MaxRAM/1024,2)}, @{Name=“磁盘大小以GB为单位”;表达式={[Math]::Round($\ TotalDisk/1024,2)}| 转换为Html-头$a $myresult=$op1+$op2 } $report=$report+$output+$myresult+“” $report | Out File$File
实际结果是我得到了两个不同的表,分别是
getvm
measurevm

预期的结果是只有一个表具有VM名称、状态、RAM(单位为GB)和磁盘(单位为GB)。

在构建HTML表之前组合数据

$data = foreach ($hostnm in $vmhost) {
    $resources = @{}
    Measure-VM –Name * -ComputerName $hostnm | ForEach-Object {
        $resources[$_.VMName] = $_ | Select-Object MaxRAM, TotalDisk
    }

    Get-VM –ComputerName $hostnm |
        Select-Object Name, State,
            @{n='RAM in GB';e={[Math]::Round($resources[$_.Name].RAM/1024, 2)}},
            @{n='Disk in GB';e={[Math]::Round($resources[$_.Name].TotalDisk/1024, 2)}}
}
$table = $data | ConvertTo-Html -Head $a