PowerShell에서 배치 파일을 실행하여 상태 및 표준 출력을 얻습니다.
5567 단어 PowerShell
명령의 직접 실행이 가장
PowerShell에서 명령을 실행할 때는 start-process
등은 개입하지 않고 직접 실행하는 것이 좋다.
처음 이런 것을 쓰고 있었지만 이것이 전혀 잘 안된다. 아래의 코드에서는 Standard Output 등이 출력되지 않는다. .NET의 Process를 사용하는 방법도 있지만 귀찮기 때문에 직접 실행이 좋다.
function StopOnFailedExecution($exitCode) {
if ($exitCode -Ne 0)
{
Write-Host $exitCode
exit $exitCode
}
}
$result=start-process "cmd.exe" "/c .\Test.bat" -Wait -PassThru -NoNewWindow
$stdout=$result.StandardOutput
$stderr=$result.StandardError
Write-Host $stdout
Write-Host $stderr
StopOnFailedExecution($result.ExitCode)
Write-Host "success"
echo Hello!
exit 1
PowerShell ISE는 BOM에 주의
처음에는 Test.bat
의 편집을 PowerShell ISE
에서 실시했지만, 이것이 비극을 낳았다. PowerShell ISE는 파일을 BOM으로 저장하지만 cmd.exe는 BOM을 해석하지 않는 것 같습니다. 다음과 같은 오류가 발생합니다. 해결을 위해서는 VSCode 등
C:\Users\tsushi\Code\spike\PowerShell\TestExit.ps1
C:\Users\tsushi\Code\spike\PowerShell>echo Hello!
cmd.exe : 'echo' is not recognized as an internal or external command,
At C:\Users\tsushi\Code\spike\PowerShell\TestExit.ps1:8 char:1
+ cmd.exe /c ".\Test.bat"
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ('echo' is no...ternal command,:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
operable program or batch file.
VScode 등으로 bom이 없으면 작동합니다.
function StopOnFailedExecution {
if ($LASTEXITCODE)
{
Write-Host $LASTEXITCode
exit $LASTEXITCODE
}
}
cmd.exe /c ".\Test.bat"
StopOnFailedExecution($result.ExitCode)
Write-Host "success"
Result
> C:\Users\tsushi\Code\spike\PowerShell\TestExit.ps1
C:\Users\tsushi\Code\spike\PowerShell>echo Hello!
Hello!
C:\Users\tsushi\Code\spike\PowerShell>exit 1
1
Reference
이 문제에 관하여(PowerShell에서 배치 파일을 실행하여 상태 및 표준 출력을 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/TsuyoshiUshio@github/items/7ce61bb4d1d0dc89b090
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
function StopOnFailedExecution($exitCode) {
if ($exitCode -Ne 0)
{
Write-Host $exitCode
exit $exitCode
}
}
$result=start-process "cmd.exe" "/c .\Test.bat" -Wait -PassThru -NoNewWindow
$stdout=$result.StandardOutput
$stderr=$result.StandardError
Write-Host $stdout
Write-Host $stderr
StopOnFailedExecution($result.ExitCode)
Write-Host "success"
echo Hello!
exit 1
처음에는
Test.bat
의 편집을 PowerShell ISE
에서 실시했지만, 이것이 비극을 낳았다. PowerShell ISE는 파일을 BOM으로 저장하지만 cmd.exe는 BOM을 해석하지 않는 것 같습니다. 다음과 같은 오류가 발생합니다. 해결을 위해서는 VSCode 등C:\Users\tsushi\Code\spike\PowerShell\TestExit.ps1
C:\Users\tsushi\Code\spike\PowerShell>echo Hello!
cmd.exe : 'echo' is not recognized as an internal or external command,
At C:\Users\tsushi\Code\spike\PowerShell\TestExit.ps1:8 char:1
+ cmd.exe /c ".\Test.bat"
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: ('echo' is no...ternal command,:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
operable program or batch file.
VScode 등으로 bom이 없으면 작동합니다.
function StopOnFailedExecution {
if ($LASTEXITCODE)
{
Write-Host $LASTEXITCode
exit $LASTEXITCODE
}
}
cmd.exe /c ".\Test.bat"
StopOnFailedExecution($result.ExitCode)
Write-Host "success"
Result
> C:\Users\tsushi\Code\spike\PowerShell\TestExit.ps1
C:\Users\tsushi\Code\spike\PowerShell>echo Hello!
Hello!
C:\Users\tsushi\Code\spike\PowerShell>exit 1
1
Reference
이 문제에 관하여(PowerShell에서 배치 파일을 실행하여 상태 및 표준 출력을 얻습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TsuyoshiUshio@github/items/7ce61bb4d1d0dc89b090텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)