"We are back" « oc.at

Powershell Script als geplanten Task

Umlüx 07.01.2013 - 11:40 4280 9
Posts

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8999
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 :(

Code:
powershell.exe -WindowStyle Hidden &'C:\tools\script.ps1'

rider

We work hard-We play hard
Avatar
Registered: Jan 2003
Location: Austria , Linz
Posts: 1252

Römi

Hausmeister
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5320
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!
Avatar
Registered: Jan 2003
Location: Vienna
Posts: 945
Wenn du den Windows-Task unter einem anderen User ausführen kannst, brauchst du ihn nur als "System" ausführen lassen. Dann siehst du ihn als User auch nie.

Hier noch ein Link dazu: http://www.mickgenie.com/windowsrun...th-system-user/

Lg, XXX

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8999
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
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5320
Okay, das ist dann blöd.
Falls du einen Weg findest poste es bitte.

Umlüx

Huge Metal Fan
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8999
es scheint sowieso nichtmal das powershell fenster zu sein, sondern der taskplaner an sich (taskeng.exe)

XXXprod

I'm gonna be made!
Avatar
Registered: Jan 2003
Location: Vienna
Posts: 945
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#):
Code: CSHARP
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:

Code:
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
Avatar
Registered: Jun 2001
Location: Kärnten
Posts: 8999
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
Avatar
Registered: Feb 2001
Location: Bez. Tulln
Posts: 5320
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.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz