2016-06-06 12 views
0

Ich habe eine Batch-Datei, die ein paar Befehle aufruft und schließlich ein Powershell-Skript ausführt. Es läuft gut manuell, aber im Aufgabenplaner kann ich sehen, dass es einige der Aktionen abschließt, aber das Powershell-Skript nicht ausführt (letzter Befehl in der Bat-Datei). Das Skript wird von einer Java-Datei erstellt/überschrieben, wo es sendet aus E-Mails. Alles aktualisiert und notwendig, aber letztendlich werden die E-Mails nie gesendet. Wenn ich im Win Explorer auf die bat-Datei klicke, funktioniert es wie erwartet.Bat-Datei wird manuell ausgeführt, nicht mit Task-Scheduler abgeschlossen

@echo off 
set Pathname="C:\Users\administrator\Documents\EmailNotification\EmailNotificationJava" 
cd %Pathname% 
REM ECHO Directory: C:\Users\administrator\Documents\Notification 
CALL IndividualCMDCommands.bat 
set Pathname="C:\Users\administrator\Documents\EmailNotification\EmailNotificationJava\src" 
cd %Pathname% 
XCOPY C:\Users\administrator\Documents\EmailNotification\EmailNotificationJava\*.txt C:\Users\administrator\Documents\EmailNotification\EmailNotificationJava\src /Y 
javac -cp .;C:\Users\administrator\Documents\EmailNotification\EmailNotificationJava\joda-time-2.9.3\joda-time-2.9.3.jar ParseInfo.java 
java -cp .;C:\Users\administrator\Documents\EmailNotification\EmailNotificationJava\joda-time-2.9.3\joda-time-2.9.3.jar ParseInfo 
ECHO ParseInfo 
REM set Pathname="C:\Users\administrator\Documents\Notification" 
REM cd %Pathname% 
ECHO Powershell 
REM SET ThisScriptsDirectory="C:\Users\administrator\Documents\EmailNotification\EmailNotificationJava\src" 
SET PowerShellScriptPath=%TC:\Users\administrator\Documents\EmailNotification\EmailNotificationJava\PSCMD.ps1 
PowerShell -NoProfile -ExecutionPolicy Bypass -Command "& '%PowerShellScriptPath%'"; 
ECHO Complete 
+3

Warum überhaupt eine Batch-Datei verwenden? Verwenden Sie PowerShell für das gesamte Skript. –

+0

Jedes Mal, wenn dieses Skript ausgeführt wird, wird das Powershell-Skript überschrieben. Der Grund für die Verwendung des Powershell-Skripts besteht darin, die E-Mail-Befehle in einer separaten Datei zu speichern, die ich bei Bedarf ändern kann. Also möchte ich diesen Teil in einer eigenen Datei behalten. –

+0

Ich würde einen alternativen Ansatz empfehlen, der dies nicht erfordert - Sie benötigen keine Batch-Datei. –

Antwort

0

Es hat wahrscheinlich etwas mit dem ausführenden Benutzerkonto zu tun. Wenn Sie dies in Ihrem Aufgabenplaner konfigurieren können, lassen Sie Ihre Fledermausdatei unter Ihrem eigenen Konto oder "der interaktive Benutzer" ausführen. Dann sollte es funktionieren.

Wie werden die E-Mails gesendet? Outlook vielleicht verwenden? Outlook hat bei der Automatisierung einige Sicherheitseinschränkungen. Wenn es von Benutzer A geöffnet wird, lässt es keine Automatisierung durch Benutzer B zu.

+0

Die E-Mails werden von Outlook gesendet. Obwohl ich unter dem gleichen Benutzerkonto bin, als ich die Dateien und die Aufgabe erstellte. Im Taskplaner setze ich den Task mit den höchsten Rechten und führe ihn unter demselben Benutzer aus. –

+0

Erhöhte Berechtigungen werden von Outlook immer noch als anderer Benutzer angesehen. Wenn Sie Outlook schließen, bevor Sie das Skript ausführen, sollte dies jedoch kein Problem darstellen. Versuchen Sie stattdessen, PowerShell ISE vom Sheduler auszuführen und debuggen Sie dann Ihr Skript, um zu sehen, wo es fehlschlägt. –

-1

Bitte versuchen Sie den folgenden Befehl, um das Powershell-Skript auszuführen. C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Powershell.exe -NoProfile -ExecutionPolicy Bypass-Datei "& '% PowerShellScriptPath%'"