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-ID: 597001

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

Ausgedruckt am: 04.11.2024 um 22:11 Uhr

145033
Lösung 145033 17.08.2020 aktualisiert um 14:01:24 Uhr
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?!
cosmo87
cosmo87 17.08.2020, aktualisiert am 18.08.2020 um 09:30:36 Uhr
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.
145033
145033 17.08.2020 aktualisiert um 14:08:29 Uhr
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.
cosmo87
cosmo87 17.08.2020, aktualisiert am 18.08.2020 um 09:31:26 Uhr
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?
145033
145033 17.08.2020, aktualisiert am 18.08.2020 um 13:56:42 Uhr
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.
aqui
aqui 17.08.2020 um 15:20:11 Uhr
Goto Top
...von den Rechtschreibfehlern mal ganz abgesehen.
Das VPN Problem hat sich erledigt ? Wenn nein, kannst du den Drucker via VPN pingen ?
cosmo87
Lösung cosmo87 18.08.2020 um 13:44:30 Uhr
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...
cosmo87
cosmo87 18.08.2020 um 13:45:46 Uhr
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.
145033
145033 18.08.2020 aktualisiert um 13:56:16 Uhr
Goto Top
Stichwort [ordered] face-wink, siehe mein Skript oben.
cosmo87
cosmo87 19.08.2020 um 12:22:25 Uhr
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 :/
aqui
aqui 19.08.2020 um 12:35:28 Uhr
Goto Top
IceAge
IceAge 01.04.2021 aktualisiert um 14:44:14 Uhr
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.
aqui
aqui 01.04.2021 aktualisiert um 12:55:08 Uhr
Goto Top
Da muss dann wohl mal unser hiesiger Power Shell Guru @colinardo ran ! 😉
cosmo87
cosmo87 14.12.2021 aktualisiert um 19:06:34 Uhr
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.
aqui
aqui 14.12.2021 aktualisiert um 14:26:16 Uhr
Goto Top
Du hast für dein hilfreiches Script die Code Tags leider falsch gesetzt !! face-sad
Ein "/" korrigiert das aber schnell !!
Formatierungen in den Beiträgen