我需要使用power shell脚本在三列中显示我的结果

时间:2017-07-13 19:18:33

标签: powershell

我有我当前的脚本显示结果,但是当它出现时它只是将所有内容放在一个长列中,但它们是有序的。任何想法我怎么能得到三列称为“计算机名称”“补丁#”“已安装?”。

以下是我的代码

$strCategory = "computer"
$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$ObjSearcher.SearchRoot = $objDomain
$objSearcher.filter = ("(objectCategory=$strCategory)")
$colProplist = "name"
foreach($i in $colProplist){
    $objSearcher.PropertiesToLoad.Add($i)
}
#Finds all operating systems and computer names
$colResults = $objSearcher.FindAll()

foreach($objResult in $colResults){    
    $objComputer = $objResult.Properties;
    $names = $objComputer.name

    # Define Hotfix to check
    $CheckKBS = @("KB2937610", "KB4019264")

    # Query the computers for the HotFix
    foreach($name in $names){
        foreach ($CheckKB in $CheckKBS) {
            $HotFixQuery = Get-HotFix -ComputerName $name | Where-Object {$_.HotFixId -eq $CheckKB} | Select-Object -First 1;
            if($HotFixQuery -eq $null) {
                Out-file C:\Users\xxx\Desktop\12.csv -Append -InputObject "computername: $name"
                Out-file C:\Users\xxx\Desktop\12.csv -Append -InputObject "“KB Patch: $CheckKB"
                Out-file C:\Users\xxx\Desktop\12.csv -Append -InputObject "Hotfix $CheckKB is not installed on $name"
            } else  {
                Out-file C:\xxx\xxx\xxx\12.csv -Append -InputObject "computername: $name"
                Out-file C:\xxx\xxx\xxx\12.csv -Append -InputObject "KB Patch; $CheckKB"
                Out-file C:\xxx\xxx\xxx\12.csv -Append -InputObject "Hotfix $CheckKB was installed on $name by $($HotFixQuery.InstalledBy)"
            } 
        } 
    }
}

1 个答案:

答案 0 :(得分:2)

您正在将原始文本输出到CSV中,但是您必须保持预期的目标格式。

out-file将输出原始文本,每行一个。这就是您的调用创建单个列的原因。您可以更改代码以将输出折叠为由逗号分隔的1行:

index.js

这会将1个原始行写入您的CSV文件。假设CSV文件的其余部分完好无损,您的字段将被视为列。

我怀疑你想在每行重复你的标题,但想要告诉你它的样子。现在,您将要在开始循环之前编写CSV文件的初始行以输出标题:

Out-file C:\Users\xx\Desktop\12.csv -Append -InputObject  “computer name: $name,KB Patch: $CheckKB,Hotfix $CheckKB is not installed on $name”

然后从循环中写入的行中删除标题内容。这意味着每次运行都会写入标题,因此您要么在开始时要擦除文件,要么在编写标题之前测试它是否存在。

有更好的方法可以做到这一点,但这并不要求您对工作进行重大更改。我会为每条记录创建一个自定义对象,创建这些对象的集合,然后通过export-csv导出它们。如果这样可以更好地满足您的需求,请仅对其请求发表评论。