답변:
DotNetZip 을 사용하면 PowerShell에서이 작업을 수행 할 수 있습니다. 한 줄짜리가 아니지만 라이브러리에서 필요한 PowerShell 스크립트를 작성할 수 있습니다.
COM 인터페이스를 사용할 수도 있습니다 ( Windows PowerShell로 파일 압축을 참조한 다음 Windows Vista 사이드 바 가제트 패키지 참조) .
인터넷 검색 "zip powershell"또는 "unzip powershell"도 유용한 결과를 얻을 수 있습니다.
이것은 외부 도구없이 Powershell에서 순수하게 수행 할 수있는 방법입니다. test.zip이라는 파일을 현재 작업 디렉토리에 압축 해제합니다 :
$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())
$destination.Copyhere($zip_file.items())
은 실제 압축 해제를 수행합니다.
function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
이제 .NET Framework 4.5에는 다음 과 같이 사용할 수 있는 ZipFile 클래스가 있습니다.
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
당신은 체크 아웃하실 수 있습니다 PowerShell을 커뮤니티 확장 (PSCX) 이 특별히 cmdlet을 가지고있다.
몇 년 동안 사용하고 UNIX 환경에서 사용하는 infozip 바이너리를 사용하는 가장 간단한 솔루션을 찾습니다.
PS> zip -9r ../test.zip *
PS> cd ..
PS> unzip -t test.zip Archive: test.zip
testing: LinqRepository/ OK
testing: LinqRepository/ApplicationService.cs OK
testing: LinqRepository/bin/ OK
...
No errors detected in compressed data of test.zip.
텍스트 출력 주위에 powershell 래퍼를 배치하는 것이 쉽지만 실제로는 필요하지 않으므로 방해하지 않았습니다.
또한 Info-ZIP (대부분의 다른 Zip 유틸리티에있는 Zip 엔진)와 7-Zip도 좋아합니다. GUI와 명령 줄 Zip 유틸리티가 모두 있습니다. 요점은 대부분의 PowerShell 작업에 사용할 수있는 훌륭한 명령 줄 유틸리티가 있다는 것입니다.
PowerShell을 염두에두고 빌드되지 않은 명령 줄 유틸리티를 실행하는 데 필요한 몇 가지 트릭이 있습니다.
이름에 숫자로 시작하는 실행 파일을 실행하려면 앰퍼샌드 (&)로 시작하십시오.
& 7zip.exe
유틸리티는 명령 행에서 따옴표로 표시 할 것으로 예상되는 각 토큰을 랩핑하십시오.
& "c : \ path with space \ SomeCommand.exe" "/ parameter2" "/ parameter2" "parameter2의 값" "Value2`"(따옴표 포함) "
이 시도:
zip filename.zip (Get-ChildItem somepath\*)
또는:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell 나는 당신의 대답을 좋아하지만 조금 확장했습니다
# Example
#unzip "myZip.zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
$shell = new-object -com shell.application
if (!(Test-Path "$sourcePath\$fileName"))
{
throw "$sourcePath\$fileName does not exist"
}
New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
$shell.namespace($destinationPath).copyhere($shell.namespace("$sourcePath\$fileName").items())
}
기본 Windows OS 명령을 사용하여 동기 방식으로 파일을 압축 및 압축 해제하는 PowerShell 2.0 호환 모듈을 만들었습니다. 이것은 Windows XP와 같은 구형 OS에서 작동하며 .Net 4.5 또는 기타 외부 도구가 필요하지 않습니다. 이 기능은 파일이 모두 압축 / 압축 해제 될 때까지 스크립트 실행을 차단합니다. 내 블로그에서 자세한 정보와 모듈을 찾을 수 있습니다 .