Как заставить PowerShell дождаться завершения Invoke-Item?

Как заставить PowerShell дождаться завершения вызова Invoke-Item? Я вызываю неисполняемый элемент, поэтому мне нужно использовать Invoke-Item, чтобы открыть его.


person arathorn    schedule 23.04.2010    source источник


Ответы (4)


К сожалению, вы не можете напрямую использовать командлет Invoke-Item. Эта команда let имеет возвращаемый тип void и не имеет параметров, допускающих ожидание.

Лучший доступный вариант - определить свою собственную функцию, которая обертывает Process API следующим образом.

function Invoke-Command() {
    param ( [string]$program = $(throw "Please specify a program" ),
            [string]$argumentString = "",
            [switch]$waitForExit )

    $psi = new-object "Diagnostics.ProcessStartInfo"
    $psi.FileName = $program 
    $psi.Arguments = $argumentString
    $proc = [Diagnostics.Process]::Start($psi)
    if ( $waitForExit ) {
        $proc.WaitForExit();
    }
}
person JaredPar    schedule 23.04.2010

Просто используйте Start-Process -wait, например Start-Process -wait c:\image.jpg. Это должно работать так же, как и у @JaredPar.

person stej    schedule 23.04.2010

Передайте вашу команду Out-Null.

person Shay Levy    schedule 24.04.2010
comment
Можете ли вы привести пример? Invoke-Expression ... | Out-Null? - person The Muffin Man; 30.07.2014
comment
@TheMuffinMan `myprogram.exe | Out-Null ` stackoverflow.com/a/7908022/217593 - person Michael Sync; 18.10.2016

Один простой способ

$session = New-PSSession -ComputerName "xxxxx" -Name "mySession"
$Job = Invoke-Command -Session $session -FilePath "xxxxx" -AsJob
Wait-Job -Job $Job
person Dr Coyo    schedule 14.10.2016