Powershell Script als geplanten Task
Umlüx 07.01.2013 - 11:40 4280 9
Umlüx
Huge Metal Fan
|
ich hab ein kleines Powershell Script welches ich jede stunde per geplanten Task laufen lasse. das unschöne daran ist: jedesmal poppt dabei kurz ein schwarzes konsolenfenster auf. gibt es eine möglichkeit das irgendwie weg oder in den hintergrund oder minimiert zu bekommen? mit -WindowStyle Hidden hab ichs schon probiert, funktioniert aber leider nicht powershell.exe -WindowStyle Hidden &'C:\tools\script.ps1'
|
rider
We work hard-We play hard
|
|
Römi
Hausmeister
|
ich kenne das Problem... selbst wenn man hidden setzt popt das fenster zumindest kurz auf bevor es versteckt wird. Eine Lösung habe ich nicht, das einfachste ist es den task unter einem anderen User laufen zu lassen (zb system) dann bekommt man in der eigenen Session nichts davon mit. (das gleiche thema) http://stackoverflow.com/questions/...laying-a-window
Bearbeitet von Römi am 07.01.2013, 12:45
|
XXXprod
I'm gonna be made!
|
|
Umlüx
Huge Metal Fan
|
das script steuert ein programm, welches am desktop des angemeldeten user läuft. also mit systemuser wirds dann wohl glaub ich weniger gehen. aber danke!
|
Römi
Hausmeister
|
Okay, das ist dann blöd. Falls du einen Weg findest poste es bitte.
|
Umlüx
Huge Metal Fan
|
es scheint sowieso nichtmal das powershell fenster zu sein, sondern der taskplaner an sich (taskeng.exe)
|
XXXprod
I'm gonna be made!
|
Ich hab ein kleines .NET Tool gebastelt, dass einen Command und Argumente entgegen nimmt und dem man optional sagen kann, dass es das Outputwindow nicht anzeigen soll: click here (Speichern auf der Platte und .txt löschen) Code dazu(in C#): using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
namespace RunCommand
{
class Program
{
static void Main(string[] args)
{
const string cmdLabel = "-cmd:";
string command = args.Where(arg => arg.StartsWith(cmdLabel))
.Select(arg => arg.Substring(cmdLabel.Length))
.SingleOrDefault();
if (args.Length == 0 || command == null)
{
MessageBox.Show("Programmaufruf: RunCommand.exe -cmd:MeineAnwendung.exe -arg:\"enter your arguments here\" -hide(optional)",
"RunCommand", MessageBoxButtons.OK, MessageBoxIcon.Information);
return;
}
const string argLabel = "-arg:";
string arguments = args.Where(arg => arg.StartsWith(argLabel))
.Select(arg => arg.Substring(argLabel.Length))
.SingleOrDefault();
ProcessStartInfo startInfo = (arguments == null)
? new ProcessStartInfo(command)
: new ProcessStartInfo(command, arguments);
const string hideLabel = "-hide";
bool hideWindow = args.Any(arg => arg.Equals(hideLabel));
if (hideWindow)
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(startInfo);
}
}
}
Lg, XXX //Edit: Deinen Shell Aufruf müsstest du dann mit folgender Zeile erledigen können: RunCommand.exe -cmd:powershell.exe -arg:"C:\\tools\\script.ps1" -hide
Bearbeitet von XXXprod am 07.01.2013, 14:27
|
Umlüx
Huge Metal Fan
|
danke. solche ähnlichen tools hab ich auch noch gefunden. hilft leider alles nichts. das script selbst erscheint wie gesagt eh nicht. die konsole gehört zum taskplaner selber... das wird man nicht wegbekommen.
hab das problem jetzt notgedrungen durch anderes task timing umgangen.
|
Römi
Hausmeister
|
Verstehe ich nicht ganz. Der TaskScheduler startet ja nur irgendwas, da geht normal kein Konsolenfenster auf.
Das Problem ist imo dass Powershell das "Hidden" erst anwendet sobald sie fertig geladen ist - was halt doch etwas dauert. wenn du im Run Dialog einfach zb:
powershell -Windowstyle Hidden -Command "sleep 10"
eingibst bekommst du kurz ein fenster, bis das Hidden greift.
Wenn das vom XXXprod funktioniert sollest du das damit eigentlich lösen können.
|