私のforeachループをcsvファイルまたはexcelファイルに出力する方法を教えてください。このスクリプトは、ローカルネットワークからすべてのコンピュータを取得し、そのコンピュータに特定のKBパッチがあるかどうかを確認するためにテストします。スクリプトは、私がcsvファイルに出力しようとするのに役立つと言ったように動作します。任意のヒント/ヘルプは、これはきれいに、私は通常、カスタムオブジェクトを使用するためにはcsvファイルにforeachループを入れる
$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);
}
}}
}
テンプレートは不要ですが、ForEachループの各パスで新しいカスタムオブジェクトを作成するだけで済みます。 '$ records + ='行に変数を '[array] $ records'として強く入力し、事前にインスタンス化することは避けてください。 '+ ='を使うたびに配列がどのように破壊され、再構築されるかによって、 '[array] $ Records = ForEach(){'を実行し、配列を再構築するのではなくループ出力オブジェクトをまとめて収集する方がよい何度も。 – TheMadTechnician