Mit Powershell zwei Prozesse mit gleichem Prozessname und unterschiedlichen Parameter überprüfen und ggf. erneut starten
Hallo Zusammen,
ich versuche seit Stunden zwei Prozesse mit gleichem Prozessname, gleichen Verzeichnis in WIn10 mittles Powershell zu überprüfen ob diese jeweils noch laufen, und ggf. erneut zu starten.
Den einzigen Unterschied mit dem ich was anfangen könnte, den ich im Taskmanager sehe, fand ich unter Details, die Spalte "Befehlszeile":
Für den ersten Prozess:
"C:\Users\Programm Test.exe" /ident=0
Für den zweiten Prozess:
"C:\Users\Programm Test.exe" /ident=1
Hatte folgendes programmiert, hat aber nicht zum Erfolg geführt:
$Program = '"C:\Users\Programm Test.exe"'
$Arg0 = '/ident=0'
$Arg1 = '/ident=1'
if (!(get-Process | ?{$_.commandline -eq „$Program“,“$Arg0“ -join “ „})){Start-Process „$Program“,“$Arg0“ -join “ „}
else {Write-Host "Prozess wird aktuell ausgeführt"}
if (!(get-Process | ?{$_.commandline -eq „$Program“,“$Arg1“ -join “ „})){Start-Process „$Program“,“$Arg1“ -join “ „}
else {Write-Host "Prozess wird aktuell ausgeführt"}
Hätte da jemand eine Idee? Vielen Dank im Voraus,
Viele Grüße
ich versuche seit Stunden zwei Prozesse mit gleichem Prozessname, gleichen Verzeichnis in WIn10 mittles Powershell zu überprüfen ob diese jeweils noch laufen, und ggf. erneut zu starten.
Den einzigen Unterschied mit dem ich was anfangen könnte, den ich im Taskmanager sehe, fand ich unter Details, die Spalte "Befehlszeile":
Für den ersten Prozess:
"C:\Users\Programm Test.exe" /ident=0
Für den zweiten Prozess:
"C:\Users\Programm Test.exe" /ident=1
Hatte folgendes programmiert, hat aber nicht zum Erfolg geführt:
$Program = '"C:\Users\Programm Test.exe"'
$Arg0 = '/ident=0'
$Arg1 = '/ident=1'
if (!(get-Process | ?{$_.commandline -eq „$Program“,“$Arg0“ -join “ „})){Start-Process „$Program“,“$Arg0“ -join “ „}
else {Write-Host "Prozess wird aktuell ausgeführt"}
if (!(get-Process | ?{$_.commandline -eq „$Program“,“$Arg1“ -join “ „})){Start-Process „$Program“,“$Arg1“ -join “ „}
else {Write-Host "Prozess wird aktuell ausgeführt"}
Hätte da jemand eine Idee? Vielen Dank im Voraus,
Viele Grüße
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 594837
Url: https://administrator.de/forum/mit-powershell-zwei-prozesse-mit-gleichem-prozessname-und-unterschiedlichen-parameter-ueberpruefen-und-ggf-594837.html
Ausgedruckt am: 20.04.2025 um 22:04 Uhr
8 Kommentare
Neuester Kommentar
Oh... ich hab -Passthru vergessen. Und deine Abfrage auf den Prozess hab ich mal angepasst
$ProcessName = "Programm Test"
$proc = Get-Process | Where-Object {$_.ProcessName -eq "Programm Test"}
if ($proc -imatch 'Programm Test')
{
'"Programm Test" ist aktiv - nix zu tun'
}
else
{
'"Programm Test" ist nicht aktiv - wird gestartet'
$Cmd = "C:\Users\Programm Test.exe"
Starte für ident=0
$Arg0 = '/ident=0'
$var0 = Start-Process $Cmd -ArgumentList $Arg0 -PassThru
Starte für ident=1
$Arg1 = '/ident=1'
$var1 = Start-Process $Cmd -ArgumentList $Arg1 -PassThru
if (!(get-Process -id $var0.id)){Start-Process $Cmd -ArgumentList $Arg0}
else {Write-Host "Prozess wird aktuell ausgeführt"}
if (!(get-Process -id $var0.id)){Start-Process $Cmd -ArgumentList $Arg1}
else {Write-Host "Prozess wird aktuell ausgeführt"}
}

Erst einmal: Die Eigenschaft commandline gibt es in den zurückgelieferten Objekten von Get-Process nicht, deswegen kann das Skript nicht funktionieren. Diese Eigenschaft wird nur bei der Abfrage der Prozesse über WMI oder CIM zurückgeliefert.
Gibt es da eine Möglichkeit das anderst zu machen?
Es gibt immer 1000 und 1 Weg nach Rom... Hier mal eine mögliche Variante:$progpath = 'C:\Users\Programm Test.exe'
$arg1 = '/ident=0'
$arg2 = '/ident=1'
$procs = gcim win32_Process | ?{$_.Path -eq $progpath}
if ($procs){
if (!($procs | ?{$_.CommandLine -like "*$arg1*"})){
start $progpath $arg1
}
if (!($procs | ?{$_.CommandLine -like "*$arg2*"})){
start $progpath $arg2
}
}else{
start $progpath $arg1
start $progpath $arg2
}