source

Powershell 스크립트에서 BAT 파일을 실행하는 가장 안전한 방법

ittop 2023. 4. 12. 22:59
반응형

Powershell 스크립트에서 BAT 파일을 실행하는 가장 안전한 방법

bat 파일을 직접 실행하는 powershell 스크립트를 얻을 수 없습니다.예를 들어, 이는 명령줄에서 작동합니다.

.\\my-app\my-fle.bat

이 명령어를 스크립트에 추가하면 다음 출력이 됩니다.

The term '.\\my-app\my-file.bat' is not recognized as the 
name of a cmdlet, function, script file, or operable program. 
Check the spelling of the name, or if a path was included, 
verify that the path is correct and try again.

다음 시도도 해봤는데 같은 결과가 나왔습니다.

& .\\my-app\my-fle.bat
& ".\\my-app\my-fle.bat"
\my-app\my-fle.bat
& \my-app\my-fle.bat
& "\my-app\my-fle.bat"

주의: 배치 성공 여부를 확인해야 하므로 마지막 종료 코드를 반환해야 합니다.

cmd.exe /c '\my-app\my-file.bat'

.bat을 실행하여 마지막 종료 코드에 액세스하려면 다음과 같이 실행합니다.

 & .\my-app\my-fle.bat

이거 먹어봐, 네 점 소스가 좀 이상했어.편집, OP의 last exit code 비트 추가.

$A = Start-Process -FilePath .\my-app\my-fle.bat -Wait -passthru;$a.ExitCode

더하다-WindowStyle Hidden보이지 않는 배치에 사용됩니다.

다음과 같이 간단하게 할 수 있습니다.

Start-Process -FilePath "C:\PathToBatFile\FileToExecute.bat" -ArgumentList $argstr -Wait -NoNewWindow

여기서,

ArgumentList - bat 파일에서 필요한 경우 매개 변수 또는 매개 변수 값을 전달합니다.

대기 - 프로세스(bat)가 완료될 때까지 대기합니다.

[No New Window] : 현재 콘솔창에서 새 프로세스를 시작합니다.

my-app이 현재 디렉토리의 하위 디렉토리라고 가정합니다.$LASTEXITCODE는 마지막 명령어부터 표시됩니다.

.\my-app\my-fle.bat

파일 공유의 경우:

\\server\my-file.bat

@Rynant의 솔루션은 나에게 효과가 있었다.몇 가지 추가 요구사항이 있었습니다.

  1. bat 파일에서 발견된 경우 일시 중지 안 함
  2. 필요에 따라 bat 파일 출력을 로그 파일에 추가합니다.

(최종적으로는) 다음과 같은 작업을 실시합니다.

[PS 스크립트 코드]

& runner.bat bat_to_run.bat logfile.txt

[runner.bat]

@echo OFF

REM This script can be executed from within a powershell script so that the bat file
REM passed as %1 will not cause execution to halt if PAUSE is encountered.
REM If {logfile} is included, bat file output will be appended to logfile.
REM
REM Usage:
REM runner.bat [path of bat script to execute] {logfile}

if not [%2] == [] GOTO APPEND_OUTPUT
@echo | call %1
GOTO EXIT

:APPEND_OUTPUT
@echo | call %1  1> %2 2>&1

:EXIT

어때invoke-item script.bat.

win_shell ansible 모듈을 사용하더라도 다음과 같은 작업을 수행할 수 있습니다.

- name: Install the WebApp Service
  win_shell: 'Service_Install.bat'
  args:
    executable: cmd
    chdir: 'D:\MyWebApp\Services'
  register: result

여기서D:\MyWebApp\Services를 사용하는 장소입니다..bat파일을 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/20645326/safest-way-to-run-bat-file-from-powershell-script

반응형