Start-Process deinstalliert nicht als BackGroundJob (PowerShell)
Hallo @ All
Wieder einmal komme ich in Powershell nicht weiter und hoffe (wieder einmal) auf eure Hilfe!!
In diesem Thread habe ich diese Frage schon gestellt und beantwortet geglaubt, stieß jetzt aber wieder auf ein neues Problem: Start-Process gibt tlw. keinen ReturnCode aus (PowerShell)
Das aktuelle Problem:
Es geht darum eine Software silent zu deinstallieren und für die Dauer des Uninstalls in der PS-Console als Pseudo-Progressbar eine paar Sternchen auszugeben. Dazu Prüfe ich erst mal ob die Software am Client vorhanden ist und bereite den UninstallString aus der Registry entsprechend auf für Start-Process.
Ich übergebe die fertig angepassten Argumente an die Function unten. Die Argumente werden mit Write-Host in der Consloe so ausgegeben:
$FilePath: MSIEXEC.EXE
$ArgumentList: /X {C22FF2F7-BA18-4C1B-A86E-82424058293B} REBOOT=REALLYSUPPRESS MSIRESTARTMANAGERCONTROL=DISABLE /qn /l*v+ "C:\Logs\TESTsoftware 2014-03-31 11.02.36 _UNIN_.Log"
Starte ich das mit folgender Syntax so in der Console funktioniert der Uninstall:
Start-Process -FilePath "MSIEXEC.EXE" -ArgumentList '/X {C22FF2F7-BA18-4C1B-A86E-82424058293B} REBOOT=REALLYSUPPRESS MSIRESTARTMANAGERCONTROL=DISABLE /qn /l*v+ "C:\Logs\TESTsoftware 2014-03-31 11.02.36 _UNIN_.Log"' -wait
übergebe ich das an die Function und lasse es ausführen, bekomme ich entweder einen Fehler...
Start-Process : Es wurde kein Positionsparameter gefunden, der das Argument "C:\Logs\TESTsoftware" akzeptiert.
In Zeile:1 Zeichen:1
+ CategoryInfo : InvalidArgument: (
[Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
... oder es passiert Garnichts. Es laufen die Sternchen, kein RC und die Software ist nicht deinstalliert.
Lasse ich das Logging weg ( /l*v+ "C:\Logs\TESTsoftware 2014-03-31 11.02.36 _UNIN_.Log" ) funktionierts auch.
Der Fehler liegt also in der Syntax beim übergeben des Argument-Strings. Bekomme es aber irgendwie nicht gebacken den String so zu übergeben, dass das Logging drinnen ist. Gibt es da eventuell einen Kniff?
Function Uninstall {
[CmdletBinding()]
param ($FilePath, $Arguments)
$ReturnCode = @{}
$BackGroundWorker = [Powershell]::Create().AddScript({
param($result)
$rc = Start-Process -FilePath $FilePath -ArgumentList $Arguments -PassThru -Wait
$result.ExitCode = $rc.ExitCode
}).AddArgument($ReturnCode)
$BackGroundWorker.BeginInvoke()| Out-null
while($BackGroundWorker.InvocationStateInfo.State -eq "Running"){
write-host "*" -NoNewLine
sleep(2)
}
return $ReturnCode
}
Vielen Dank für die Unterstützung!
Mayho
Wieder einmal komme ich in Powershell nicht weiter und hoffe (wieder einmal) auf eure Hilfe!!
In diesem Thread habe ich diese Frage schon gestellt und beantwortet geglaubt, stieß jetzt aber wieder auf ein neues Problem: Start-Process gibt tlw. keinen ReturnCode aus (PowerShell)
Das aktuelle Problem:
Es geht darum eine Software silent zu deinstallieren und für die Dauer des Uninstalls in der PS-Console als Pseudo-Progressbar eine paar Sternchen auszugeben. Dazu Prüfe ich erst mal ob die Software am Client vorhanden ist und bereite den UninstallString aus der Registry entsprechend auf für Start-Process.
Ich übergebe die fertig angepassten Argumente an die Function unten. Die Argumente werden mit Write-Host in der Consloe so ausgegeben:
$FilePath: MSIEXEC.EXE
$ArgumentList: /X {C22FF2F7-BA18-4C1B-A86E-82424058293B} REBOOT=REALLYSUPPRESS MSIRESTARTMANAGERCONTROL=DISABLE /qn /l*v+ "C:\Logs\TESTsoftware 2014-03-31 11.02.36 _UNIN_.Log"
Starte ich das mit folgender Syntax so in der Console funktioniert der Uninstall:
Start-Process -FilePath "MSIEXEC.EXE" -ArgumentList '/X {C22FF2F7-BA18-4C1B-A86E-82424058293B} REBOOT=REALLYSUPPRESS MSIRESTARTMANAGERCONTROL=DISABLE /qn /l*v+ "C:\Logs\TESTsoftware 2014-03-31 11.02.36 _UNIN_.Log"' -wait
übergebe ich das an die Function und lasse es ausführen, bekomme ich entweder einen Fehler...
Start-Process : Es wurde kein Positionsparameter gefunden, der das Argument "C:\Logs\TESTsoftware" akzeptiert.
In Zeile:1 Zeichen:1
Start-Process -FilePath "MSIEXEC.EXE" -ArgumentList "/X {C22FF2F7-BA18-4C1B-A86E ...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.StartProcessCommand
... oder es passiert Garnichts. Es laufen die Sternchen, kein RC und die Software ist nicht deinstalliert.
Lasse ich das Logging weg ( /l*v+ "C:\Logs\TESTsoftware 2014-03-31 11.02.36 _UNIN_.Log" ) funktionierts auch.
Der Fehler liegt also in der Syntax beim übergeben des Argument-Strings. Bekomme es aber irgendwie nicht gebacken den String so zu übergeben, dass das Logging drinnen ist. Gibt es da eventuell einen Kniff?
Function Uninstall {
[CmdletBinding()]
param ($FilePath, $Arguments)
$ReturnCode = @{}
$BackGroundWorker = [Powershell]::Create().AddScript({
param($result)
$rc = Start-Process -FilePath $FilePath -ArgumentList $Arguments -PassThru -Wait
$result.ExitCode = $rc.ExitCode
}).AddArgument($ReturnCode)
$BackGroundWorker.BeginInvoke()| Out-null
while($BackGroundWorker.InvocationStateInfo.State -eq "Running"){
write-host "*" -NoNewLine
sleep(2)
}
return $ReturnCode
}
Vielen Dank für die Unterstützung!
Mayho
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 233955
Url: https://administrator.de/forum/start-process-deinstalliert-nicht-als-backgroundjob-powershell-233955.html
Ausgedruckt am: 02.04.2025 um 05:04 Uhr
2 Kommentare
Neuester Kommentar
ähm das doppelte Dollarzeichen ist da nicht gut platziert:
Grüße Uwe
p.s. und nutze in Zukunft Code-Tags für deinen Code ...merci.
$$rc = Start-Process ......
p.s. und nutze in Zukunft Code-Tags für deinen Code ...merci.