none
Powershell nicht genutzte Druckerqueue bzw. Sharename auffinden. RRS feed

  • Frage

  • Hallo.

    Ich habe ca. 40 Drucker aber 145 Druckerqueue ( Hochformat, Duplex,Schacht u.s.w)

    Mein Ziel: Aufräumen

    Mein Lösungsansatz:

    # alle Printer ermitteln

     "$allprinters=Get-WMIObject -Class Win32_Printer |select sharename"

    #..und ermitteln welche Queues z.B 14 Tage nicht mehr genutzt wurden (Event-Log)

    $Results = Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307;}

    Wie baue ich das jetzt zusammen ?

    Donnerstag, 20. September 2018 09:36

Antworten

  • Hab selber hinbekommen.Compare-Objekt ( Alias diff) war die Lösung.

    # Schritt1 alle Drucker vom Printserver ermitteln
    
    get-wmiobject win32_printer | select name |export-csv c:\temp\MPallPrinters.csv
    
    #Schritt2 Evendlog der letzten 30 Tage welcher Drucker gedruckt hat
    
    Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime=(Get-Date).AddDays(-30)} |
    select -Property TimeCreated, @{label='PrinterName';expression={$_.properties[4].value}}|select printername|export-Csv -Encoding Unicode -Force -NoClobber -NoTypeInformation c:\temp\last30days.csv
    
    
    
    #Schritt3  doppelte werte aus eventlog entfernen und Ergebnis anzeigen
    
    $temp = get-content c:\temp\last30days.csv | sort -unique 
    $temp | out-file c:\temp\307_noDub.csv
    
    $strReference = Get-Content "C:\Temp\MPallPrinters.csv"
    $strDifference = Get-Content "C:\Temp\307_noDub.csv"
    Diff $strReference $strDifference -IncludeEqual |
    Format-Table InputObject, SideIndicator -AutoSize
    
    # = bedeudet in beiden dateien ( nicht von Interesse)
    # -> bedeudet in beiden dateien ( nicht von Interesse)
    # <- bedeutet nur in Drucker Datei also nicht im Evendlog heißt Drucker wird nicht benutzt




    Dienstag, 25. September 2018 12:46

Alle Antworten

  • Moin,

    bitte verwende die Code-Formatierung, wenn Du Code postest. Das macht den Code leserlich.

    Ansonsten würde ich mir halt durch die Filterung die Ereignisse der letzten 14 Tage rausziehen und schauen, welche der Queue-Namen im Message-Attribut NICHT vorkommen. Das sind die gesuchten ungenutzten Queues.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Donnerstag, 20. September 2018 09:55
  • Moin,

    Danke für den Hinweis mit dem Code. Es sind nur bei mir 145 Queues insgesamt auf dem Printserver 750 . Habe jetzt nicht verstanden wie ich das umsetzten soll. Ich brauche als "Code" :-) .Wollte keine Exceltabelle vergeleichen oder so ähnlich.

    Danke und Gruß

    Freitag, 21. September 2018 06:05
  • Ja, ich meinte ja auch das, was Dein Skript machen muss. Fertige Skripte auf Bestellung und fertige Pizza auf Bestellung haben eins gemeinsam ;-)

    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> https://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com


    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 21. September 2018 07:41
  • Am 20.09.2018 schrieb MarkBrandenburg:

    Ich habe ca. 40 Drucker aber 145 Druckerqueue ( Hochformat, Duplex,Schacht u.s.w)

    Mein Ziel: Aufräumen

    Mein Lösungsansatz:

    # alle Printer ermitteln

     "$allprinters=Get-WMIObject -Class Win32_Printer |select sharename"

    #..und ermitteln welche Queues z.B 14 Tage nicht mehr genutzt wurden (Event-Log)

    $Results = Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307;}

    Hier hat schon mal jemand etwas ähnliches gebaut:

    https://gallery.technet.microsoft.com/scriptcenter/Script-to-generate-print-84bdcf69

    Grundsätzlich ist die Technet Script Gallery immer eine gute
    Anlaufstelle:
    https://gallery.technet.microsoft.com/scriptcenter/site/search?f%5B0%5D.Type=RootCategory&f%5B0%5D.Value=printing&f%5B0%5D.Text=Drucken&f%5B1%5D.Type=SubCategory&f%5B1%5D.Value=jobs&f%5B1%5D.Text=Druckserver%2C%20Druckerwarteschlangen%20und%20Druckauftr%C3%A4ge&pageIndex=1

    Servus
    Winfried


    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/
    HowTos zum WSUS Package Publisher http://www.wsus.de/wpp
    GPO's: http://www.gruppenrichtlinien.de
    NNTP-Bridge für MS-Foren: http://communitybridge.codeplex.com/
    GP-PACK - PRIVACY AND TELEMETRIE: http://www.gp-pack.com/

    Freitag, 21. September 2018 14:30
  • Hab selber hinbekommen.Compare-Objekt ( Alias diff) war die Lösung.

    # Schritt1 alle Drucker vom Printserver ermitteln
    
    get-wmiobject win32_printer | select name |export-csv c:\temp\MPallPrinters.csv
    
    #Schritt2 Evendlog der letzten 30 Tage welcher Drucker gedruckt hat
    
    Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime=(Get-Date).AddDays(-30)} |
    select -Property TimeCreated, @{label='PrinterName';expression={$_.properties[4].value}}|select printername|export-Csv -Encoding Unicode -Force -NoClobber -NoTypeInformation c:\temp\last30days.csv
    
    
    
    #Schritt3  doppelte werte aus eventlog entfernen und Ergebnis anzeigen
    
    $temp = get-content c:\temp\last30days.csv | sort -unique 
    $temp | out-file c:\temp\307_noDub.csv
    
    $strReference = Get-Content "C:\Temp\MPallPrinters.csv"
    $strDifference = Get-Content "C:\Temp\307_noDub.csv"
    Diff $strReference $strDifference -IncludeEqual |
    Format-Table InputObject, SideIndicator -AutoSize
    
    # = bedeudet in beiden dateien ( nicht von Interesse)
    # -> bedeudet in beiden dateien ( nicht von Interesse)
    # <- bedeutet nur in Drucker Datei also nicht im Evendlog heißt Drucker wird nicht benutzt




    Dienstag, 25. September 2018 12:46
  • In Skripten solltest Du "schön" schreiben und keine Pipe oder Aliase verwenden. Foreach ist meist schneller und später besser lesbar. Aber wenn schon, denn schon :-))

    $strReference = ( get-wmiobject win32_printer ).Name

    $strDifference = ( Get-WinEvent -FilterHashTable @{LogName="Microsoft-Windows-PrintService/Operational"; ID=307; StartTime=(Get-Date).AddDays(-30)} | select -Property TimeCreated, @{label='PrinterName';expression={$_.properties[4].value}} ).PrinterName | Sort -Unique Diff $strReference $strDifference -IncludeEqual | Format-Table InputObject, SideIndicator -AutoSize

    Bei $strDifference bin ich mir nicht ganz sicher, ob das so funktioniert - hab keinen Druckserver zur Hand.

    Greetings/Grüße, Martin - https://mvp.microsoft.com/en-us/PublicProfile/5000017 Mal ein gutes Buch über GPOs lesen? - http://www.amazon.de/Windows-Server-2012--8-Gruppenrichtlinien/dp/3866456956 Good or bad GPOs? My blog - http://evilgpo.blogspot.com And if IT bothers me? Coke bottle design refreshment - http://sdrv.ms/14t35cq

    Dienstag, 25. September 2018 15:11