programing

명령줄 명령을 동적으로 생성한 다음 powershell을 사용하여 호출

stoneblock 2023. 9. 1. 20:31

명령줄 명령을 동적으로 생성한 다음 powershell을 사용하여 호출

파워셸을 사용하여 '&' 문자를 사용하여 다른 응용 프로그램을 실행하고 매개 변수를 전달할 수 있습니다.

간단한 예입니다.

$notepad = 'notepad'
$fileName = 'HelloWorld.txt'

# This will open HelloWorld.txt
& $notepad $fileName   

좋아요.하지만 비즈니스 로직을 사용하여 명령 문자열을 동적으로 생성하려면 어떻게 해야 합니까?동일한 간단한 예 사용:

$commandString = @('notepad', 'HelloWorld.txt') -join ' ';
& $commandString

오류가 발생했습니다.

'notepad HelloWorld.txt'라는 용어는 cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램의 이름으로 인식되지 않습니다.이름의 철자를 확인하거나 경로가 포함된 경우 경로가 올바른지 확인한 후 다시 시도하십시오.

실제 예제에서는 마지막 명령줄 문자열에 옵션을 동적으로 추가하거나 제거하려고 합니다.제가 이것에 대해 할 수 있는 방법이 있나요?

이를 위한 두 가지 방법:

  1. 인수에서 exe 분리

    인수에 대한 모든 동적 작업을 수행하지만 변수가 이후에 인수를 보유한 상태에서 exe를 정상적으로 호출합니다.

    $exe = 'notepad'
    $argument = '"D:\spaced path\HelloWorld.txt"'
    &$exe $argument
    
    #or
    notepad $argument
    

    두 개 이상의 인수가 있는 경우 호출의 실행 부분과 분리될 경우 인수를 배열로 만들어야 합니다.

    $exe = 'notepad'
    $arguments = '"D:\spaced path\HelloWorld.txt"','--switch1','--switch2'
    &$exe $arguments
    
  2. 호출-식 사용

    모든 항목이 문자열에 포함되어야 하는 경우 문자열을 정규식인 것처럼 호출할 수 있습니다.Invoke-Expression의 별칭도 있습니다.iex.

    $exp = 'notepad "D:\spaced path\HelloWorld.txt"'
    Invoke-Expression $exp
    

두 경우 모두 인수와 exe의 내용을 따옴표로 묶고 명령줄에 바로 쓰는 것처럼 적절하게 형식을 지정해야 합니다.

문자열을 구성하는 논리를 유지하려면 다음을 수행합니다.

$commandString = @('notepad', 'HelloWorld.txt') -join ' '

&([scriptblock]::create($commandstring))

언급URL : https://stackoverflow.com/questions/6604089/dynamically-generate-command-line-command-then-invoke-using-powershell