Powershell-Script über Task Scheduler zeigt CMD während Ausführung
Hallo zusammen,
ich habe eine Frage die nicht direkt mit Powershell zu tun hat
Über den Task Scheduler starte ich jede Stunde ein Powershell-Script das mir ein verschiedene Verzeichnisse vom Server-Share auf den Notebook spiegelt (Robocopy). Das klappt alles, hat nur ein Schönheitsfehler dass das Script während der Ausführung ein CMD anzeigt.
Auch wenn ich im Powershell-Script die beiden Zeilen mit > $null ausblenden will, erscheint das CMD, dann halt nur noch schwarz ohne Inhalt.
Da ich die UserID des angemeldeten Windows-User brauche, kann ich das Script nicht mit meinem Admin-Account starten lassen da ich sonst den angemeldeten User nicht mehr habe.
Wie kann man den kompletten Prozess ausblenden so das kein Popup oder CMD etc erscheint? Ïch habe es schon mit einem Batch gestartet, aber das reagierte ja logischerweise gleich
Besten Dank im Voraus für Eure Hilfe.
Viele Grüsse,
Daniel
ich habe eine Frage die nicht direkt mit Powershell zu tun hat
Über den Task Scheduler starte ich jede Stunde ein Powershell-Script das mir ein verschiedene Verzeichnisse vom Server-Share auf den Notebook spiegelt (Robocopy). Das klappt alles, hat nur ein Schönheitsfehler dass das Script während der Ausführung ein CMD anzeigt.
Auch wenn ich im Powershell-Script die beiden Zeilen mit > $null ausblenden will, erscheint das CMD, dann halt nur noch schwarz ohne Inhalt.
Da ich die UserID des angemeldeten Windows-User brauche, kann ich das Script nicht mit meinem Admin-Account starten lassen da ich sonst den angemeldeten User nicht mehr habe.
Wie kann man den kompletten Prozess ausblenden so das kein Popup oder CMD etc erscheint? Ïch habe es schon mit einem Batch gestartet, aber das reagierte ja logischerweise gleich
Besten Dank im Voraus für Eure Hilfe.
Viele Grüsse,
Daniel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 305448
Url: https://administrator.de/forum/powershell-script-ueber-task-scheduler-zeigt-cmd-waehrend-ausfuehrung-305448.html
Ausgedruckt am: 22.12.2024 um 19:12 Uhr
5 Kommentare
Neuester Kommentar
Hallo Daniel,
meinst du damit das Powershell-Konsolenfenster selber oder das Konsolenfenster einer Batchanwendung die du aus dem Powershell Anwendung heraus aufrufst?
Dafür gibt es mehrere Möglichkeiten:
Die einfachste:
Die Powershell-Konsole versteckst du mit den zusätzlichen Parametern
im Argumente-Feld des Taskplaners.
Dann kann man zusätzlich im Powershell-Skript gestartete Prozesse ebenfalls versteckt starten:
Man kann aber auch aus einem Powershell-Skript heraus dieses verschwinden lassen:
Das letztere benutzt man eher wenn man statt der Konsole nur eine GUI sehen will.
Grüße Uwe
p.s. Man muss ein Skript nicht unbedingt unter deinem Useraccount laufen lassen, man kann auch aus dem Skript heraus Prozesse mit anderen Credentials starten, dafür haben die meisten CMDLets den Parameter -Credential.
meinst du damit das Powershell-Konsolenfenster selber oder das Konsolenfenster einer Batchanwendung die du aus dem Powershell Anwendung heraus aufrufst?
Dafür gibt es mehrere Möglichkeiten:
Die einfachste:
Die Powershell-Konsole versteckst du mit den zusätzlichen Parametern
-WindowStyle Hidden -Noninteractive -NoProfile -NoLogo
Dann kann man zusätzlich im Powershell-Skript gestartete Prozesse ebenfalls versteckt starten:
start-process "deineexe oder cmd" -WindowStyle Hidden -wait
$showWindowAsync = Add-Type –memberDefinition @"
[DllImport("user32.dll")]
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
"@ -name "Win32ShowWindowAsync" -namespace Win32Functions –passThru
function Hide-PowerShell() {
[void]$showWindowAsync::ShowWindowAsync((Get-Process –id $pid).MainWindowHandle, 2)
}
Hide-Powershell
Grüße Uwe
p.s. Man muss ein Skript nicht unbedingt unter deinem Useraccount laufen lassen, man kann auch aus dem Skript heraus Prozesse mit anderen Credentials starten, dafür haben die meisten CMDLets den Parameter -Credential.
Zitat von @DanielBodensee:
Ich habe mein Powershell-Script über den Scheduled Task so gestartet, das ich erst ein VBS-Script starte und aus dem heraus wird das Powershell-Script gestartet.
Wieso das ??? Im Taskscheduler kannst du PS Skripte schön direkt unsichtbar starten.Ich habe mein Powershell-Script über den Scheduled Task so gestartet, das ich erst ein VBS-Script starte und aus dem heraus wird das Powershell-Script gestartet.
Wenn du aus deinem PS-Skript weitere Prozesse in einer CMD startest machst du das so wie ich oben geschrieben habe mit Start-Process.
Außerdem muss man ein Skript wie oben schon geschrieben nicht zwingend als der User starten den man im Skript benötigt. Die benötigten Credentials lassen sich auch direkt im Skript an den entsprechenden Befehl übergeben(s.o.)
Ein Backup-Skript würde ich persönlich eher mit Systemrechten laufen lassen!
Aber vermutlich fehlt dir da einfach noch das Wissen wie man das umsetzt.
Grüße an den See
Uwe
-edit-
Aber irgendwie schade das man dieses flackern direkt nicht vermeiden kann.
Ach so das Flackern meinst du, hatte ich jetzt in der Schnelle überlesen, sorry. Aber wie geschrieben lass dein Skript mit einem Service-Account oder mit Systemrechten laufen. Credentials für Netzlaufwerke oder ähnliches wenn du das brauchst kannst du im Skript (auch sicher) als Secure-String Objekt übergeben.Ein kleiner universeller Silent-Wrapper ist in c# oder AutoIt ist aber auch schnell gezimmert.
#NoTrayIcon
if $cmdline = 1 then
Run("powershell -Windowstyle Hidden -Noninteractive -NoProfile -NoLogo -File """ & $cmdline[1] & """","",@SW_HIDE)
endif