PowerShell에서 변수에 저장된 명령 실행


152

PowerShell의 변수에 빌드하고 저장 한 명령이 있습니다. 이 명령은 Write-Host 를 수행하고 표준 cmd.exe창에 복사하여 붙여 넣을 경우 작동합니다 .

스크립트 내에서이 명령을 어떻게 실행합니까?

나는 Invoke-Command 또는 Invoke-Expression의 여러 조합을 운없이 시도했습니다.

이것이 내가 변수를 만든 방법입니다.

$cmd1 = $arcprg + $arcdir + "\" + $site1 + "-" + $hst + "-" + $yesterday + ".zip " + $logpath1 + "u_ex" + $yesterday + ".log"

변수가 화면에 인쇄되면 다음과 같이 나타납니다.

7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log

답변:


207

다음은 Invoke-Expression두 가지 변수가 없는 또 다른 방법입니다 (command : string 및 parameters : array). 그것은 나를 위해 잘 작동합니다. 7z.exe시스템 경로에 있다고 가정하십시오 .

$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& $cmd $prm

명령이 알려져 있고 (7z.exe) 매개 변수 만 변수이면이 작업이 수행됩니다.

$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& 7z.exe $prm

Invoke-Expression하나의 매개 변수가있는 BTW 도 나에게 효과적입니다.

$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'

Invoke-Expression $cmd

추신 : 나는 일반적으로에 대한 표현식을 작성하는 것보다 프로그래밍 방식으로 작성하는 것이 더 쉽기 때문에 매개 변수 배열을 선호합니다 Invoke-Expression.


그거 좋네. 지금 함께오고 있습니다. 'c : \ temp \ with space \ test1.zip'대신 $ variable을 사용할 수 있습니까? ""또는 ''위치에 배치해야합니까?
트래비스

스플래 팅은 똑같이 작동하는 것 같습니다 : & $ cmd @prm하지만 왜 그런지 궁금합니다
C2H5OH

44

다음을 사용하여 명령을 호출하십시오 Invoke-Expression.

Invoke-Expression $cmd1

내 컴퓨터에서 작동하는 예는 다음과 같습니다.

$cmd = "& 'C:\Program Files\7-zip\7z.exe' a -tzip c:\temp\test.zip c:\temp\test.txt"
Invoke-Expression $cmd

iex당신이 할 수 있는 별칭 입니다 Invoke-Expression:

iex $cmd1

전체 목록 : https://ss64.com/ps/ 에서 자세한 Powershell내용을 확인하십시오.

행운을 빕니다...


'7z.exe a -tzip c : \ arc_logs \ site-host-at-web1-100827.zip c : \ inetpub \ logs \ logfiles \ w3svc1 \ u_ex100827.log'라는 용어는 a의 이름으로 인식되지 않습니다. cmdlet, 함수, 스크립트 파일 또는 작동 가능한 프로그램 이름의 철자를 확인하거나 경로가 포함 된 경우 경로가 올바른지 확인한 후 다시 시도하십시오. : line : 14 char : 1 + & <<<< $ cmd1
Travis

@ 트래비스 : 죄송합니다. 앰퍼샌드는 인수가 없으면 작동합니다. 귀하의 명령에 대한 해결책으로 게시물을 업데이트했습니다.
kbrimington

이전에 invoke-expression을 시도했지만 작동하지 않았습니다. 오류가 발생했습니다 : 잘못된 숫자 상수 : 7. At : line : 1 char : 2 + 7z <<<< .exe a -tzip c : \ arc_logs \ site-host-at-web1-100827.zip c : \ inetpub \ logs \ logfiles \ w3svc1 \ u_ex100827.log 실행하는 대신 평가하려고하는 것 같습니다.
Travis

@Travis : 7z.exe가 경로에 있지 않을 수 있습니다. 경로에 있는지 확인하거나 식의 실행 파일에 전체 경로 이름을 지정하십시오.
kbrimington

1
@ Travis : 나는 내 시스템에서 7z.exe가 명령 프롬프트에서 입력하여 설명 한 오류를 주 었음을 확인했지만 7z.exe의 전체 경로를 사용하여 7z.exe를 'C:\Program Files\7-zip\7z.exe'실행할 수 있음을 확인했습니다.
kbrimington
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.