cosmo87
Goto Top

SNMP Abfrage in Datei schreiben mit Powershell

Hallo liebe Community,

ich versuche gerade per SNMP den Tonerstand abzufragen:

Get-SnmpData -IP $druckerip -Community public -OID 1.3.6.1.2.1.43.11.1.1.9.1.1 | select Data

hier wird mir folgendes ausgegeben:
Data
----
49  

Wie kann ich jetzt z.B. nur den Wert (hier 49) ausgeben und in eine Excel-Liste speichern?


Gruß

EDIT: Ich stelle gerade fest dass ich meinen Drucker lokal mit dem SNMP ansprechen und auslesen kann, jedoch keinen drucker der sich im VPN befindet. Weis hier jemand rat?

Content-Key: 597001

Url: https://administrator.de/contentid/597001

Printed on: May 3, 2024 at 13:05 o'clock

Mitglied: 145033
Solution 145033 Aug 17, 2020 updated at 12:01:24 (UTC)
Goto Top
Get-SnmpData -IP $druckerip -Community public -OID 1.3.6.1.2.1.43.11.1.1.9.1.1 | select -Expand Data
Oder
(Get-SnmpData -IP $druckerip -Community public -OID 1.3.6.1.2.1.43.11.1.1.9.1.1).Data
Oder gleich als CSV Export
Get-SnmpData -IP $druckerip -Community public -OID 1.3.6.1.2.1.43.11.1.1.9.1.1 | export-csv .\datei.csv -Delimiter ";" -NoType  

EDIT: ich stelle gerade fest dass ich mein Drucker lokal mit dem SNMP ansprechen und auslesen kann, jedoch keinen drucker der sich im VPN befindet. Weis hier jemand rat?
  • Firewall des VPN GWs lässt keinen SNMP Traffic durch?
  • Drucker lässt SNMP-Anfragen nur aus dem selben Subnet zu?
  • Routing fehlerhaft?
  • ...
Btw. "VPN" kann viel heißen, die Aussage ist wie wenn du zum Autohändler gehst und sagst: "Meine Hupe macht statt "tut", nur "tät""!

Btw2: Der Titel hat irgendwie gar nichts mit der Frage zu tun?!
Member: cosmo87
cosmo87 Aug 17, 2020, updated at Aug 18, 2020 at 07:30:36 (UTC)
Goto Top
Super vielen Dank.
Das bringt mich schonmal etwas weiter.

Hier sieht es gut für mich aus:
Get-SnmpData -IP $druckerip -Community public -OID 1.3.6.1.2.1.43.11.1.1.9.1.1 | select -Expand Data
Hier bekomme ich nur den Wert.
Kann man die nächsten 3 Werte dann in einer Spalte angeben?
Da ja ein Drucker 3 Farben und 1 Schwarz hat, würde es sich anbieten (bei 42 Druckern) jeden Drucker in eine neue Zeile und jede Farbe in die jeweilige Spalte.

Zitat:
"Btw2: Der Titel hat irgendwie gar nichts mit der Frage zu tun?!"
Entschuldigung. Ich habe mich hier wohl falsch formuliert.
Mitglied: 145033
145033 Aug 17, 2020 updated at 12:08:29 (UTC)
Goto Top
$printers = 'IP1','IP2','IP3'  
$printers | %{
    Get-SnmpData -IP $_ -Community public -OID 'OID1','OID2','OID3'  
} | export-csv .\printerdata.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  
Entschuldigung. Ich habe mich hier wohl falsch formuliert
Dann bitte auch nachträglich noch anpassen.
Member: cosmo87
cosmo87 Aug 17, 2020, updated at Aug 18, 2020 at 07:31:26 (UTC)
Goto Top
Ich hoffe der Titel passt so nun besser. Mehr Änderungen wurden nicht zugelassen.

Mit dem oberen Code bekomme ich es wieder untereinander:
"OID";"Data"  
".1.3.6.1.2.1.43.11.1.1.9.1.1";"49"  
".1.3.6.1.2.1.43.11.1.1.9.1.2";"44"  
".1.3.6.1.2.1.43.11.1.1.9.1.3";"48"  
".1.3.6.1.2.1.43.11.1.1.9.1.4";"10"  

Wenn ich
select -Expand Data
mache bekomme ich die auch untereinander angezeigt.
Kann man beim Export nicht angeben dass er jeden neuen Wert in eine eigene Spalte setzt?
Mitglied: 145033
145033 Aug 17, 2020, updated at Aug 18, 2020 at 11:56:42 (UTC)
Goto Top
Hab das hier jetzt hier nicht vorliegen aber das geht auch
$printers = 'IP1','IP2','IP3'  
$OIDs = [ordered]@{
    '1.3.6.1.2.1.43.11.1.1.9.1.1' = 'TONERLEVEL_BLACK'  
    '1.3.6.1.2.1.43.11.1.1.9.1.2' = 'TONERLEVEL_CYAN'  
    '1.3.6.1.2.1.43.11.1.1.9.1.3' = 'TONERLEVEL_MAGENTA'  
    '1.3.6.1.2.1.43.11.1.1.9.1.4' = 'TONERLEVEL_YELLOW'  
}
$printers | %{
    $obj = [ordered]@{Printer=$_}
    Get-SnmpData -IP $_ -Community public -OID $OIDs.Keys | %{
        $obj.($OIDs.($_.OID)) = $_.Data
    }
    [pscustomobject]$obj
} | export-csv .\printerdata.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  

Ich hoffe der Titel passt so nun besser.
Nö, passt überhaupt nich, du willst ja keine Datei auslesen sondern SNMP-Daten extrahieren und wegschreiben.
Member: aqui
aqui Aug 17, 2020 at 13:20:11 (UTC)
Goto Top
...von den Rechtschreibfehlern mal ganz abgesehen.
Das VPN Problem hat sich erledigt ? Wenn nein, kannst du den Drucker via VPN pingen ?
Member: cosmo87
Solution cosmo87 Aug 18, 2020 at 11:44:30 (UTC)
Goto Top
Vielen Dank für eure Mühen.

Ich habe es nun wie folgt gelöst:
$csvlist =@()
$druckerip = @("IP1","IP2")  

foreach ($IP in $druckerip) {
        $newrow = New-Object PsObject -property  @{ 
            'IP' = $IP  
            'Schwarz' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.1'} | select Data -Expand Data  
            'Rot' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.2'} | select Data -Expand Data  
            'Blau' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.3'} | select Data -Expand Data  
            'Gelb' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.4'} | select Data -Expand Data  
        }
       
        $csvlist += $newrow
}

$csvlist | Export-Csv .\toner_$(Get-Date -Format yyyy-MM-dd).csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  

Das einzigste was noch fehlt ist die passende sortierung der Spalten.
"Gelb";"Blau";"IP";"Schwarz";"Rot"  
"100";"24";"172.16.22.73";"93";"28"  
"9";"48";"172.16.3.22";"49";"44"  

Es sollte eigentlich bei IP;Schwarz;Rot;Blau;Gelb bleiben. Mit -sort bekomme ich nur eine sortierung der zeilen

Zitat von @145033:
Ich hoffe der Titel passt so nun besser.
Nö, passt überhaupt nich, du willst ja keine Datei auslesen sondern SNMP-Daten extrahieren und wegschreiben.
Besser bekomme ich jetzt nicht hin da mir das Bearbeiten bei zu großer Änderung verweigert wird...
Member: cosmo87
cosmo87 Aug 18, 2020 at 11:45:46 (UTC)
Goto Top
Zitat von @aqui:

...von den Rechtschreibfehlern mal ganz abgesehen.
Das VPN Problem hat sich erledigt ? Wenn nein, kannst du den Drucker via VPN pingen ?
Wegen der Groß- und Kleinschreibung?

VPN Problem hat sich erledigt. der SNMP-Port war zu.
Mitglied: 145033
145033 Aug 18, 2020 updated at 11:56:16 (UTC)
Goto Top
Stichwort [ordered] face-wink, siehe mein Skript oben.
Member: cosmo87
cosmo87 Aug 19, 2020 at 10:22:25 (UTC)
Goto Top
Und an welcher Stelle kommt das hin?
 $newrow =  New-Object PsObject  -property  [ordered] @{
Das hätte ich versucht.

Ich fühle mich beim Skripten ziemlich doof :/
Member: aqui
aqui Aug 19, 2020 at 10:35:28 (UTC)
Goto Top
Member: IceAge
IceAge Apr 01, 2021 updated at 12:44:14 (UTC)
Goto Top
Hallo Zusammmen,

da der Threadersteller leider nicht mehr erreichbar ist, hänge ich mir hier mit ran. Hoffe das passt.

Das Skript vom ausgeschiedenen User (145033) läuft unter Win10 nicht. Daher habe ich versucht das von cosmo gepostete Skript bzgl. der Sortierung anzupassen. Leider bekomme ich es mit PowerShell nicht hin.

$csvlist =@()
$druckerip = @("IP1","IP2")  

foreach ($IP in $druckerip) {
        $newrow = New-Object PsObject -property  @{ 
            'IP' = $IP  
            'Schwarz' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.1'} | select Data -Expand Data  
            'Rot' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.2'} | select Data -Expand Data  
            'Blau' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.3'} | select Data -Expand Data  
            'Gelb' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.4'} | select Data -Expand Data  
        }
       
        $csvlist += $newrow
}

$csvlist | Export-Csv .\toner_$(Get-Date -Format yyyy-MM-dd).csv -Delimiter ";" -NoTypeInformation -Encoding UTF8  

Wo bzw. wie müsste ich denn nun das [ordered] setzen, damit die Ausagabe in der csv der obigen Reihenfolge (IP > Schwarz > Rot > Blau > Gelb) entspricht?

Danke und Grüße

I.

EDIT_1: Habe hier nochmal einen separaten Beitrag erstellt, weil ich befürchte dass es hier untergeht.
EDIT_2: Problem konnte im neuen Beitrag (siehe EDIT_1) gelöst werden. Vielen Dank.
Member: aqui
aqui Apr 01, 2021 updated at 10:55:08 (UTC)
Goto Top
Da muss dann wohl mal unser hiesiger Power Shell Guru @colinardo ran ! 😉
Member: cosmo87
cosmo87 Dec 14, 2021 updated at 18:06:34 (UTC)
Goto Top
Das ist mein finales Skript geworden:
#ggf. vorher installieren:
#Install-Module SNMP 
$csvlist =@()
$druckerip = @("172.16.21.13","172.16.16.14")  

foreach ($IP in $druckerip)  {
        $newrow =  New-Object PsObject -property  ([ordered] @{
            'Hostname' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.1.5.0'} | select Data -Expand Data  
            'IP' = $IP  
            'Schwarz' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.1'} | select Data -Expand Data  
            'Blau' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.2'} | select Data -Expand Data  
            'Rot' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.3'} | select Data -Expand Data  
            'Gelb' = $IP | %{Get-SnmpData -IP $_ -Community public -OID '1.3.6.1.2.1.43.11.1.1.9.1.4'} | select Data -Expand Data  
            
        })
        $csvlist += $newrow
        $i++
        $newrow | select Markt -Expand Markt  | Write-Output 
        }
$csvlist | Export-Csv "C:\Drucker\Tonerstand_$(Get-Date -Format dd-MM-yyyy--HH-mm).csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8  
  
exit 1

EDIT: Tag ausgebessert.
Member: aqui
aqui Dec 14, 2021 updated at 13:26:16 (UTC)
Goto Top
Du hast für dein hilfreiches Script die Code Tags leider falsch gesetzt !! face-sad
Ein "/" korrigiert das aber schnell !!
Formatting instructions in the posts