Skript mit Powershell erstellen
Ich würde gerne ein Skript erstellen, mittels Powershell.
Es folgendes tun.
Ein Programm öffnen.
Durch das Öffnen das Programms öffnet sich ein Panel eines Treibers (dies passiert automatisch).
Das Skript soll dann diese Programm wieder schliessen.
Dafür habe ich schon diesen Befehl gefunden:
Get-Process US-2x2_US-4x4_SettingsPanel| Foreach-Object { $_.CloseMainWindow() | Out-Null }
Jedoch finde ich keinen Befehl um ein Programm zu öffnen.
Da sich das oben erwähnte Panel erst kurz nach Starten des Programms öffnet, müsste eine Art Schleife so lange ausgeführt werden, bis sich das Panel geöffnet hat, um es dann zu schliessen...
Hier stoße ich an meine Grenzen...
Es folgendes tun.
Ein Programm öffnen.
Durch das Öffnen das Programms öffnet sich ein Panel eines Treibers (dies passiert automatisch).
Das Skript soll dann diese Programm wieder schliessen.
Dafür habe ich schon diesen Befehl gefunden:
Get-Process US-2x2_US-4x4_SettingsPanel| Foreach-Object { $_.CloseMainWindow() | Out-Null }
Jedoch finde ich keinen Befehl um ein Programm zu öffnen.
Da sich das oben erwähnte Panel erst kurz nach Starten des Programms öffnet, müsste eine Art Schleife so lange ausgeführt werden, bis sich das Panel geöffnet hat, um es dann zu schliessen...
Hier stoße ich an meine Grenzen...
Please also mark the comments that contributed to the solution of the article
Content-ID: 1763717519
Url: https://administrator.de/forum/skript-mit-powershell-erstellen-1763717519.html
Printed on: May 13, 2025 at 09:05 o'clock
6 Comments
Latest comment
Moin
1. Keine Begrüßung
2. Keinen Gruß
3. Tippe ich bei google "Powershell Programm starten" ein, so erhalte ich als dritten Link: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
4. versteh ich derzeit nicht wie man bei der Schleife, die nach dem Programmstart gestartet werden soll an seine grenzen stoßen kann, wenn man das Programm gar nicht startet. Oder scheitert es an der Schleife allgemein?
Das ganze lässt sich einfacher lösen, wenn du den Code hier teilst, den du schon hast. Aber Achtung Codetags verwenden.
Gruß
Doskias
Zitat von @runningwerner:
Ich würde gerne ein Skript erstellen, mittels Powershell.
Es folgendes tun.
Ein Programm öffnen.
Durch das Öffnen das Programms öffnet sich ein Panel eines Treibers (dies passiert automatisch).
Das Skript soll dann diese Programm wieder schliessen.
Dafür habe ich schon diesen Befehl gefunden:
Get-Process US-2x2_US-4x4_SettingsPanel| Foreach-Object { $_.CloseMainWindow() | Out-Null }
Jedoch finde ich keinen Befehl um ein Programm zu öffnen.
Da sich das oben erwähnte Panel erst kurz nach Starten des Programms öffnet, müsste eine Art Schleife so lange ausgeführt werden, bis sich das Panel geöffnet hat, um es dann zu schliessen...
Hier stoße ich an meine Grenzen...
Du stößt ganz offenbar viel früher an deine Grenzen:Ich würde gerne ein Skript erstellen, mittels Powershell.
Es folgendes tun.
Ein Programm öffnen.
Durch das Öffnen das Programms öffnet sich ein Panel eines Treibers (dies passiert automatisch).
Das Skript soll dann diese Programm wieder schliessen.
Dafür habe ich schon diesen Befehl gefunden:
Get-Process US-2x2_US-4x4_SettingsPanel| Foreach-Object { $_.CloseMainWindow() | Out-Null }
Jedoch finde ich keinen Befehl um ein Programm zu öffnen.
Da sich das oben erwähnte Panel erst kurz nach Starten des Programms öffnet, müsste eine Art Schleife so lange ausgeführt werden, bis sich das Panel geöffnet hat, um es dann zu schliessen...
Hier stoße ich an meine Grenzen...
1. Keine Begrüßung
2. Keinen Gruß
3. Tippe ich bei google "Powershell Programm starten" ein, so erhalte ich als dritten Link: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell. ...
4. versteh ich derzeit nicht wie man bei der Schleife, die nach dem Programmstart gestartet werden soll an seine grenzen stoßen kann, wenn man das Programm gar nicht startet. Oder scheitert es an der Schleife allgemein?
Das ganze lässt sich einfacher lösen, wenn du den Code hier teilst, den du schon hast. Aber Achtung Codetags verwenden.
Gruß
Doskias
Dann solltest du dich auch mit den Anfängen von PS vertraut machen und nicht irgendwo anfangen.
Was passiert hier?
In Zeile 3 wird das Programm gestartet. Schleife 1 geht von Zeile 4 bis 7 und macht nichts weiter als zu warten bis ein Programm mit dem Titel gestartet ist, prüft jede Sekunde. Wenn es gestartet ist, wechselt $wait von 0 auf 1. Dann geht es in die zweite schleife. Solange das Fenster aktiv ist, wird dann der Befehl aus Zeile 10 ausgeführt, Zeile 11 prüft dann immer noch auf aktive Fenster. In deinem Fall wir dann aus 1 wieder 0 und die zweite Schleife endet.
Ich nutze die Methode sehr vielfältig bei halbautomatisierten Installationen, damit die Automatismen erst gestartet werden, wenn ich es will und das händisch durchzuführende Grundsetup beendet habe. Ansonsten, wenn du weißt, wie der Prozess heißt:
Führt die Schleife solange aus, wie es einen Prozess mit dem entsprechenden Namen gibt.
Gruß
Doskias
also Programm starten klappt dann schonmal...
wie kann ich jetzt folgenden Befehl als Schleife wiederholen, bis das "Panel" geöffnet wurde, und sich dann schliesst:
Get-Process US-2x2_US-4x4_SettingsPanel| Foreach-Object { $_.CloseMainWindow() | Out-Null }
Für die schleifen gibt es verschiedene Möglichkeiten. Ich mach das gerne so:wie kann ich jetzt folgenden Befehl als Schleife wiederholen, bis das "Panel" geöffnet wurde, und sich dann schliesst:
Get-Process US-2x2_US-4x4_SettingsPanel| Foreach-Object { $_.CloseMainWindow() | Out-Null }
$wshell = New-Object -ComObject wscript.shell
$wait=0
Start-process [...]
while($wait -eq 0)
{sleep 1
$wait=$wshell.AppActivate('Programmtitel')
}
while($wait -eq 1)
{sleep 1
[dein Befehl]
$wait=$wshell.AppActivate('Programmtitel')
}
In Zeile 3 wird das Programm gestartet. Schleife 1 geht von Zeile 4 bis 7 und macht nichts weiter als zu warten bis ein Programm mit dem Titel gestartet ist, prüft jede Sekunde. Wenn es gestartet ist, wechselt $wait von 0 auf 1. Dann geht es in die zweite schleife. Solange das Fenster aktiv ist, wird dann der Befehl aus Zeile 10 ausgeführt, Zeile 11 prüft dann immer noch auf aktive Fenster. In deinem Fall wir dann aus 1 wieder 0 und die zweite Schleife endet.
Ich nutze die Methode sehr vielfältig bei halbautomatisierten Installationen, damit die Automatismen erst gestartet werden, wenn ich es will und das händisch durchzuführende Grundsetup beendet habe. Ansonsten, wenn du weißt, wie der Prozess heißt:
$Process=get-process | select-object ProcessName, MainWindowTitle |where {$_.processname -like "Prozessname"}
while ($Process.processname -like "*Prozessname*")
{
[dein Befehl]
$Process=get-process | select-object ProcessName, MainWindowTitle |where {$_.processname -like "Prozessname"}
}
und dann würde ich das Ganze gerne als Ausführbare Datei speichern, falls das geht...
Starte das Skript übe eine Batch-Datei.Danke!
BitteGruß
Doskias