我坚持如何将我的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);
}
}}
}
答案 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循环完成之后,您将拥有一个充满对不存在的对象的引用的数组。