angeal
Goto Top

Benachrichtigung bei Druckaufträgen

Hallo Zusammen,
wir haben in unserem Unternehmen mehrere Drucker. Es handelt sich um Netzwerkdrucker welche auf einem Printserver (Win Server 2016) eingerichtet und freigegeben werden. Die Drucker werden per GPO (Einstellungen -> Systemsteuerungseinstellungen -> Drucker) an die Clients verteilt.
Auf den Clients läuft Windows 10

Ich möchte gern, das über das Benachrichtigungscenter von Windows 10 bei den Clients bei jedem Druckauftrag eine Meldung ausgegeben wird. Bisher passiert dies irgendwie nur wenn der Drucker ausgeschaltet ist oder ein Fehler vorliegt. Ich möchte aber auch eine Benachrichtigung erhalten, wenn der Druckauftrag erfolgreich an den Drucker geschickt wurde.

In den Eigenschaften vom Printserver habe ich schon die Haken für "Informative Benachrichtigungen für Netzwerkdrucker anzeigen" und "Informative Benachrichtigungen für lokale Drucker anzeigen" ausgewählt.
Weiterhin ist der Schieberegler bei den Clients bei "Druckbenachrichtigungen" aktiviert (WIN+A -> Benachrichtigungen verwalten)

Das hat alles nichts gebracht. Es werden keine Print-Notifications angezeigt.
Hat vielleicht jemand eine Idee, gibt es dafür eine extra administrative Vorlage, oder kann man da in der Registry etwas einstellen?

Content-Key: 53920882435

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

Printed on: April 27, 2024 at 11:04 o'clock

Mitglied: 11078840001
11078840001 Jan 31, 2024 updated at 10:04:56 (UTC)
Goto Top
Wieso sollte man unnötigerweise jedes mal eine Meldung wegklicken müssen, ABM Maßnahme? Aus gutem Grund wird der User nur behelligt wenn es Probleme gibt, ansonsten alles gut face-smile
Member: Angeal
Angeal Jan 31, 2024 at 10:07:28 (UTC)
Goto Top
Hintergrund ist, das in einigen Fällen der Drucker ein wenig entfernt steht und das Mitarbeiter denken sie hätten etwas gedruckt (was sie aber nicht haben, da kein Auftrag an den Drucker gegangen ist) und sie mich dann immer behelligen wieso ihr Druckauftrag nicht ausgeführt wurde.
Daher möchte ich gern diese speziellen User mit Benachrichtigungen vollspamen. face-smile
Member: MirkoKR
MirkoKR Jan 31, 2024 at 10:25:29 (UTC)
Goto Top
Hi.

Nahezu alle aktuellen Netzwerkdrucker haben einen Webserver, der auch die Liste gedruckter Dokumente anzeigt ...
(Link zur Website auf den Desktop)

Der User lann also darüber prüfen, ob sein Druckauftrag durch ist ...
Ebenso zrigt auch die geöffnete Fruckerwarteschlange alle laufenden Aufträge an ...

Beides bestenfalls mit Username ...

.
Member: colinardo
Solution colinardo Jan 31, 2024 updated at 14:06:03 (UTC)
Goto Top
Servus,
Daher möchte ich gern diese speziellen User mit Benachrichtigungen vollspamen. face-smile
Spammen geht immer face-wink, z.B. mit einem Powershell-Skript das im Hintergrund läuft und die Print-Jobs-Pipeline über WMI überwacht, etwa so:
Add-Type –MemberDefinition '[DllImport("user32.dll")]public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);' -name Window -namespace W32  
# hide powershell window
[void][W32.Window]::ShowWindow((Get-Process -id $pid).MainWindowHandle, 0)
# function to show toast notification
function Show-ToastNotification {
    param(
        [parameter(mandatory=$false)][ValidateSet('Title+Text','Image+Text')][string]$type = 'Title+Text',  
        [parameter(mandatory=$false)][string]$apptitle = "Powershell",  
        [parameter(mandatory=$false)][string]$message,
        [parameter(mandatory=$false)][System.DateTimeOffset]$expiration = [DateTimeOffset]::Now.AddMinutes(60),
        [parameter(mandatory=$false)][switch]$expiresOnReboot,
        [parameter(mandatory=$false)][Windows.UI.Notifications.ToastNotificationPriority]$priority = 'Default',  
        [parameter(mandatory=$false)][switch]$suppressPopup,
        [parameter(mandatory=$false)][switch]$includeSnoozeButton,
        [parameter(mandatory=$false)][switch]$includeDismissButton
    )
    
    DynamicParam {
        $attrCollection = new-object System.Collections.ObjectModel.Collection[System.Attribute]
        $paramDic = new-object System.Management.Automation.RuntimeDefinedParameterDictionary
        $attr = new-object System.Management.Automation.ParameterAttribute
        switch($type){
            'Title+Text'{  
                $attr.ParameterSetName = "A"  
                $attr.Mandatory = $false
                $attrCollection.Add($attr)
                $paramDic.Add("title", (new-object System.Management.Automation.RuntimeDefinedParameter("title", [String], $attrCollection)))  
            }
            'Image+Text'{  
                $attr.ParameterSetName = "B"  
                $attr.Mandatory = $false
                $attrCollection.Add($attr)
                $paramDic.Add("image", (new-object System.Management.Automation.RuntimeDefinedParameter("image", [String], $attrCollection)))  
            }
        }
        return $paramDic
    }
    begin{}
    process{}
    end{
        [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | out-null
        [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | out-null
        $xml = $null
        switch($type){
            'Title+Text' {  
                $xml = [xml]([Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastText02)).GetXML()
                # set toast content
                $xml.SelectSingleNode('/toast/visual/binding/text[@id=1]').InnerText = $PSBoundParameters.title  
                $xml.SelectSingleNode('/toast/visual/binding/text[@id=2]').InnerText = $message  
             }
             'Image+Text' {  
                $xml = [xml]([Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent([Windows.UI.Notifications.ToastTemplateType]::ToastImageAndText01)).GetXML()
                # set toast content
                $xml.SelectSingleNode('/toast/visual/binding/text[@id=1]').InnerText = $message  
                $xml.SelectSingleNode('/toast/visual/binding/image[@id=1]').src = $PSBoundParameters.image  
             }
        }

        # add command buttons
        if($includeSnoozeButton.IsPresent -or $includeDismissButton.IsPresent){
            $actions = $xml.CreateElement('actions')  
            # add snooze button when requested
            if ($includeSnoozeButton.IsPresent){
                $inp = $xml.CreateElement('input')  
                $inp.SetAttribute('id','snoozeTime')  
                $inp.SetAttribute('type','selection')  
                $inp.SetAttribute('title','Erneut erinnern in')  
                $inp.SetAttribute('defaultInput','15')  
                5,15,30,60 | %{
                    $sel = $xml.CreateElement('selection')  
                    $sel.SetAttribute('id',$_)  
                    $sel.SetAttribute('content',"$_ Minuten")  
                    [void]$inp.AppendChild($sel)
                }
                [void]$actions.AppendChild($inp)
                $action = $xml.CreateElement('action')  
                $action.SetAttribute('content','Später erinnern')  
                $action.SetAttribute('arguments','snooze')  
                $action.SetAttribute('activationType','system')  
                $action.SetAttribute('hint-inputId','snoozeTime')  
                [void]$actions.AppendChild($action)
            }
            # add dismiss button when requested
            if($includeDismissButton.IsPresent){
                $action = $xml.CreateElement('action')  
                $action.SetAttribute('content','Ignorieren')  
                $action.SetAttribute('arguments','dismiss')  
                $action.SetAttribute('activationType','system')  
                [void]$actions.AppendChild($action)
            }
            [void]$xml.DocumentElement.AppendChild($actions)
        }
        # convert xml object to DOM XML
        $dom = New-Object Windows.Data.Xml.Dom.XmlDocument
        $dom.LoadXml($xml.OuterXml)
        # create toast
        $toast = New-Object Windows.UI.Notifications.ToastNotification $dom -Property @{
            Tag = 'Powershell'  
            Group = "PowerShell"  
            ExpirationTime = $expiration
            ExpiresOnReboot = $expiresOnReboot.IsPresent
            Priority = $priority
            SuppressPopup = $suppressPopup.IsPresent
        }
        # create notifier and show toast
        [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($apptitle).Show($toast)
    }
}
# subscribe printjob events
Register-WmiEvent -Query "SELECT * FROM __InstanceDeletionEvent WITHIN .5 WHERE TargetInstance ISA 'Win32_PrintJob'" -SourceIdentifier "NewPrintJob" -Action {  
    $printer = $event.SourceArgs.NewEvent.TargetInstance.Name.split(',')[0]  
    $status = $event.SourceArgs.NewEvent.TargetInstance.Status
    $document = $event.SourceArgs.NewEvent.TargetInstance.Document
    $message = "Das Dokument '$document' wurde erfolgreich gedruckt."  
    if ($status -ne 'OK'){  
        $message = "Beim Druck von '$document' sind evt. Fehler aufgetreten:`r`nStatus: $status"  
    }
    Show-ToastNotification -type Title+Text -apptitle "Druckbenachrichtigung" -title $printer -message $message -includeDismissButton -expiresOnReboot  
} | out-null

while($true){sleep 5}
Grüße Uwe