조건부 실행 (&& 및 ||)
이미 제 문제를 해결하는 질문이 있습니다(Powershell에서 &&을 일할 수 있을까요?). 하지만 한 가지 차이점이 있습니다.두 명령 모두 출력이 필요합니다.내가 그냥 달려가면,
(command1 -arg1 -arg2) -and (command2 -arg1)
출력은 보이지 않지만 stderr 메시지가 표시됩니다.그리고, 예상대로, 그냥 타이핑:
command1 -arg1 -arg2 -and command2 -arg1
구문 오류를 제공합니다.
2019: 파워셸 팀은 파워셸에 대한 지원을 추가하는 것을 고려하고 있습니다 - 이 GitHub PR에 참여합니다.
시도해 보기:
$(command -arg1 -arg2 | Out-Host;$?) -and $(command2 -arg1 | Out-Host;$?)
그$()
는 파이프라인을 포함한 여러 문을 지정할 수 있는 하위 표현식입니다.그런 다음 명령과 파이프를 실행합니다.Out-Host
보실 수 있습니다.다음 문장(하위 식의 실제 출력)이 출력되어야 합니다.$?
마지막 명령의 성공 결과입니다.
그$?
네이티브 명령(console exe's)의 경우는 잘 작동하지만 cmdlet의 경우는 부족한 점이 있습니다.그것은,$?
돌아오는 것만 같습니다.$false
cmdlet에서 종료 오류가 발생했을 때.그런 것 같습니다.$?
최소한 세 가지 상태(failed, 성공 및 부분 성공)가 필요합니다.따라서 cmdlet을 사용하는 경우 더 효과적입니다.
$(command -arg1 -arg2 -ev err | Out-Host;!$err) -and
$(command -arg1 -ev err | Out-Host;!$err)
이런 바람은 여전합니다.아마도 이런 것이 더 나을 것입니다.
function ExecuteUntilError([scriptblock[]]$Scriptblock)
{
foreach ($sb in $scriptblock)
{
$prevErr = $error[0]
. $sb
if ($error[0] -ne $prevErr) { break }
}
}
ExecuteUntilError {command -arg1 -arg2},{command2-arg1}
파워쉘 7 미리보기 5에 있어요.이것이 왜 알림도 설명도 없이 삭제되었는지 모르겠습니다.https://devblogs.microsoft.com/powershell/powershell-7-preview-5/ 이렇게 하면 질문이 요청한 대로 두 명령이 모두 출력됩니다.
echo 'hello' && echo 'there'
hello
there
echo 'hello' || echo 'there'
hello
여러 단계의 스크립트를 단순화하기 위해 이 || 1번 출구는 다음과 같은 것을 사용합니다.
function ProceedOrExit {
if ($?) { echo "Proceed.." } else { echo "Script FAILED! Exiting.."; exit 1 }
}
doThis; ProceedOrExit
doNext
# or for long doos
doThis
ProceedOrExit
doNext
업데이트: PowerShell [Core] 7.0 도입 및 지원 - 이 답변을 참조하십시오.
Bash의 /'s 및 컨트롤 연산자에는 Windows PowerShell과 동등한 기능이 없으므로 사용자 지정 연산자를 정의할 수 없으므로 좋은 해결 방법이 없습니다.
- 그
| Out-Host
Keith Hill의 답변에 기반한 해결책은 정상적인 명령 출력을 콘솔(단말기)에만 전송할 수 있어 출력이 파이프라인을 통해 전송되거나 변수 또는 파일에 캡처되는 것을 방지할 수 있다는 점에서 매우 제한적입니다.
이 답변에서 배경 정보를 찾습니다.
가장 간단한 해결책은
powershell command1 && powershell command2
cmd 껍질로물론 이것은 .ps1 스크립트에서는 사용할 수 없기 때문에 그 한계가 있습니다.
조금 더 긴 길이 아래에 보입니다.
try {
hostname
if ($lastexitcode -eq 0) {
ipconfig /all | findstr /i bios
}
} catch {
echo err
} finally {}
7.0&&
그리고.||
됩니다.
https://devblogs.microsoft.com/powershell/announcing-powershell-7-0/
New operators:
Ternary operator: a ? b : c
Pipeline chain operators: || and &&
Null coalescing operators: ?? and ??=
언급URL : https://stackoverflow.com/questions/2251622/conditional-execution-and-in-powershell
'programing' 카테고리의 다른 글
PHP의 Laravel에서 laravel.log를 지우려면 어떻게 해야 합니까? (0) | 2023.10.01 |
---|---|
HANDLES에 fdopen과 동등한 윈도우가 있습니까? (0) | 2023.10.01 |
Pyspark: 여러 배열 열을 행으로 나눕니다. (0) | 2023.10.01 |
폭 100% 테이블 넘침 디브용기 (0) | 2023.09.26 |
전송된 요청이 Ajax 요청인 경우 Managed Bean에서 리디렉션하는 방법은 무엇입니까? (0) | 2023.09.26 |