将foreach循环放入csv文件中

时间:2017-07-12 19:13:45

标签: powershell

我坚持如何将我的foreach循环输出到csv或excel文件中。此脚本只是让所有计算机脱离本地网络,然后测试该计算机是否具有某个KBPatch。该脚本就像我说我需要帮助尝试将其输出到csv文件。任何提示/帮助表示赞赏

以下代码

$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 = @(“patch#" , "patch#")

#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)
 {
  Write-Host “Hotfix $CheckKB is not installed on $name”;
 }
 else
 {
  Write-Host “Hotfix $CheckKB was installed on $name by ” $($HotFixQuery.InstalledBy);
 }
 }}
}

1 个答案:

答案 0 :(得分:0)

为了干净利落,我通常使用自定义对象。

在你的foreach之前,实例化一个空数组:

$records = @()

并制作一个对象模板:

$tmpRecord = [PSCustomObject]@{
  serverName = ''
  missingKB = ''
}

在foreach中,克隆记录obj:

$record = $tmpRecord.psobject.copy()

将您的数据放入记录中:

$record.serverName = $name
$record.missingKB = $CheckKb

将记录放入数组:

$records += $record

然后在foreach之后,导出到csv:

$records | export-csv yourcsv.csv

当我第一次学习这种模式时,对象模板的需求让我感到困惑。您需要这样做是因为范围的组合以及如何将对象添加到数组(通过引用)。

如果你试图在循环中声明一个对象,那么该对象将被限定为foreach循环的生命周期。然后,您将向$ records数组添加对该对象的引用。在foreach循环完成之后,您将拥有一个充满对不存在的对象的引用的数组。