Как заставить PowerShell ждать завершения Invoke-Item? - PullRequest
15 голосов
/ 23 апреля 2010

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

Ответы [ 4 ]

18 голосов
/ 23 апреля 2010

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

14 голосов
/ 25 апреля 2010

Отправьте свою команду в Out-Null.

8 голосов
/ 23 апреля 2010

К сожалению, вы не можете напрямую использовать командлет 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();
    }
}
0 голосов
/ 14 октября 2016

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

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