프로그램 파일에서 EXE를 사용하여 발현을 호출합니다
-
20-09-2019 - |
문제
나는 PowerShell 명령을 실행하여 7-zip을 호출하여 다음 명령을 사용하여 폴더를 지그팅하려고합니다.
$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command
$ 명령에 공급되는 변수는 이미 설정되었고 $ 7zip은 "c : program files 7-zip 7z.exe"입니다.
이것은 작동하지 않으며 PowerShell에서 7 zip을 호출하는 가장 좋은 방법을 해결하려고합니다. 아이디어?
해결책
나는 전에 같은 문제를 겪었습니다. 이것은 현재 사용하고있는 백업 스크립트에서 바로 코드입니다.
[string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
[Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;
& $pathToZipExe $arguments;
콜 연산자와 인수 배열을 사용하는 습관을 들었습니다. 다른 방법보다 더 강력한 것 같습니다.
다른 팁
invoke-expression을 사용할 필요가 없습니다. 호출 (호출) 연산자 만 사용하십시오. &
실행하라는 명령의 이름을 부르는 문자열을 호출합니다. 이 경우 매개 변수를 별도로 유지하려고합니다. 즉, String Sevenzip은 예를 들어 예를 들어야합니다.
&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName
실제로 호출 발현이 필요하지 않습니다. 다음과 같은 앰퍼 랜드를 사용하여 명령을 호출 할 수 있습니다.
&$Command
그러나 시작 프로세스 CMDLET도 있습니다. 위의 문자열로 명령을 실행하면 $ 7zip에 공간이 포함되어 있고 인용되지 않은 경우 오류가 발생하기 쉽습니다. 대신 나는 다음을 사용한다 :
Start-Process $SevenZip "...rest..."
나는이 문제에 대해서도 달려 갔다. 여기 내 해결책이있다.
invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "
나는 단일 따옴표 외부에 내 매개 변수를 내 exe를 가리키는 것을 남길 수 있었는데, 이것은 아마도 invoke-expression을 사용하여 매개 변수로 Exe를 호출하는 가장 쉬운 방법이라고 생각합니다.
"c : program"을 호출하려고하는 것 같아요?
PS의 올바른 구문은 확실하지 않지만 그 공간에 대해 무언가를해야합니다.
나를 위해 일 :
$command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Write-Host "Running: $command"
Invoke-Expression $command
Windows PowerShell 스크립트 내에서 MS-DOS 명령을 사용할 수도 있습니다.
나는 항상 cmd.exe의 start 명령을 좋아했으며,이를 통해 병렬로 명령을 시작할 수 있습니다.
따라서 7- zip을 시작하려면 다음 명령을 PowerShell 스크립트에 넣으십시오.
cmd.exe /c start <your 7-zip command like in MS-DOS>