将多列导出为HTML

时间:2015-06-18 16:21:23

标签: powershell powershell-v3.0

我很难创建一个包含多列的表。将使用各种cmdlet填充列。在脚本的最后,我想运行最终检查并将主机名写入文件以及其他各种列。以下是我对标题的思考: " HOSTNAME","文件已被替换?"," SCCM未安装?" 这些标题下方的行将显示计算机名称,TRUE或FALSE,以及TRUE或FALSE。到目前为止,我能够将数据导出到HTM文件,但它不会显示在单独的列中。这就是我所拥有的:

$hostname | ConvertTo-Html -Property @{Expression={ $hostname};Label="Hostname"} | 
            Out-File C:\Temp\Test.htm -Append -NoClobber
If (Test-Path -Path $FileCheck) {
Test-path -Path $FileCheck | ConvertTo-Html -Property  @{Expression=`
    { [string]"TRUE"};Label="Windows files replace"} | Out-File C:\Temp\Test.htm `
                                                        -Append -NoClobber
}
Else {
Test-path -Path $FileCheck | ConvertTo-Html -Property @{Expression=`
    { [string]"FALSE"};Label="Windows files replaced"} | Out-File C:\Temp\Test.htm `
                                                         -Append -NoClobber
}

我基本上只需要了解如何创建一个包含3或4列的表或数组,以及如何填充这些列的行。每台计算机都有一个不同的行,并显示类似(COMPUTER1,TRUE,FALSE,TRUE)的内容。我目前设置它的方式是,当我需要新列中的标题时,它会创建新行。

1 个答案:

答案 0 :(得分:1)

好的,你真正需要的是一系列对象。这些对象将具有三个属性,一个用于表中的每一列。要在PS3中创建对象,您只需使用[pscustomobject]类型,然后使用包含所需值的哈希表。像这样:

[pscustomobject]@{
    "HOSTNAME" = $hostname
    "FILES REPLACED" = If (Test-Path -Path $FileCheck) {"TRUE"}else{"FALSE"}
    "SCCM UNINSTALLED" = <some test to see if SCCM is installed>
}

然后,您可以为相关计算机/服务器创建一个循环,为每台计算机创建一次该对象,将所有对象添加到数组,然后将该数组输出到HTML。

$Results = @()
ForEach($hostname in $machinelist){

    $filecheck = "\\$hostname\c$\path\to\files"
    $Results += [pscustomobject]@{
        "HOSTNAME" = $hostname
        "FILES REPLACED" = If (Test-Path -Path $FileCheck) {"TRUE"}else{"FALSE"}
        "SCCM UNINSTALLED" = <some test to see if SCCM is installed>
    }
}

$Results | ConvertTo-HTML -Property HOSTNAME,'FILES REPLACED','SCCM UNINSTALLED' | Set-Content C:\Temp\Test.htm

显然你需要在那里做一些编辑,但这应该会给你一些建立的东西。