Как заставить PowerShell дождаться завершения вызова Invoke-Item? Я вызываю неисполняемый элемент, поэтому мне нужно использовать Invoke-Item, чтобы открыть его.
Как заставить PowerShell дождаться завершения Invoke-Item?
Ответы (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
Можете ли вы привести пример?
Invoke-Expression ... | Out-Null
?
- person The Muffin Man; 30.07.2014
@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