web-dev-qa-db-ja.com

SNMP \ Scriptを介してWindowsプリントサーバー上のプリンタのIPを取得します

SNMP経由でプリンターの状態(トナーレベル、エラーなど)を監視するためのicingaサーバーをセットアップしています。すべてのプリンタには、共有Windowsプリントサーバーを介してアクセスできます(プリンタは\ SERVER\Printer_Shareを介してクライアントマシンに追加されます)。 SNMPを介してIPで直接プリンターにクエリを実行することはできますが、名前については何もわかりません。 LinuxからWindowsプリントサーバーにクエリを実行して、次のような出力を生成することはできますか?

Shared Printer 1 -> IP_1
Shared Printer 2 -> IP_2
Shared Printer 3 -> IP_3
Shared Printer 4 -> IP_4

この情報を使用して、icinga構成ファイルを作成するスクリプトを作成できます。何百ものプリンターがあるので、私はこれを手動で行っていません。私は誰かに私のためにスクリプトを書くように頼んでいるのではなく、むしろ私を正しい方向に向けています。

1
windowslinux

あなたのオプション:

1.レジストリデータを評価する

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Printersのサブキーを照会して、プリンターのリストを取得します
  • port値をHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\Standard TCP/IP Port\Portsと照合します
  • 一致するキー内のHostName値とIPAddress値を評価します

2.Powershellを使用する

  • 1.と似ていますが、 Get-Printer および Get-PrinterPort コマンドレットを使用して、明確に定義されたインターフェイスを介してそれぞれのデータを取得します(使用する必要があります) CMDletを実行するためのWindows8.1またはServer2012ホストですが、それらを実行しているプリントサーバーは古いバージョンである可能性があります)

3.WMIを使用する

  • 1.および2と同様ですが、WMI Win32_Printer クラスを使用してプリンターのリストを取得し、 Win32_TCPIPPrinterPort クラスを使用してHostAddressを取得します。選択したWMIクエリ対応言語の値(例: VBScript

プリンタがStandard TCP/IP Portの代わりにベンダー固有のものを使用している場合、これを行うための統一された方法はないことに注意してください。この情報がHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\Monitors\<yourporttype>レジストリサブキーのどこかに埋め込まれている可能性がありますが、すべてを理解する必要があります。

理論的にはRPCを使用してLinuxステーションからデータをリモート処理できますが、NRPEにデータを転送させる方がおそらく良いでしょう( 外部スクリプトを使用するNSClient ++ を参照してください)。

3
the-wabbit