2013-02-06 12 views
5

Quindi ho letto ogni singola risposta relativa a questa domanda ma nessuna sembra funzionare.Come rendere PowerShell in attesa dell'installazione di exe?

io ho queste linee in corso nello script:

$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() 

Dopo questo corre ho un assegno regex sui file installati che sostituisce alcune stringhe specifiche, ma non importa quello che cerco di farlo continua a eseguire il controllo regex durante l'installazione del programma.

Come posso fare in modo che la riga successiva non venga eseguita fino alla fine dell'installazione dell'exe? Ho anche provato a fare piping su Out-Null senza fortuna.

+0

Ho il sospetto che il programma di installazione di spawn un altro processo per facendo l'installazione. –

risposta

8

ho creato un file eseguibile di prova che ha fatto il seguente

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

Poi ha scritto questo script PowerShell che, come attese previsto per l'exe per completare l'esecuzione prima di emettere il testo "fine della PS1" e il tempo

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 

Questo PowerShell seguente attende anche che l'exe termini correttamente.

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

L'aggiunta della chiamata WaitForExit mi dà questo errore.

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

Tuttavia, questo funziona

$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 

Penso che forse si sta confondendo il comando PowerShell avvio di processo con l'oggetto .NET framework di processo

+0

Quindi sembra che l'ultimo sia un vincitore. I primi due non sembravano funzionare affatto. Tuttavia, mi sono confuso i due. Grazie per questo chiarimento. Suppongo che google non sia proprio il mio amico tutto il tempo. –

Problemi correlati