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

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

Ответы

Ответ 1

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

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

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();
    }
}

Ответ 2

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

Ответ 3

Подключите свою команду к Out-Null.

Ответ 4

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

$session = New-PSSession -ComputerName "xxxxx" -Name "mySession"
$Job = Invoke-Command -Session $session -FilePath "xxxxx" -AsJob
Wait-Job -Job $Job