2017-07-13 9 views
0

私は現在のスクリプト表示結果を持っていますが、それが現れたときにはすべてを1つの長いカラムに入れます。どのように私は "コンピュータ名" "パッチ#" "インストール"と呼ばれる3つの列を得ることができる任意のアイデア。以下はパワーシェルスクリプトを使用して3つのカラムに結果を表示する必要があります

あなたはOKですが、あなたが意図した宛先フォーマットを維持する必要が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 = @("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)" 
      } 
     } 
    } 
} 
+2

解決策はおそらく、データを格納し、それをcsvにエクスポートするカスタムオブジェクトを作成することです。例については、https://stackoverflow.com/questions/16690857/powershell-convertto-csv-custom-headersを参照してください。 –

答えて

2

です。

out-fileは、生のテキストを1行に1つずつ出力します。そのため、あなたの呼び出しが単一の列を作成しているのです。あなたは、カンマで区切られて1行にあなたの出力を折りたたむようにコードを変更することができます。

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

これは、あなたのCSVファイルへ1つの生の行を書き込みます。あなたのフィールドは、残りのCSVファイルが完全であると仮定して列として尊重されます。

ヘッダーを1行に繰り返すことはできませんが、どのように表示されるかはわかります。今、あなたはあなたのループが出力にヘッダを開始する前に、CSVファイルの最初の行を書きたいとしている。

Out-file C:\Users\xx\Desktop\12.csv -Append -InputObject “Computer Name,KB Patch,Hotfix” 

それからちょうどあなたのループ内に書かれた行からヘッダーのものを削除します。これは、ヘッダーが実行ごとに書き込まれるため、最初にファイルを消去したい場合や、ヘッダーを書き込む前にファイルが存在するかどうかをテストしたい場合があります。

これを行うにはより良い方法がありますが、これはあなたの仕事に大きな変更を加える必要はありません。レコードごとにカスタムオブジェクトを作成し、それらのオブジェクトのコレクションを作成し、export-csvを使用してエクスポートします。それはあなたの必要性をより良いスイートにしたい場合は、単にそれのためのリクエストをコメントしてください。

関連する問題