runningwerner
Goto Top

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...

Content-Key: 1763717519

Url: https://administrator.de/contentid/1763717519

Printed on: April 25, 2024 at 06:04 o'clock

Member: Doskias
Doskias Jan 26, 2022 at 11:31:07 (UTC)
Goto Top
Moin

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:
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
Member: runningwerner
runningwerner Jan 26, 2022 at 11:37:42 (UTC)
Goto Top
@Doskias

Sorry für die "Formlosigkeit"...

das hole ich hiermit mal nach

Ein "Hallo" an die Community!

Es Scheitert an der Schleife und an dem Befehl das Programm zu starten...

Folgender Befehl funktioniert nicht:
start-process C:\Program Files\MuseScore 3\bin\MuseScore3.exe

Beste Grüße!
Member: SlainteMhath
SlainteMhath Jan 26, 2022 at 11:42:32 (UTC)
Goto Top
Moin,

Folgender Befehl funktioniert nicht:
Fehlermeldung?! (bitte in code tags packen, PS FM's werden sonst mekrwürdig formatiert)

lg,
Slainte

PS: Ich gehe mal davon aus, das dein Pfad zwischen " stand, oder?
Member: runningwerner
runningwerner Jan 26, 2022 at 11:48:16 (UTC)
Goto Top
Zitat von @SlainteMhath:
PS: Ich gehe mal davon aus, das dein Pfad zwischen " stand, oder?

... das war es...

bin wie erwähnt, echt ein Anfänger...

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 }

und dann würde ich das Ganze gerne als Ausführbare Datei speichern, falls das geht...

Danke!
Member: Doskias
Doskias Jan 26, 2022 updated at 12:15:24 (UTC)
Goto Top
Zitat von @runningwerner:
Zitat von @SlainteMhath:
PS: Ich gehe mal davon aus, das dein Pfad zwischen " stand, oder?
... das war es...
bin wie erwähnt, echt ein Anfänger...
Dann solltest du dich auch mit den Anfängen von PS vertraut machen und nicht irgendwo anfangen.

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:
$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')  
 }
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:

$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"}  
}
Führt die Schleife solange aus, wie es einen Prozess mit dem entsprechenden Namen gibt.

und dann würde ich das Ganze gerne als Ausführbare Datei speichern, falls das geht...
Starte das Skript übe eine Batch-Datei.

Danke!
Bitte

Gruß
Doskias
Member: runningwerner
runningwerner Jan 28, 2022 at 18:51:41 (UTC)
Goto Top
Zitat von @Doskias:
Starte das Skript übe eine Batch-Datei.


da hänge ich noch etwas...
einfach eine Textdatei erstellen und dann mit der Endung .bat abspeichern?
Nur welchen Befehlt gebe ich dann dort ein?

@Doskias danke für die detailierte Erklärung...
ganz durchsteigen tue ich noch nicht... aber ich werde es versuchen

besten Dank!