2013-02-06 15 views
5

Czytałem wszystkie odpowiedzi związane z tym pytaniem, ale żaden z nich nie działa.Jak sprawić, aby Power Shell czekał na instalację exe?

Mam te linie dzieje się w skrypcie:

$exe = ".\wls1033_oepe111150_win32.exe" 
$AllArgs = @('-mode=silent', '-silent_xml=silent_install.xml', '-log=wls_install.log"') 
$check = Start-Process $exe $AllArgs -Wait -Verb runAs 
$check.WaitForExit() 

Następnie biegnie mam czek regex o zainstalowanych plików, które zastępuje niektóre szczególne struny, ale bez względu na to, co staram się zrobić kontynuuje uruchamianie sprawdzania regex podczas instalacji programu.

Jak mogę to zrobić, aby następna linia nie została wykonana, dopóki nie zakończy się instalacja exe? Próbowałem też wypróbować Out-Null bez powodzenia.

+0

chciałbym podejrzewać, że tarło instalatora Inny sposób wykonanie instalacji. –

Odpowiedz

8

Stworzyłem testowy plik wykonywalny, który zrobił następującą

Console.WriteLine("In Exe start" + System.DateTime.Now); 
    System.Threading.Thread.Sleep(5000); 
    Console.WriteLine("In Exe end" + System.DateTime.Now); 

Potem napisał ten skrypt powershell, który zgodnie z oczekiwaniami czeka na exe, aby zakończyć uruchomiony przed wpisywanie tekstu „koniec PS1” oraz czas

push-location "C:\SRC\PowerShell-Wait-For-Exe\bin\Debug"; 
$exe = "PowerShell-Wait-For-Exe.exe" 
$proc = (Start-Process $exe -PassThru) 
$proc | Wait-Process 

Write-Host "end of ps1" + (Get-Date).DateTime 

Ta kolejna poprawka również poprawnie czeka na zakończenie exe.

$check = Start-Process $exe $AllArgs -Wait -Verb runas 
Write-Host "end of ps1" + (Get-Date).DateTime 

Dodanie wywołania WaitForExit daje mi ten błąd.

You cannot call a method on a null-valued expression. 
At line:2 char:1 
+ $check.WaitForExit() 
+ ~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [], RuntimeException 
    + FullyQualifiedErrorId : InvokeMethodOnNull 

Jednak to działa

$p = New-Object System.Diagnostics.Process 
$pinfo = New-Object System.Diagnostics.ProcessStartInfo("C:\PowerShell-Wait-For-Exe\bin\Debug\PowerShell-Wait-For-Exe.exe",""); 
$p.StartInfo = $pinfo; 
$p.Start(); 
$p.WaitForExit(); 
Write-Host "end of ps1" + (Get-Date).DateTime 

Myślę, że jesteś mylące polecenia PowerShell Uruchomienie procesu z obiektem .NET framework Process

+0

Wygląda na to, że ostatni zwycięzca. Pierwsze dwa wydawały się w ogóle nie działać. Jednak JA zmusiłem dwóch do pomieszania. Dzięki za to wyjaśnienie. Domyślam się, że Google nie jest cały czas moim przyjacielem. –

Powiązane problemy