क्या PowerShell का उपयोग करके ज़िप संग्रह बनाना संभव है?
क्या PowerShell का उपयोग करके ज़िप संग्रह बनाना संभव है?
जवाबों:
यदि आप CodePlex पर जाते हैं और PowerShell सामुदायिक एक्सटेंशन हड़पते हैं , तो आप उनके write-zip
cmdlet का उपयोग कर सकते हैं ।
जबसे
कोडप्लैक्स शटडाउन की तैयारी में केवल पढ़ने के लिए मोड में है
आप PowerShell गैलरी में जा सकते हैं ।
write-zip [input file/folder] [output file]
एक शुद्ध PowerShell विकल्प जो PowerShell 3 और .NET 4.5 के साथ काम करता है (यदि आप इसका उपयोग कर सकते हैं):
function ZipFiles( $zipfilename, $sourcedir )
{
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir,
$zipfilename, $compressionLevel, $false)
}
आप जिस जिप आर्काइव को बनाना चाहते हैं, उसके लिए पूरे रास्ते को पास करें और निर्देशिका का पूरा रास्ता उन फाइलों से युक्त करें जिन्हें आप ज़िप करना चाहते हैं।
PowerShell v5.0 जोड़ता है Compress-Archive
और Expand-Archive
cmdlets। लिंक किए गए पृष्ठों के पूर्ण उदाहरण हैं, लेकिन इसका सार यह है:
# Create a zip file with the contents of C:\Stuff\
Compress-Archive -Path C:\Stuff -DestinationPath archive.zip
# Add more files to the zip file
# (Existing files in the zip file with the same name are replaced)
Compress-Archive -Path C:\OtherStuff\*.txt -Update -DestinationPath archive.zip
# Extract the zip file to C:\Destination\
Expand-Archive -Path archive.zip -DestinationPath C:\Destination
Compress-Archive
विवरण के पैराग्राफ 2 से : "... कंप्रेस-आर्काइव का उपयोग करके आप जिस अधिकतम फ़ाइल आकार को संपीड़ित कर सकते हैं, वह वर्तमान में 2 जीबी है। यह अंतर्निहित API की एक सीमा है" हालांकि, यदि आप उपयोग System.IO.Compression.ZipFile
करते हैं तो आप इस सीमा को बायपास कर सकते हैं।
System.IO.Compression.ZipFile
। यदि आपके द्वारा उपयोग किए जा रहे .NET फ्रेमवर्क में यह सीमा नहीं है, तो CmdLet को यह सीमा नहीं मारनी चाहिए। मैंने कोड में सत्यापित किया।
-OutputPath
पैरामीटर नहीं है।
नवीनतम .NET 4.5 ढांचे के साथ एक मूल तरीका, लेकिन पूरी तरह से सुविधा-कम:
सृष्टि:
Add-Type -Assembly "System.IO.Compression.FileSystem" ;
[System.IO.Compression.ZipFile]::CreateFromDirectory("c:\your\directory\to\compress", "yourfile.zip") ;
निष्कर्षण:
Add-Type -Assembly "System.IO.Compression.FileSystem" ;
[System.IO.Compression.ZipFile]::ExtractToDirectory("yourfile.zip", "c:\your\destination") ;
जैसा कि उल्लेख किया गया है, पूरी तरह से फीचर-कम है, इसलिए एक अधिलेखित ध्वज की अपेक्षा न करें ।
अद्यतन: अन्य डेवलपर्स के लिए नीचे देखें कि इस पर वर्षों से विस्तार किया है ...
7zip स्थापित करें (या इसके बजाय कमांड लाइन संस्करण डाउनलोड करें) और इस PowerShell विधि का उपयोग करें:
function create-7zip([String] $aDirectory, [String] $aZipfile){
[string]$pathToZipExe = "$($Env:ProgramFiles)\7-Zip\7z.exe";
[Array]$arguments = "a", "-tzip", "$aZipfile", "$aDirectory", "-r";
& $pathToZipExe $arguments;
}
आप इसे इस तरह से कॉल कर सकते हैं:
create-7zip "c:\temp\myFolder" "c:\temp\myFolder.zip"
& "C:\Program Files\7-Zip\7z.exe" a -tzip ($file.FullName+".zip") $file.FullName
प्रारंभिक उत्तर पोस्ट किए जाने के बाद से लोट बदल गया है। यहाँ कुछ नवीनतम उदाहरण हैं, जो कंप्रेस-आर्काइव कमांड का उपयोग करते हैं ।
कमान नया संग्रह फ़ाइल बनाने के लिए, Draft.zip
दो फ़ाइलों को संपीड़ित करके, Draftdoc.docx
और diagram2.vsd
, द्वारा निर्दिष्ट Path
पैरामीटर। इस ऑपरेशन के लिए निर्दिष्ट संपीड़न स्तर इष्टतम है।
Compress-Archive -Path C:\Reference\Draftdoc.docx, C:\Reference\Images\diagram2.vsd -CompressionLevel Optimal -DestinationPath C:\Archives\Draft.Zip
कमान नई संग्रह फ़ाइल बनाता है, Draft.zip
दो फ़ाइलों को संपीड़ित करके, Draft doc.docx
और Diagram [2].vsd
, द्वारा निर्दिष्ट LiteralPath
पैरामीटर। इस ऑपरेशन के लिए निर्दिष्ट संपीड़न स्तर इष्टतम है।
Compress-Archive -LiteralPath 'C:\Reference\Draft Doc.docx', 'C:\Reference\Images\Diagram [2].vsd' -CompressionLevel Optimal -DestinationPath C:\Archives\Draft.Zip
फ़ोल्डर Draft.zip
में नई संग्रह फ़ाइल बनाने के लिए कमांड C:\Archives
। नई संग्रह फ़ाइल में C: \ Reference फ़ोल्डर में प्रत्येक फ़ाइल है , क्योंकि पथ पैरामीटर में विशिष्ट फ़ाइल नामों के स्थान पर वाइल्डकार्ड वर्ण का उपयोग किया गया था ।
Compress-Archive -Path C:\Reference\* -CompressionLevel Fastest -DestinationPath C:\Archives\Draft
कमांड पूरे फ़ोल्डर से एक आर्काइव बनाता है, C:\Reference
Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft
PowerShell .zip
फ़ाइल नाम में एक्सटेंशन को स्वचालित रूप से जोड़ता है ।
दो संपादित करें - यह कोड पुराने दिनों से एक बदसूरत, बदसूरत kluge है। तुम्हे यह नहीं चाहिए।
इस की सामग्री को संपीड़ित करता है .\in
करने के लिए .\out.zip
System.IO.Packaging.ZipPackage साथ उदाहरण निम्नलिखित यहां
$zipArchive = $pwd.path + "\out.zip"
[System.Reflection.Assembly]::Load("WindowsBase,Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
$ZipPackage=[System.IO.Packaging.ZipPackage]::Open($zipArchive,
[System.IO.FileMode]"OpenOrCreate", [System.IO.FileAccess]"ReadWrite")
$in = gci .\in | select -expand fullName
[array]$files = $in -replace "C:","" -replace "\\","/"
ForEach ($file In $files)
{
$partName=New-Object System.Uri($file, [System.UriKind]"Relative")
$part=$ZipPackage.CreatePart($partName, "application/zip",
[System.IO.Packaging.CompressionOption]"Maximum")
$bytes=[System.IO.File]::ReadAllBytes($file)
$stream=$part.GetStream()
$stream.Write($bytes, 0, $bytes.Length)
$stream.Close()
}
$ZipPackage.Close()
संपादित करें: बड़ी फ़ाइलों के लिए अविश्वसनीय , शायद> 10mb, YMMV। Appdomain सबूत और अलग भंडारण के साथ कुछ करना है । मित्रवत .NET .NET दृष्टिकोण PS v3 से अच्छी तरह से काम करता है, लेकिन मेरे मामले में अधिक मेमोरी चाहता था। PS v2 से .NET 4 का उपयोग करने के लिए, कॉन्फ़िगर फ़ाइलों को एक असमर्थित ट्वीक की आवश्यकता होती है ।
एक अन्य विकल्प नीचे दे रहा है। यह एक पूर्ण फ़ोल्डर को ज़िप करेगा और दिए गए नाम के साथ संग्रह को दिए गए पथ पर लिख देगा।
.NET 3 या इसके बाद के संस्करण की आवश्यकता है
Add-Type -assembly "system.io.compression.filesystem"
$source = 'Source path here'
$destination = "c:\output\dummy.zip"
If(Test-path $destination) {Remove-item $destination}
[io.compression.zipfile]::CreateFromDirectory($Source, $destination)
यहाँ PowerShell v5 के लिए एक देशी समाधान है, जो PowerShell का उपयोग करके cmdlet Compress-Archive
Create Zip फ़ाइलों का उपयोग कर रहा है ।
कंप्रेस-आर्काइव के लिए Microsoft डॉक्स भी देखें ।
उदाहरण 1:
Compress-Archive `
-LiteralPath C:\Reference\Draftdoc.docx, C:\Reference\Images\diagram2.vsd `
-CompressionLevel Optimal `
-DestinationPath C:\Archives\Draft.Zip
उदाहरण 2:
Compress-Archive `
-Path C:\Reference\* `
-CompressionLevel Fastest `
-DestinationPath C:\Archives\Draft
उदाहरण 3:
Write-Output $files | Compress-Archive -DestinationPath $outzipfile
संपीड़न के लिए, मैं एक पुस्तकालय का उपयोग करूंगा (7-ज़िप अच्छा है जैसे कि माइकल सुझाव देते हैं )।
यदि आप 7-ज़िप स्थापित करते हैं, तो स्थापित निर्देशिका 7z.exe
में एक कंसोल एप्लिकेशन होगा।
आप इसे सीधे लागू कर सकते हैं और अपने इच्छित किसी भी संपीड़न विकल्प का उपयोग कर सकते हैं।
यदि आप DLL से जुड़ना चाहते हैं, तो यह भी संभव होना चाहिए।
7-ज़िप फ्रीवेयर और ओपन सोर्स है।
किस बारे में System.IO.Packaging.ZipPackage
?
इसके लिए .NET 3.0 या अधिक की आवश्यकता होगी।
#Load some assemblys. (No line break!)
[System.Reflection.Assembly]::Load("WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
#Create a zip file named "MyZipFile.zip". (No line break!)
$ZipPackage=[System.IO.Packaging.ZipPackage]::Open("C:\MyZipFile.zip",
[System.IO.FileMode]"OpenOrCreate", [System.IO.FileAccess]"ReadWrite")
#The files I want to add to my archive:
$files = @("/Penguins.jpg", "/Lighthouse.jpg")
#For each file you want to add, we must extract the bytes
#and add them to a part of the zip file.
ForEach ($file In $files)
{
$partName=New-Object System.Uri($file, [System.UriKind]"Relative")
#Create each part. (No line break!)
$part=$ZipPackage.CreatePart($partName, "",
[System.IO.Packaging.CompressionOption]"Maximum")
$bytes=[System.IO.File]::ReadAllBytes($file)
$stream=$part.GetStream()
$stream.Write($bytes, 0, $bytes.Length)
$stream.Close()
}
#Close the package when we're done.
$ZipPackage.Close()
एंडर्स हेसेलबॉम के माध्यम से
डॉक्यूमेंटेशन को कोई देखता क्यों नहीं ?? एक खाली ज़िप फ़ाइल बनाने और उसी में निर्मित व्यक्तिगत फ़ाइलों को जोड़ने का एक समर्थित तरीका है । .NET 4.5 सभी को संदर्भित कर रहा है।
एक कोड उदाहरण के लिए नीचे देखें:
# Load the .NET assembly
Add-Type -Assembly 'System.IO.Compression.FileSystem'
# Must be used for relative file locations with .NET functions instead of Set-Location:
[System.IO.Directory]::SetCurrentDirectory('.\Desktop')
# Create the zip file and open it:
$z = [System.IO.Compression.ZipFile]::Open('z.zip', [System.IO.Compression.ZipArchiveMode]::Create)
# Add a compressed file to the zip file:
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($z, 't.txt', 't.txt')
# Close the file
$z.Dispose()
यदि आप कोई प्रश्न पूछना चाहते हैं तो मैं आपको दस्तावेज़ ब्राउज़ करने के लिए प्रोत्साहित करता हूँ ।
यह वास्तव में अस्पष्ट है लेकिन काम करता है। 7za.exe 7zip का स्टैंडअलोन संस्करण है और इंस्टॉल पैकेज के साथ उपलब्ध है।
# get files to be send
$logFiles = Get-ChildItem C:\Logging\*.* -Include *.log | where {$_.Name -match $yesterday}
foreach ($logFile in $logFiles)
{
Write-Host ("Processing " + $logFile.FullName)
# compress file
& ./7za.exe a -mmt=off ($logFile.FullName + ".7z") $logFile.FullName
}
अगर किसी को एक फ़ाइल (और एक फ़ोल्डर नहीं) को ज़िप करने की आवश्यकता है: http://blogs.msdn.com/b/jerrydixon/archive/2014/08/08/zipping-a-single-file-with-powershell.aspx
[CmdletBinding()]
Param(
[Parameter(Mandatory=$True)]
[ValidateScript({Test-Path -Path $_ -PathType Leaf})]
[string]$sourceFile,
[Parameter(Mandatory=$True)]
[ValidateScript({-not(Test-Path -Path $_ -PathType Leaf)})]
[string]$destinationFile
)
<#
.SYNOPSIS
Creates a ZIP file that contains the specified innput file.
.EXAMPLE
FileZipper -sourceFile c:\test\inputfile.txt
-destinationFile c:\test\outputFile.zip
#>
function New-Zip
{
param([string]$zipfilename)
set-content $zipfilename
("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
function Add-Zip
{
param([string]$zipfilename)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename
("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}
dir $sourceFile | Add-Zip $destinationFile
यहां वर्किंग कोड है, सोर्स फोल्डर से सभी फाइल्स को जिप करके डेस्टिनेशन फोल्डर में जिप फाइल बनाएं।
$DestZip="C:\Destination\"
$Source = "C:\Source\"
$folder = Get-Item -Path $Source
$ZipTimestamp = Get-Date -format yyyyMMdd-HHmmss;
$ZipFileName = $DestZip + "Backup_" + $folder.name + "_" + $ZipTimestamp + ".zip"
$Source
set-content $ZipFileName ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
# Wait for the zip file to be created.
while (!(Test-Path -PathType leaf -Path $ZipFileName))
{
Start-Sleep -Milliseconds 20
}
$ZipFile = (new-object -com shell.application).NameSpace($ZipFileName)
Write-Output (">> Waiting Compression : " + $ZipFileName)
#BACKUP - COPY
$ZipFile.CopyHere($Source)
$ZipFileName
# ARCHIVE
Read-Host "Please Enter.."
function Zip-File
{
param (
[string]$ZipName,
[string]$SourceDirectory
)
Add-Type -Assembly System.IO.Compression.FileSystem
$Compress = [System.IO.Compression.CompressionLevel]::Optimal
[System.IO.Compression.ZipFile]::CreateFromDirectory($SourceDirectory,
$ZipName, $Compress, $false)
}
नोट:
ज़िपनाम: जिप फाइल का पूर्ण पथ जिसे आप बनाना चाहते हैं।
SourceDirectory: डायरेक्टरी का पूरा रास्ता जिसमें वो फाइलें हैं जिन्हें आप ज़िप करना चाहेंगे।
यहां सोनज के उत्तर का थोड़ा सुधार हुआ संस्करण है, यह एक अधिलेखित विकल्प जोड़ता है।
function Zip-Files(
[Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$false)]
[string] $zipfilename,
[Parameter(Position=1, Mandatory=$true, ValueFromPipeline=$false)]
[string] $sourcedir,
[Parameter(Position=2, Mandatory=$false, ValueFromPipeline=$false)]
[bool] $overwrite)
{
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
if ($overwrite -eq $true )
{
if (Test-Path $zipfilename)
{
Remove-Item $zipfilename
}
}
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourcedir, $zipfilename, $compressionLevel, $false)
}
यह भी एक अस्थायी फ़ोल्डर का उपयोग किए बिना एक फ़ाइल को संपीड़ित करने और देशी .Net 4.5 का उपयोग करने के लिए काम करना चाहिए, इस StackOverflow उत्तर से C # से परिवर्तित । यह यहाँ से लिए गए वाक्यविन्यास का उपयोग करते हुए एक अच्छाई का उपयोग करता है ।
उपयोग:
ZipFiles -zipFilename output.zip -sourceFile input.sql -filename name.inside.zip.sql
कोड:
function ZipFiles([string] $zipFilename, [string] $sourceFile, [string] $filename)
{
$fullSourceFile = (Get-Item -Path "$sourceFile" -Verbose).FullName
$fullZipFile = (Get-Item -Path "$zipFilename" -Verbose).FullName
Add-Type -AssemblyName System.IO
Add-Type -AssemblyName System.IO.Compression
Add-Type -AssemblyName System.IO.Compression.FileSystem
Using-Object ($fs = New-Object System.IO.FileStream($fullZipFile, [System.IO.FileMode]::Create)) {
Using-Object ($arch = New-Object System.IO.Compression.ZipArchive($fs, [System.IO.Compression.ZipArchiveMode]::Create)) {
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($arch, $fullSourceFile, $filename)
}
}
}
का उपयोग करते हुए:
function Using-Object
{
[CmdletBinding()]
param (
[Parameter(Mandatory = $true)]
[AllowEmptyString()]
[AllowEmptyCollection()]
[AllowNull()]
[Object]
$InputObject,
[Parameter(Mandatory = $true)]
[scriptblock]
$ScriptBlock
)
try
{
. $ScriptBlock
}
finally
{
if ($null -ne $InputObject -and $InputObject -is [System.IDisposable])
{
$InputObject.Dispose()
}
}
}
shell.application
व्यवसाय या 7-ज़िप / अन्य अलग-अलग उपयोगिताओं का उपयोग किए बिना एक फ़ाइल को ज़िप करने का एक तरीका ढूंढ रहा था । मुझे Using-Object
फंक्शन भी पसंद है, हालांकि मैं इसके बिना एक छोटे, त्वरित-एन-गंदे दृष्टिकोण के लिए गया था।
मैं इस स्निपेट का उपयोग बैकअप फ़ाइलों के लिए मेरे डेटाबेस बैकअप फ़ोल्डर की जांच करने के लिए करता हूं जो अभी तक संपीड़ित नहीं है, उन्हें 7-ज़िप का उपयोग करके संपीड़ित करें, और अंत में *.bak
कुछ डिस्क स्थान को बचाने के लिए फ़ाइलों को हटा दें । कुछ फ़ाइलों को संपीड़ित न होने के लिए संपीड़न से पहले नोटिस फ़ाइलों को लंबाई (सबसे छोटी से सबसे बड़ी) द्वारा आदेश दिया जाता है।
$bkdir = "E:\BackupsPWS"
$7Zip = 'C:\"Program Files"\7-Zip\7z.exe'
get-childitem -path $bkdir | Sort-Object length |
where
{
$_.extension -match ".(bak)" -and
-not (test-path ($_.fullname -replace "(bak)", "7z"))
} |
foreach
{
$zipfilename = ($_.fullname -replace "bak", "7z")
Invoke-Expression "$7Zip a $zipfilename $($_.FullName)"
}
get-childitem -path $bkdir |
where {
$_.extension -match ".(bak)" -and
(test-path ($_.fullname -replace "(bak)", "7z"))
} |
foreach { del $_.fullname }
यहाँ आप बैकअप के लिए उन फ़ाइलों को बैकअप करने, संपीड़ित करने और स्थानांतरित करने के लिए एक PowerShell स्क्रिप्ट की जांच कर सकते हैं ।
मामले में आप WinRAR स्थापित है:
function ZipUsingRar([String] $directory, [String] $zipFileName)
{
Write-Output "Performing operation ""Zip File"" on Target ""Item: $directory Destination:"
Write-Output ($zipFileName + """")
$pathToWinRar = "c:\Program Files\WinRAR\WinRar.exe";
[Array]$arguments = "a", "-afzip", "-df", "-ep1", "$zipFileName", "$directory";
& $pathToWinRar $arguments;
}
तर्कों का अर्थ: afzip ज़िप आर्काइव बनाता है, df फ़ाइलों को हटाता है, ep1 संग्रह के भीतर पूर्ण निर्देशिका पथ नहीं बनाता है
यहाँ cmd.exe या ssh या जो आप चाहते हैं, से लॉन्च करने के लिए एक संपूर्ण कमांड लाइन उदाहरण है!
powershell.exe -nologo -noprofile -command "&{ Add-Type -A 'System.IO.Compression.FileSystem' [System.IO.Compression.ZipFile]::CreateFromDirectory('c:/path/to/source/folder/', 'c:/path/to/output/file.zip');}"
सादर
[System.IO.IOException]
कक्षा को लोड करना और अपने तरीकों का उपयोग करना अवांछित त्रुटियों को दबाने के लिए एक महत्वपूर्ण कदम है, इस तथ्य के कारण कि यह पावरशेल के मूल निवासी नहीं है, इसलिए इसके बिना त्रुटियों के विभिन्न संदर्भों की अपेक्षा करें।
मैंने अपनी स्क्रिप्ट को T में त्रुटि-नियंत्रित किया, लेकिन [System.IO.Compression.ZipFile]
कक्षा का उपयोग करते समय बहुत सारी अतिरिक्त लाल 'फ़ाइल मौजूद है' आउटपुट मिला
function zipFiles(
[Parameter(Position=0, Mandatory=$true]
[string] $sourceFolder,
[Parameter(Position=1, Mandatory=$true]
[string]$zipFileName,
[Parameter(Position=2, Mandatory=$false]
[bool]$overwrite)
{
Add-Type -Assembly System.IO
Add-Type -Assembly System.IO.Compression.FileSystem
$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal
$directoryTest = (Test-Path $dailyBackupDestFolder)
$fileTest = (Test-Path $zipFileName)
if ( $directoryTest -eq $false)
{
New-Item -ItemType Directory -Force -Path $dailyBackupDestFolder
}
if ( $fileTest -eq $true)
{
if ($overwrite -eq $true ){Remove-Item $zipFileName}
}
try
{
[System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder,$zipFileName,$compressionLevel)
}
catch [System.IO.IOException]
{
Write-Output ($dateTime + ' | ' + $_.Exception.Message ) | Out-File $logFile -append -force
}
}
मैं यहाँ क्या कर रहा हूँ इन IO त्रुटियों को पकड़ रहा हूँ, जैसे कि पहले से मौजूद फ़ाइलों को एक्सेस करना, उस त्रुटि को पकड़ना और इसे लॉगफ़ाइल में निर्देशित करना जो मैं एक बड़े कार्यक्रम के साथ बनाए रख रहा हूँ।
कंप्रेसिंग और एक्स्ट्रैक्टिंग डायरेक्टरी के लिए विंडोज में कमांड लाइन-कमांड पूरा होता है:
संपीड़न के लिए:
powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem'; [IO.Compression.ZipFile]::CreateFromDirectory('C:\Indus','C:\Indus.zip'); }"
निकालने के लिए:
powershell.exe -nologo -noprofile -command "& { Add-Type -A 'System.IO.Compression.FileSystem';[IO.Compression.ZipFile]::ExtractToDirectory('C:\Indus.zip','C:\Indus'); }"
आयनिक दृष्टिकोण चट्टानें:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
पासवर्ड, अन्य क्रिप्टो विधियों का समर्थन करता है, आदि।