我很难创建一个包含多列的表。将使用各种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)的内容。我目前设置它的方式是,当我需要新列中的标题时,它会创建新行。
答案 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
显然你需要在那里做一些编辑,但这应该会给你一些建立的东西。