none
Treiber auflisten

    Frage

  • Hallo, ich habe 15 Treiber von Kaspersky, die ich gern mit einer Abfrage auflisten wollte. Dies scheiterte leider daran, dass ich in der WMI-Klasse win32_SystemDriver keine DriverProviderName als Eigenschaft habe wie z.B. bei win32_PnPSignedDriver. Schade!

    Also habe ich geschaut, wo Kaspersky enthalten ist. Description!

    Leider werden aber nicht alle Treiber von Kaspersky mit dieser Information gefüllt. 5 Treiber fehlen also in meiner Übersicht, siehe Codeblock.

    Meine Lösung: Ich bau die per Einzelabfrage mit ein. Nur wie bekomme ich die allesamt in eine Ausgabe?

    $Treiber_Kaspersky = GWMI win32_systemdriver | ? {$_.description -like "*Kaspersky*"} | fl * > C:\temp\Treiber_Kaspersky.log
    $Treiber_Kaspersky_kneps = GWMI win32_systemdriver | ? {$_.PathName -like "*C:\Windows\system32\DRIVERS\kneps.sys*"} | fl *
    $Treiber_Kaspersky_klwtp = GWMI win32_systemdriver | ? {$_.PathName -like "*C:\Windows\system32\DRIVERS\klwtp.sys*"} | fl *
    $Treiber_Kaspersky_klwfp = GWMI win32_systemdriver | ? {$_.PathName -like "*C:\Windows\system32\DRIVERS\klwfp.sys*"} | fl *
    $Treiber_Kaspersky_lfdedmp = GWMI win32_systemdriver | ? {$_.PathName -like "*C:\Windows\system32\DRIVERS\lfdedmp.sys*"} | fl *
    $Treiber_Kaspersky_klelam = GWMI win32_systemdriver | ? {$_.PathName -like "*C:\Windows\system32\DRIVERS\klelam.sys*"} | fl *

    Ich wollte diese Variablen mittels += addieren. Dies läuft aber insofern schief, dass nur der letzte Eintrag erhalten bleibt. Bei Get-MessageTrackingLog hingegen hat das immer hervorragend funktioniert...

    Was kann ich unternehmen, um die Liste vollständig zu haben? Hintergrund ist, dass ich diese dann gerne im KSC (Administratiosnserver der Business Security Reihe) als Externes Werkzeug einbauen möchte, siehe Forum ID 224921

    Danke schön!

    Donnerstag, 13. April 2017 15:54

Antworten

  • Format cmdlets wie Format-List (fl *) gehören prinzipiell ans allerletzte Ende der Pipeline. Sie brechen die Pipeline auf und machen aus guten informativen Objekten dumme unflexible Strings.  Die kann man auch nicht mehr ohne größeren Aufwand vernünftig weiterverarbeiten.

    Mit dem Get-WMIObject cmdlet sammelst Du die Daten ein - es ist effektiver, das nicht 6 mal zu machen, sondern nur einmal.

     und mit den einmal gesammelten Daten weiterzuarbeiten. Am Ende speicherst Du das ganze in einer Variable und kannst dann mit den Daten in der Variable machen, was Du brauchst - ohne die Daten immer und immer wieder neu erzeugen zu müssen.

    Falls das Ergebnis noch nicht zufriedenstellend ist, kannst Du mit den -or Verkettungen noch ein bissl spielen und vielleicht an einer Stelle gegen ein -and oder -not austauschen.

    Sieht zwar nicht wirklich schön aus, aber sollte funktionieren: (ich kann's leider bei mir nicht testen - 'hab keine Kasperski-Treiber)

    Get-WmiObject -Class win32_systemdriver | 
        Where-Object {
            $_.description -like "*Kaspersky*" -or $_.PathName -like "*DRIVERS\kneps.sys*" -or $_.PathName -like "*DRIVERS\klwtp.sys*" -or $_.PathName -like "*DRIVERS\klwfp.sys*" -or $_.PathName -like "*DRIVERS\lfdedmp.sys*" -or $_.PathName -like "*DRIVERS\klelam.sys*"
        } -OutVariable KasperskiDriver
    $KasperskiDriver | Format-List *
    $KasperskiDriver | Export-CSV -Path C:\sample\Treiber_Kaspersky.csv -Encoding UTF8 -Delimiter ';' -NoTypeInformation 
    

    Die Ausgabe der Daten hab ich jetzt mal in eine CSV-Datei geleitet.  Das erschien mir bei der Art der Daten sinnvoller als nur Test oder Log.

    Um die Ausgabe in der Konsole ein wenig übersichtlicher zu gestallten, kannst Du Dir ein paar aussagekräftige Properties rauspicken und nur die anzeigen ... am besten dann auch gleich als Tabelle .... sieht besser aus, glaub ich. Also z.B. so:

    $KasperskiDriver | Format-Table -AutoSize Name,Status,DisplayName,PathName

    Und noch ein Tipp zum Schluss. Es erleichtert uns und Dir selbst auch das Leben, wenn Du hier im Forum und auch in Scripten, keine Aliasse benutzt. Der Code lässt sich so viel leichter lesen und verstehen. Dann fallen meistens auch Fehler schneller auf.

    Viel Spaß, Frohe Ostern und einen fleißigen Osterhasen!  ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 13. April 2017 19:50

Alle Antworten

  • Format cmdlets wie Format-List (fl *) gehören prinzipiell ans allerletzte Ende der Pipeline. Sie brechen die Pipeline auf und machen aus guten informativen Objekten dumme unflexible Strings.  Die kann man auch nicht mehr ohne größeren Aufwand vernünftig weiterverarbeiten.

    Mit dem Get-WMIObject cmdlet sammelst Du die Daten ein - es ist effektiver, das nicht 6 mal zu machen, sondern nur einmal.

     und mit den einmal gesammelten Daten weiterzuarbeiten. Am Ende speicherst Du das ganze in einer Variable und kannst dann mit den Daten in der Variable machen, was Du brauchst - ohne die Daten immer und immer wieder neu erzeugen zu müssen.

    Falls das Ergebnis noch nicht zufriedenstellend ist, kannst Du mit den -or Verkettungen noch ein bissl spielen und vielleicht an einer Stelle gegen ein -and oder -not austauschen.

    Sieht zwar nicht wirklich schön aus, aber sollte funktionieren: (ich kann's leider bei mir nicht testen - 'hab keine Kasperski-Treiber)

    Get-WmiObject -Class win32_systemdriver | 
        Where-Object {
            $_.description -like "*Kaspersky*" -or $_.PathName -like "*DRIVERS\kneps.sys*" -or $_.PathName -like "*DRIVERS\klwtp.sys*" -or $_.PathName -like "*DRIVERS\klwfp.sys*" -or $_.PathName -like "*DRIVERS\lfdedmp.sys*" -or $_.PathName -like "*DRIVERS\klelam.sys*"
        } -OutVariable KasperskiDriver
    $KasperskiDriver | Format-List *
    $KasperskiDriver | Export-CSV -Path C:\sample\Treiber_Kaspersky.csv -Encoding UTF8 -Delimiter ';' -NoTypeInformation 
    

    Die Ausgabe der Daten hab ich jetzt mal in eine CSV-Datei geleitet.  Das erschien mir bei der Art der Daten sinnvoller als nur Test oder Log.

    Um die Ausgabe in der Konsole ein wenig übersichtlicher zu gestallten, kannst Du Dir ein paar aussagekräftige Properties rauspicken und nur die anzeigen ... am besten dann auch gleich als Tabelle .... sieht besser aus, glaub ich. Also z.B. so:

    $KasperskiDriver | Format-Table -AutoSize Name,Status,DisplayName,PathName

    Und noch ein Tipp zum Schluss. Es erleichtert uns und Dir selbst auch das Leben, wenn Du hier im Forum und auch in Scripten, keine Aliasse benutzt. Der Code lässt sich so viel leichter lesen und verstehen. Dann fallen meistens auch Fehler schneller auf.

    Viel Spaß, Frohe Ostern und einen fleißigen Osterhasen!  ;-)


    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Donnerstag, 13. April 2017 19:50
  • Hey super, Danke schön! 
    Sonntag, 28. Mai 2017 19:03
  • Guten Morgen,

    das Thema gilt zwar schon als gelöst aber ich gebe trotzdem mal meinen Senf mit dazu ;)

    Hat das einen besonderen Grund warum du das über WMI Machen willst? Alternativ würde ich folgende Zeile vorschlagen die müsste genauso funktionieren.

    Get-WindowsDriver -All -Online | Where-Object {$PSItem.ProviderName -eq "Kaspersky"}

    Und hier hättest du die Möglichkeit nach dem ProviderName zu filtern. Ich habe nur nirgends Kaspersky installiert zum testen. Aber Performance Technisch dürfte es keinen Unterschied machen, aber weniger Code zum lesen.

    Montag, 29. Mai 2017 08:20
  • Irre ich mich, oder kannst Du mit Get-WindowsDriver nur die Treiber ermitteln, die im Windows-Image enthalten sind? Nachträglich installierte Treiber bekommst Du dann eben nur über WMI oder CIM angezeigt, oder?

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''

    Montag, 29. Mai 2017 09:58
  • Hi,

    deswegen der Schalter -Online damit sich auf das im Moment laufende System bezogen wird. Ich habe es gerade nochmal bei mir bei einem System getestet und bekomme alle Treiber des installierten Systems.

    Montag, 29. Mai 2017 12:34
  • Ich bin trotzdem immernoch skeptisch, ob dadurch ein annähernd gleicher Informationsgehalt erreicht wird. Bei der Abfrage mit Get-WindowsDriver werden Treiberdateien aufgelistet und bei der Abfrage über WMI/CIM werden Gerätetreiber nach Geräten oder Geräteklassen aufgelistet. Wenn ich beide Abfragen auf meinem Client laufen lassen erhalte ich einmal über 700 und einmal ca 350. Es kann also nicht wirklich das gleiche sein, was man nur auf verschiedenen Wegen ermittelt. Aber das kann der OP ja dann selbst entscheiden.  ;-)

    Grüße - Best regards

    PS:> (79,108,97,102|%{[char]$_})-join''


    • Bearbeitet BOfH_666 Montag, 29. Mai 2017 13:47
    Montag, 29. Mai 2017 13:41