Server 2012 Core에서 Powershell을 사용하여 파일 압축 해제


15

powershell을 사용하여 파일의 압축을 풀어야합니다. 내가 모든 사람이 이것을하는 것을 본 전형적인 방법은 스크립트로 쉘을 자동화하는 것입니다.

$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
$destinationFolder = $shellApplication.NameSpace($destination)
$destinationFolder.CopyHere($zipPackage.Items())

Server Core에는 셸이 없으므로 자동화해야 할 것이 없기 때문에 이것은 작동하지 않습니다. E_FAIL COM 오류가 발생합니다.

Powershell은 자체적으로 할 수없는 것처럼 보이며 제 3 자에게 가면 유틸리티를 서버에 가져 오는 스크립트를 먼저 작성하는 방법을 찾아야합니다. 7-Zip은 내가 사용했지만 다운로드 및 설치 스크립트를 작성할 수있는 것 같지 않습니다. Sourceforge는 HTML 파일을 계속 뱉어냅니다.

Server 2012 Core에서 zip 파일 압축 해제를 완전히 스크립팅하려면 어떻게해야합니까?


SF에서 7zip을 다운로드해야하는 요구 사항은 무엇입니까? 내부 소스에서 설치 / 복사 할 수 없습니까?
longneck

@longneck 내가 제작하고있는 PS 스크립트는 고객에게 전달 될 것이다. 따라서 스크립트는 완전히 독립적이어야합니다. 내가 할 수 zip 유틸리티 자신을 개최하지만 내가 원하지 않는 또 다른 두통 (법률 용어)입니다. 난 그냥 2012 년 소개 - 에드있어이이 작업을 수행 할 수있는 간단한 cmdlet을 있었다 기대했다
vcsjones

고객에게 무언가를 전달하는 경우 자동 압축 풀림 보관 파일을 만드십시오.
Zoredache

@Zoredache 글쎄, 그것은 초기에 더 많은 작업처럼 보였습니다 (우리 빌드 시스템은 이미 ZIP을 빌드하고 있습니다).
vcsjones

답변:


24

Server 2012에는 ExtractToDirectory 메서드가있는 System.IO.Compression.ZipFile 이있는 Dot.NET 4.5가 제공됩니다 . PowerShell에서이를 사용할 수 있어야합니다.

다음은 예입니다.

먼저 ZipFile이있는 어셈블리를로드해야합니다.

[System.Reflection.Assembly]::LoadWithPartialName("System.IO.Compression.FileSystem") | Out-Null

그런 다음 내용을 추출하십시오.

[System.IO.Compression.ZipFile]::ExtractToDirectory($pathToZip, $targetDir)

편집 : PowerShell 5 (Windows Management Framework 5.0)로 업데이트 한 경우 마침내 기본 cmdlet이 있습니다.

Expand-Archive $pathToZip $targetDir

방금 System.IO.Compression을 살펴 보았고 ZipFile은 없습니다. 4.5에 업데이트가 추가 되었습니까?
Mike

4.5에 도입되었지만 4.0에는없는 것으로 보입니다. 4.5가 있다면 그것을 가져야합니다.
피터 한 도르프

6
이것에 대한 기본 솔루션이 있다는 것은 망할 시간입니다.
MDMarra

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.