많은 응용 프로그램을 여는 PowerShell 1.0 스크립트가 있습니다. 첫 번째는 가상 머신이고 다른 하나는 개발 애플리케이션입니다. 나머지 응용 프로그램을 열기 전에 가상 컴퓨터의 부팅을 완료하고 싶습니다.
bash에서 나는 단지 말할 수있다. "cmd1 && cmd2"
이것이 내가 가진 것입니다 …
C:\Applications\VirtualBox\vboxmanage startvm superdooper
&"C:\Applications\NetBeans 6.5\bin\netbeans.exe"
답변
일반적으로 내부 명령의 경우 PowerShell은 다음 명령을 시작하기 전에 대기합니다. 이 규칙의 한 가지 예외는 외부 Windows 하위 시스템 기반 EXE입니다. 첫 번째 요령은 Out-Null
다음과 같이 파이프 라인을 만드는 것입니다.
Notepad.exe | Out-Null
PowerShell은 Notepad.exe 프로세스가 종료 될 때까지 기다렸다가 계속 진행합니다. 그것은 코드를 읽는 것에서 선택하는 것이 좋지만 미묘합니다. Start-Process를 -Wait 매개 변수와 함께 사용할 수도 있습니다.
Start-Process <path to exe> -NoNewWindow -Wait
PowerShell Community Extensions 버전을 사용하는 경우 버전은 다음과 같습니다.
$proc = Start-Process <path to exe> -NoNewWindow -PassThru
$proc.WaitForExit()
PowerShell 2.0의 또 다른 옵션은 백그라운드 작업을 사용하는 것입니다.
$job = Start-Job { invoke command here }
Wait-Job $job
Receive-Job $job
답변
를 사용하는 것 외에도 Start-Process -Wait
실행 파일의 출력을 파이핑하면 Powershell이 대기합니다. 필요에 따라, 나는 일반적으로 파이프 것 Out-Null
, Out-Default
, Out-String
또는 Out-String -Stream
. 다음 은 몇 가지 다른 출력 옵션 목록입니다.
# Saving output as a string to a variable.
$output = ping.exe example.com | Out-String
# Filtering the output.
ping stackoverflow.com | where { $_ -match '^reply' }
# Using Start-Process affords the most control.
Start-Process -Wait SomeExecutable.com
참조한 CMD / Bash 스타일 연산자 (&, &&, ||)가 누락되었습니다. 우리는 Powershell 에 대해 더 장황 해야 할 것 같습니다 .
답변
“Wait-process”를 사용하십시오.
"notepad","calc","wmplayer" | ForEach-Object {Start-Process $_} | Wait-Process ;dir
일이 끝났다
답변
당신이 사용하는 경우 Start-Process <path to exe> -NoNewWindow -Wait
-PassThru
옵션을 사용하여 출력을 에코 할 수도 있습니다 .
답변
일부 프로그램은 파이프를 사용하여 출력 스트림을 잘 처리하지 못할 수 있습니다 Out-Null
.
그리고 편리하지 않은 인수를 전달 Start-Process
하는 -ArgumentList
스위치가 필요합니다 .
또 다른 접근법이 있습니다.
$exitCode = [Diagnostics.Process]::Start(<process>,<arguments>).WaitForExit(<timeout>)
답변
옵션을 포함하면 -NoNewWindow
오류가 발생합니다.Start-Process : This command cannot be executed due to the error: Access is denied.
내가 일할 수있는 유일한 방법은 전화하는 것입니다.
Start-Process <path to exe> -Wait
답변
더 나아가면 즉시 파싱 할 수도 있습니다.
예 :
& "my.exe" | %{
if ($_ -match 'OK')
{ Write-Host $_ -f Green }
else if ($_ -match 'FAIL|ERROR')
{ Write-Host $_ -f Red }
else
{ Write-Host $_ }
}