Powershell: Prozess mit Parametern starten (Leerzeichen nach Parameter?!)

JahniS01

Cadet 2nd Year
Registriert
Dez. 2017
Beiträge
17
Hello guys.

Ziel:
Mit Powershell einen Prozess mit einem bestimmten Parameter und einem bestimmtem "Ausführen in" Verzeichnis starten.

Mein Versuch:
Code:
Start-Process -FilePath '"%Verzeichnis%\%Prozess%"' -ArgumentList "%Parameter%" -WorkingDirectory "%WorkingDir%"

Funktioniert grundsätzlich, aber ich hab damit folgendes Problem:
Wurde der Prozess nun so gestartet und schaue ich mir dann die Befehlszeile an,
wurde nach dem Parameter noch ein Leerzeichen mit übergeben?!
Da ich diese Prozesse auch anhand ihrer Prozess ID wieder beenden können muss ist das suboptimal...

Normalerweise würde ich die PID ermitteln wie folgt:
Code:
Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -like '"%Verzeichnis%\%Prozess%" %Parameter%' } | Select-Object ProcessId

in dem Fall müsste ich aber nach dem Parameter auch noch das Leerzeichen berücksichtigen:
Code:
Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -like '"%Verzeichnis%\%Prozess%" %Parameter% ' } | Select-Object ProcessId

Wie kann ich das Leerzeichen nach dem Parameter bei Start-Process verhindern?

Danke euch :)
Ergänzung ()

und nein, die Variable %Parameter% enthält kein Leerzeichen nach dem eigentlichen Parameter :)
 
Zuletzt bearbeitet:
@boxte30:Goas Danke für die Antwort,
aber auch wenn ich es über argList versuche wird immernoch das Leerzeichen nach dem Parameter (im Beispiel "100" übergeben

Code:
$argList = @( '100')
Start-Process -FilePath '"%Verzeichnis%\%Prozess%"' $argList -WorkingDirectory "%WorkingDir%"
 
Vielleicht hilft das Beispiel 7: https://learn.microsoft.com/en-us/p...example-7-specifying-arguments-to-the-process

Wenn der Parameter "ArgumentList" nur einen Eintrag enthält, dann braucht es keinen Array. Wie im Beispiel 7 gezeigt, es reicht ein kommaseparierte Liste. Und es würde auch ein 100 (ohne Hochkomma) ausreichen.
Evtl. sind deine anderen Parameter eher das Problem, deswegen so:

Code:
$argList = @( 'param1', 'param2 bla', 'param3 = blub' )
$fp = '___full_path1___'
$wd = '___full_path2___'
Start-Process -FilePath $fp -ArgumentList $argList -WorkingDirectory $wd

Und die Aufrufparameter per Debug vor dem Ausführen des cmdlets "Start-Process" prüfen, ob sie auch die korrekten Werte enthalten.
 
Auch dieser Versuch liefert leider das selbe Ergebnis,
ein überflüssiges Leerzeichen nach dem Parameter in der Befehlszeile

Habe mir die Variablen vorher ausgeben lassen, $argList ist tatsächlich nur [100] ohne ein Leerzeichen danach.
Auch $fp und $wd enthalten nur die reinen Pfade ohne Leerzeichen davor oder danach.
Es muss an irgendwas anderem liegen, aber ich komm nicht drauf

Hier mal der ganze Vorgang, ich kann da echt nichts auffälliges feststellen:

Code:
$argList = @( '100' )
$fp = '"C:\X3000\Kasse\Transfer.exe"'
$wd = 'C:\X3000\Kasse'

# Debug:
Write-Output "$argList$argList"
100100
Write-Output "$fp$fp"
"C:\X3000\Kasse\Transfer.exe""C:\X3000\Kasse\Transfer.exe"
Write-Output "$wd$wd"
C:\X3000\KasseC:\X3000\Kasse
Write-Output "Start-Process -FilePath $fp -ArgumentList $argList -WorkingDirectory $wd"
Start-Process -FilePath "C:\X3000\Kasse\Transfer.exe" -ArgumentList 100 -WorkingDirectory C:\X3000\Kasse

# Programmstart:
Start-Process -FilePath $fp -ArgumentList $argList -WorkingDirectory $wd

# PID ermitteln:
Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -like '"C:\X3000\Kasse\Transfer.exe" 100' } | Select-Object ProcessId
liefert kein Ergebnis.......

# Wenn ich nach dem Parameter ein Leerzeichen hinzufüge aber schon:
Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -like '"C:\X3000\Kasse\Transfer.exe" 100 ' } | Select-Object ProcessId
ProcessId
---------
    16276
Ergänzung ()

Aufgefallen ist das Ganze nur,
da diese Transfer.exe eig. von anderen Programmen ursprünglich gestartet werden.

Ich kann sie dann auch ganz normal mit dem ersten Get-WmiObject Command ermitteln.

Nur sobald ein Transfer von mir gestartet wurde, braucht es plötzlich dieses zusätzliche Leerzeichen :freak:
Ergänzung ()

Die zusätzlichen "" bei §fp sind Absicht, damit die Befehlszeile dann exakt so aussieht:
1748169208228.png
 
Zuletzt bearbeitet:
Ich habe im Augenblick kein Windows vor mir, aber das ändert sich morgen wieder.

Bis dahin:
Code:
$tmp = "{0}\s+{1}" -f [regex]::Escape($fp), $argList[0]
Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -match $tmp } | Select-Object ProcessId
 
  • Gefällt mir
Reaktionen: JahniS01
Funktioniert Perfekt - damit bekomm ich die PID in beiden Fällen ausgeben!
Vielen Dank für deine schnelle Hilfe
 
Noch ein Hinweis:
Ich würde "Get-WmiObject" nicht mehr verwenden, weil veraltet, nicht mehr zuverlässig und langsam.

Nimm besser das:
Get-CimInstance Win32_Process
 
  • Gefällt mir
Reaktionen: JahniS01
Zurück
Oben