Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Powershellscript als Print-Hotfolder

Mitglied: superspamtube

superspamtube (Level 1) - Jetzt verbinden

18.07.2019 um 17:34 Uhr, 262 Aufrufe, 3 Kommentare

Hallo Zusammen,

ich benötige ein script das alle 5 Sekunden überprüft ob neue Dateien in einem bestimmten Ordner liegen und wenn ja, sollen diese an den lokalen Standarddrucker geschickt werden.
Nach dem drucken sollen die Dateien/die Datei in einen Ordner verschoben werden. Die log muss nicht unbedingt geschrieben werden, ist aber nice to have.

Das drucken funktioniert schon sehr gut mit:
01.
$files = Get-ChildItem "C:\Users\R&D\Documents\printfolder\*.pdf"
02.

03.
foreach ($file in $files){
04.
    start-process -FilePath $file.fullName -Verb Print
05.
    Move-Item -FilePath $file.fullName C:\Users\R&D\Documents\printed -Verbose -Force *>&1
Das überwachen des Ordners habe ich schonmal in Python3 gecoded und so ähnlich sollte es mit PS auch gehen:
01.
import shutil
02.
import os
03.
import time
04.

05.
while True:
06.
    source_dir = os.path.expanduser('~/Documents/Ordner1')
07.
    dest_dir = os.path.expanduser('~/Documents/Ordner2')
08.
    if os.listdir(source_dir): #Wenn Dateien im Ordner liegen ist die if-Abfrage wahr und der nachfolgende Code wird ausgeführt. Ansonsten wird nach ein paar Sekunden erneut geprüft.
09.
        time.sleep(15)
10.
        for file in os.listdir(source_dir):
11.
          fullpath = os.path.join(source_dir, file)
12.
          #Code der auszuführen ist wenn Dateien im Ordner sind.
13.
    else:
14.
        time.sleep(3)
15.
    time.sleep(3) 

Ich dachte an das cmdlet FileSystemWatcher und habe hierzu auch schon etwas gefunden:
https://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSystem ...

Daraufhin hab ich das nachfolgende script zusammengepuzzelt:

01.
$folder = 'C:\Users\R&D\Documents\Python_Powershell_print\printfolder' # Enter the root path you want to monitor. 
02.
$filter = '*.*'  # You can enter a wildcard filter here. 
03.
 
04.
# In the following line, you can change 'IncludeSubdirectories to $true if required.                           
05.
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} 
06.
 
07.
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
08.
$name = $Event.SourceEventArgs.Name 
09.
$changeType = $Event.SourceEventArgs.ChangeType 
10.
$timeStamp = $Event.TimeGenerated
11.
$files = Get-ChildItem "C:\Users\R&D\Documents\Python_Powershell_print\printfolder\*.pdf" 
12.
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green 
13.
Out-File -FilePath C:\printed\outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
14.
foreach ($file in $files){
15.
    start-process -FilePath $file.fullName -Verb Print
16.
    Move-Item -FilePath $file.fullName C:\printed -Verbose -Force *>&1
17.
    } 
18.
}
19.
# To stop the monitoring, run the following commands: 
20.
# Unregister-Event FileDeleted 
21.
# Unregister-Event FileCreated 
22.
# Unregister-Event FileChanged
Wenn ich das Script ausführe gibt er kurz im Terminal aus, dass eine Datei erstellt wurde aber dann endet das Script sofort. Weiter passiert nichts.
Mitglied: Kraemer
19.07.2019 um 11:33 Uhr
Moin,

du hast das Prinzip noch nicht ganz verstanden. Das Event wird für jede einzelne Datei, der erstellt wird ausgelöst. Das Get-Childitem und das foreach kannst du dir also sparen.

Und ja, das Script macht den Anschein, als wenn es beendet wird - was faktisch auch stimm. Die Events bleiben aber erhalten - arbeiten also weiter.

Gruß
Bitte warten ..
Mitglied: superspamtube
19.07.2019 um 12:21 Uhr
Danke für dein Kommentar. Hab das Script abgeändert:

01.
$folder = 'C:\Users\R&D\Documents\Python_Powershell_print\printfolder' # Enter the root path you want to monitor. 
02.
$filter = '*.*'  # You can enter a wildcard filter here. 
03.
 
04.
# In the following line, you can change 'IncludeSubdirectories to $true if required.                           
05.
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} 
06.
 
07.
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
08.
$name = $Event.SourceEventArgs.Name 
09.
$changeType = $Event.SourceEventArgs.ChangeType 
10.
$timeStamp = $Event.TimeGenerated
11.

12.
Write-Host "The file '$name' was $changeType at $timeStamp" -fore green 
13.
Out-File -FilePath C:\Users\R&D\Documents\Python_Powershell_print\outlog.txt -Append -InputObject "The file '$name' was $changeType at $timeStamp"
14.
start-process -FilePath $name.fullName -Verb Print
15.
Move-Item -FilePath $name.fullName C:\printed -Verbose -Force *>&1
16.

17.
$MyEmail = "mymail@gmail.com"
18.
$SMTP= "smtp.gmail.com"
19.
$To = "mymail@gmail.com"
20.
$Subject = "PRINT HOTFOLDER HIT"
21.
$Body = "PRINT HOTFOLDER HIT"
22.
$Creds = (Get-Credential -Credential "$MyEmail")
23.

24.
Start-Sleep 2
25.

26.
Send-MailMessage -To $to -From $MyEmail -Subject $Subject -Body $Body -SmtpServer $SMTP -Credential $Creds -UseSsl -Port 587 -DeliveryNotificationOption never
27.

28.
<# 
29.
$PSEmailServer variable can be used to pre-configure the
30.
SMTP server in your Powershell Profile. Then you don't need
31.
to specify -smtpserver paramter. Send-MailMessage will use the
32.
SMTP sever address assigned to $PSEmailServer
33.
Delivery Notification Options:
34.
-- None: No notification.        
35.
-- OnSuccess: Notify if the delivery is successful.      
36.
-- OnFailure: Notify if the delivery is unsuccessful.     
37.
-- Delay: Notify if the delivery is delayed.       
38.
-- Never: Never notify.
39.
#>
40.
}
41.
# To stop the monitoring, run the following commands: 
42.
# Unregister-Event FileDeleted 
43.
# Unregister-Event FileCreated 
44.
# Unregister-Event FileChanged
Aber es funktioniert nicht. Er druckt nicht und kopiert nicht. Mail wird auch nicht geschickt und wenn ich Unregister-Event FileCreated in die Konsole eingebe bekomm ich die Rückmeldung das dieses Event nicht registriert ist.


PS C:\Users\R&D\Documents\Python_Powershell_print> Unregister-Event FileCreated
Unregister-Event : Ereignisabonnement mit der ID "FileCreated" ist nicht vorhanden.
In Zeile:1 Zeichen:1

Unregister-Event FileCreated

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : InvalidArgument: ( [Unregister-Event], ArgumentException
+ FullyQualifiedErrorId : INVALID_SOURCE_IDENTIFIER,Microsoft.PowerShell.Commands.UnregisterEventCommand
Bitte warten ..
Mitglied: 140447
19.07.2019, aktualisiert um 16:09 Uhr
Du verwendest Variablen und Eigenschaften die es überhaupt nicht gibt $name.Fullname gibt es nicht!! Die Entsprechende Variable die den ganzen Pfad enthält ist im Event die $Event.SourceEventArgs.FullPath:
Bei Bedarf muss hier zwischen dem Print und dem Verschieben je nach Dateityp eine Pause gesetzt werden, oder man sammelt die Files in einem Array und verschiebt gesammelt zu einem späteren Zeitpunkt.
Die Events bestehen so lange wie die entsprechende Powershell-Session existiert, wird die Session geschlossen sind die Events auch gelöscht.
01.
$folder = 'C:\Users\R&D\Documents\Python_Powershell_print\printfolder' # Enter the root path you want to monitor. 
02.
$filter = '*.*'  # You can enter a wildcard filter here. 
03.
 
04.
# In the following line, you can change 'IncludeSubdirectories to $true if required.                           
05.
$fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{IncludeSubdirectories = $false;NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'} 
06.

07.
Unregister-Event -SourceIdentifier FileCreated -EA 0
08.
Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action { 
09.
    $name = $Event.SourceEventArgs.Name 
10.
    $fullname = $Event.SourceEventArgs.FullPath
11.
    $changeType = $Event.SourceEventArgs.ChangeType 
12.
    $timeStamp = $Event.TimeGenerated
13.

14.
    Write-Host "The file '$fullname' was $changeType at $timeStamp" -fore green 
15.
    Out-File -FilePath "C:\Users\R&D\Documents\Python_Powershell_print\outlog.txt" -Append -InputObject "The file '$fullname' was $changeType at $timeStamp"
16.
    start-process -FilePath $fullname -Verb Print -Wait
17.
    Move-Item $fullname -Destination "C:\printed" -Verbose -Force
18.

19.
    $MyEmail = "mymail@gmail.com"
20.
    $SMTP= "smtp.gmail.com"
21.
    $To = "mymail@gmail.com"
22.
    $Subject = "PRINT HOTFOLDER HIT"
23.
    $Body = "PRINT HOTFOLDER HIT"
24.
    $Creds = (Get-Credential -Credential "$MyEmail")
25.

26.
    Send-MailMessage -To $to -From $MyEmail -Subject $Subject -Body $Body -SmtpServer $SMTP -Credential $Creds -UseSsl -Port 587 -DeliveryNotificationOption never
27.
}
28.
cls
29.
write-host "Waiting for new files ..." -F Green
30.
while($true){
31.
    sleep 1
32.
}
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershellscript ändert CSV Codierung?

gelöst Frage von TheUnrealBatch & Shell5 Kommentare

Moin zusammen, ich habe mir (ich glaube es war tatsächlich hier) ein Powershellscript besorgt, mit dem ich automatisiert Emailanhänge ...

Windows Server

Print server

gelöst Frage von EverestWindows Server9 Kommentare

Hallo zusammen, hat jemand eine Idee was es sein kann wenn die Drucker ab und zu wirre Zeichen drucken? ...

Drucker und Scanner

Einfaches Print-Fleetmanagement

gelöst Frage von d4shoerncheNDrucker und Scanner6 Kommentare

Moin, habt Ihr Erfahrungen mit Fleetmanagement-Software für Drucker (alle vom gleichen Hersteller, bis auf drei Ausnahmen)? Eigentlich benötigen wir ...

Batch & Shell

Spoiler in textdatei automatisch über Powershellscript einfügen

Frage von Dr.ByteBatch & Shell5 Kommentare

Hallo leibe Admins, ich habe folgende Datei im txt-Format. center img /img Preview: url img /img /url Beschreibungstext Keywords: Keywords1, Keywords2, Keywords3, b 3 ...

Neue Wissensbeiträge
Humor (lol)

"Linux und 5 Gründe Warum man kein Windows verwenden sollte sondern Ubuntu Linux"

Tipp von Snowbird vor 13 StundenHumor (lol)8 Kommentare

Gerade gefunden. Ja, ist etwas älter, aber irgendwie lustig?

Humor (lol)

"Warum Linux in einer vernetzten Welt einfach keinen Komfort bietet!"

Tipp von Snowbird vor 1 TagHumor (lol)13 Kommentare

Ein interessanter Einblick warum Linux nichts für Geräteübergreifende Arbeit ist :)

Humor (lol)
Zuviel Speicher ist ungesund. :-)
Tipp von Lochkartenstanzer vor 1 TagHumor (lol)14 Kommentare

Moin Kollegen, Heute hatte ich ein ungewöhnliches Aha-Erlebnis: Über das Wochenende habe ich einen einen 6 Jahre alten Bare-Metal ...

Windows Update

KB4517297 verfügbar, behebt Fehler in VB6 VBA VBScript

Information von sabines vor 1 TagWindows Update

Das Update behebt mögliche Fehler in VB6, VBA und VBScript, die durch das Update KB4512486 vom August entstanden sind. ...

Heiß diskutierte Inhalte
Router & Routing
Deinstalliertes Geräte wird in FritzBox noch immer als verbundenes Gerät angezeigt
gelöst Frage von imebroRouter & Routing18 Kommentare

Hallo, in meiner FritzBox 7490 wird im Bereich "Funknetz" ein Gereät bei den verbundenen Geräten angezeigt, wobei ich nicht ...

Batch & Shell
PowerShell - Text an HTMLbody übergeben mit UTF-8 Kodierung
Frage von Pat.batBatch & Shell14 Kommentare

Hallo zusammen, ich stoße momentan auf folgendes Problem. Ich möchte mit meinem Skript E-Mails versenden. Text und Signatur samt ...

Sonstige Systeme
Ist es möglich ein ISDN-Telefon an einen analogen Anschluss anzuschließen?
Frage von cramtroniSonstige Systeme14 Kommentare

Also anders herum geht es ja, da gibt es ja diese Adapter von RJ11 auf TAE-F, aber gibt es ...

Humor (lol)
Zuviel Speicher ist ungesund. :-)
Tipp von LochkartenstanzerHumor (lol)14 Kommentare

Moin Kollegen, Heute hatte ich ein ungewöhnliches Aha-Erlebnis: Über das Wochenende habe ich einen einen 6 Jahre alten Bare-Metal ...