문제

나는 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> 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top