0

私はPowerShellに少し慣れていないので、作成しているスクリプトの出力を適切にフォーマットするのに問題があります。

スニペットの最初の行は、フォーマットしようとしているオブジェクトの配列を返します(プリンターのイベントログのイベントID 372)。2行目は、位置3のオブジェクトに必要なプロパティを出力します。

$error_372 = Get-WinEvent -LogName 'Microsoft-Windows-PrintService/Admin'| ? {$_.Id -eq '372'}
$error_372[3].Properties[0,1,2,4]

上記の出力は次を返します。

Value                                                     
-----                                                     
Print Document                                            
Ahmet                                                     
Canon MP560 series Printer                                
131072

すべてのオブジェクトを次のような形式で返す必要があります。

Document Name        User Name        Printer Name        Document Size 
-------------        ---------        ------------        -------------
Print Document        Ahmet           Canon MP560...      131072
 yada yada            yada             yada                yada

最終的には、これをCSVで必要としますが、画面に正しく印刷することから始めようと考えました。

4

4 に答える 4

1

(複数の Add-Member 呼び出しの代わりに) New-Object コマンドレットを使用することもできます。

Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PrintService/Admin'; Id=372} | Foreach-Object{

    New-Object PSObject -Property @{
        DocumentName = $_.Properties[0].Value
        UserName = $_.Properties[1].Value       
        PrinterName = $_.Properties[2].Value
        DocumentSize = $_.Properties[4].Value
    }

}
于 2012-12-16T07:12:53.483 に答える
1

必要なオブジェクトは次のように構築できます。

$error_372 | % { 
    $out =  new-object psobject;
    $out | add-member -Type noteproperty -Name "Document Name" -Value $_.Properties[0];
    $out | add-member -Type noteproperty -Name "User Name" -Value $_.Properties[1]
    $out | add-member -Type noteproperty -Name "Printer Name e" -Value $_.Properties[2]
    $out | add-member -Type noteproperty -Name "Document Size" -Value $_.Properties[4] -PassThru 
}

パイプラインに構築されたオブジェクトを返す-PassThru最後の行に注意してください。Add-Member

于 2012-12-15T19:31:56.387 に答える
1

これを試して:

$error_372 | % { 
    $out =  new-object psobject;
    $out | add-member -Type noteproperty -Name "Document Name" -Value ($_.Properties[0] | select -expa value)
    $out | add-member -Type noteproperty -Name "User Name" -Value ($_.Properties[1] | select -expa value)
    $out | add-member -Type noteproperty -Name "Printer Name e" -Value ($_.Properties[2]| select -expa value)
    $out | add-member -Type noteproperty -Name "Document Size" -Value ($_.Properties[4] | select -expa value) -PassThru 
}

またはそれ以上:

$error_372 | % { 
    $out =  new-object psobject;
    $out | add-member -Type noteproperty -Name "Document Name" -Value ($_.Properties[0].value)
    $out | add-member -Type noteproperty -Name "User Name" -Value ($_.Properties[1].value)
    $out | add-member -Type noteproperty -Name "Printer Name e" -Value ($_.Properties[2].value)
    $out | add-member -Type noteproperty -Name "Document Size" -Value ($_.Properties[4].value) -PassThru 
}
于 2012-12-15T20:10:49.090 に答える
-1

各イベントに必要なプロパティ (ドキュメント名、ユーザー名など) を持つカスタム PSobject を作成できます。event-objects の値をプロパティに入力します。それらを配列にまとめてcsvにエクスポートします。カスタムオブジェクトの作成については、こちらで説明しています

$array = @()

$error_372 | % { 
$out =  new-object psobject;
$out | add-member -NotePropertyName "Document Name" -NotePropertyValue ($_.Properties[0].value)
$out | add-member -NotePropertyName "User Name" -NotePropertyValue ($_.Properties[1].value)
$out | add-member -NotePropertyName "Printer Name" -NotePropertyValue ($_.Properties[2].value)
$out | add-member -NotePropertyName "Document Size" -NotePropertyValue ($_.Properties[4].value)
$array += $out
}

$array | export-csv -path events.csv

編集:-Noteproperty...パラメータには PS3.0 が必要なようです。

于 2012-12-15T19:21:07.757 に答える