web-dev-qa-db-ja.com

プリンター監視スクリプト(PowerShell)

Windows Server 2003のイベントビューアですべての印刷ジョブを確認するためのスクリプトを作成し、printername_floor_room.txtなどのカンマ区切りのテキストファイルに書き込みます。

これをリアルタイムで実行し、イベントビューアを常にチェックするのが最善の方法だと思います。注意が必要な注意事項はありますか?

ありがとう

EDIT:わかりました。おそらく、PowerShellを使用して、Get-EventLogを使用してから、「テーブル」データを編集します。私が抱えている問題:このすべてのデータをテキストファイルに保存する場合、データをテキストファイルから取得するにはどうすればよいですか?使用できるコンマ区切りファイルですが、これはよくわかりません。そしてそれが整理された後、私はまだファイルを多かれ少なかれリアルタイムで更新し続ける方法がわかりません。すべてのリソースを占有することなく、このサービスのようなものにすることはできますか?たとえば、x秒ごとに実行しますか?

編集2:そこで、ローカルPCでWMIツールを使用して(つまり、GUIを介して)イベントフィルターとコンシューマーを追加し、印刷ジョブを適切にログに記録できるようにしました。イベントにリンクされているスクリプトに問題がありますが、イベントがキャッチされたようです。週末に休ませて、オフィスに戻ると、wbemess.logファイルに次のような大量のイベントがあります。

(Fri Apr 30 16:39:00 2010.112476500):ポーリングクエリselect * fromWin32_PrintJobがエラーコード80041033で失敗しました。次のポーリング間隔で再試行します

または

(Mon May 03 09:25:23 2010.1380562):NTイベントログコンシューマー:sidを取得できませんでした、0x80041002

また、wmiprvse.exeによるCPU使用率の急上昇にも気づいています。少し調べてみると、WMIをレジストリに再インストールすることで問題を解決している人を見つけました。これがこれをトラブルシューティングする唯一の方法であるかどうか疑問に思います。これを実装するときに、本番プリントサーバーでこれが発生することを本当に望んでいません...

3
HannesFostie

おそらく、UNIX管理者のようにログを調べて、プリンタの状態を最新の状態にしようとは思わないでしょう。代わりに、プリンタイベントの通知を受け取る方法があればいいのではないでしょうか。良いニュースは、ウィンドウズにあるということです。私は最初にこの記事を読みました: WMIで通知 。次に、 Windows PowerShell 2.0 CTP2 WMIイベント監視 を見てください。

この単純なPowerShellスクリプトをテストしました。

$query = "Select * From __InstanceCreationEvent within .1 Where TargetInstance ISA 'Win32_printjob'"
$action = write-Host "Printed Document status" (gwmi win32_printjob).status ", time" (gwmi win32_printjob).timesubmitted
register-wmievent -query $query -action $action -sourceidentifier "printerwatcher"

何かを印刷すると、出力行が表示されます。

1
Jim B

Powershellにはこれに適したフックがいくつかありますが、Server 2003 I believeではローカル収集のみに制限されています。また、リアルタイムではなくバッチモードです。それがあなたにとって重要かどうかはわかりません。 Server 2008には、リアルタイム監視用の優れたフックがあります。

0
sysadmin1138