आप ज़िप संग्रह बनाने और उन्हें निकालने के लिए पावरशेल की सुविधाओं का उपयोग कर सकते हैं। पावरशेल 5.0 में (यह पावरशेल संस्करण विंडोज 10 पर डिफ़ॉल्ट रूप से स्थापित है), एक अलग मॉड्यूल Microsoft.PowerShell.Archive उपलब्ध है। Windows के पुराने संस्करणों पर, आप ZipFile . का उपयोग कर सकते हैं संग्रह के लिए .NET Framework से वर्ग।
Microsoft.PowerShell.Archive मॉड्यूल में केवल दो cmdlets हैं (C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive):
- संपीड़ित-संग्रह
- विस्तृत-संग्रह करें
Get-Command -Module Microsoft.PowerShell.Archive | Format-Table -AutoSize
आइए अपनी PowerShell स्क्रिप्ट में ज़िप संग्रह बनाने और निकालने के लिए इन cmdlets का उपयोग करने के उदाहरण देखें।
पॉवरशेल:कंप्रेस-आर्काइव के साथ ज़िप आर्काइव बनाएं
कंप्रेस-आर्काइव कमांड में निम्नलिखित सिंटैक्स होता है:
Compress-Archive [-Path] String[] [-DestinationPath] String [-CompressionLevel String ] [-Update]
- द पथ पैरामीटर का उपयोग फ़ाइलों या फ़ोल्डरों को संग्रहीत करने के लिए पथ निर्दिष्ट करने के लिए किया जाता है;
- गंतव्यपथ - ज़िप फ़ाइल का पथ निर्दिष्ट करता है;
- संपीड़न स्तर - संपीड़न स्तर सेट करता है (
NoCompression
,Optimal
याFastest
); - अपडेट करें - आपको मौजूदा ज़िप संग्रह में फ़ाइलें जोड़ने (अपडेट) करने की अनुमति देता है;
- बल - यदि निर्दिष्ट नाम वाला कोई संग्रह पहले से मौजूद है, तो उसे अधिलेखित कर दिया जाएगा।
- इष्टतम — संपीड़न के स्तर द्वारा अनुकूलन;
- सबसे तेज़ — समय के अनुसार अनुकूलन;
- संपीड़न नहीं — बिना किसी संपीड़न के।
पहले से संपीड़ित फ़ाइलों (jpg, msi, mp3, आदि) को एक ज़िप फ़ाइल में संग्रहीत करते समय NoCompression विकल्प का उपयोग किया जाना चाहिए। इस मामले में, विंडोज़ उन्हें संपीड़ित करने में CPU समय बर्बाद नहीं करेगा।
किसी एक फ़ाइल को ज़िप करने के लिए, चलाएँ:
Compress-Archive -Path "C:\Logs\WindowsUpdate.log" -DestinationPath C:\Archive\updatelog.zip -CompressionLevel Optimal
आप एकाधिक फ़ोल्डरों की संपूर्ण सामग्री को ज़िप कर सकते हैं (सभी फ़ाइलों और नेस्टेड फ़ोल्डरों सहित):
Compress-Archive -Path C:\Logs\,C:\Logs2\ -DestinationPath C:\Archive\logs-all.zip -CompressionLevel Optimal
आप ज़िप संग्रह में केवल विशिष्ट मास्क वाली फ़ाइलें जोड़ सकते हैं। उदाहरण के लिए, निम्न आदेश केवल *.txt फ़ाइलों को ज़िप करेगा।
Compress-Archive -Path C:\Logs\*.txt -DestinationPath C:\Archive\logs-txt.zip –CompressionLevel Fastest
Get-ChildItem cmdlet के साथ अधिक जटिल फ़िल्टर का उपयोग किया जा सकता है। उदाहरण के लिए, निम्न स्क्रिप्ट आपको डिस्क पर *.docx या *.xlsx एक्सटेंशन वाली शीर्ष 10 सबसे बड़ी फ़ाइलों को खोजने और उन्हें संग्रह में जोड़ने की अनुमति देगी:
Get-ChildItem c:\share\ITdept -Include *.xlsx –Recurse| sort -descending -property length | select -first 10 |Compress-Archive -DestinationPath C:\backup\itdeptdocs.zip
किसी मौजूदा ज़िप संग्रह में नई फ़ाइलें जोड़ने के लिए, अपडेट . का उपयोग करें कुंजी:
Compress-Archive -Path C:\Logs\,C:\logs2\ –Update -DestinationPath C:\Archive\logs-txt.zip
अपवाद "3" तर्क के साथ "लिखें":"स्ट्रीम बहुत लंबा था।" C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell पर। Archive.psm1:805char:29+ ... $destStream.Write($buffer, 0, $numberOfBytesRead)+ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~+ श्रेणी की जानकारी :निर्दिष्ट नहीं:(:) [], MethodInvocationException+ FullQualifiedErrorId:IOException
विस्तार-संग्रह के साथ ज़िप फ़ाइल कैसे निकालें?
आप ज़िप फ़ाइलों को अनज़िप करने के लिए एक्सपैंड-आर्काइव cmdlet का उपयोग कर सकते हैं। cmdlet के लिए सिंटैक्स समान है:
Expand-Archive [-Path] String [-DestinationPath] String [-Force] [-Confirm]
उदाहरण के लिए, हमने पहले बनाए गए ज़िप संग्रह को निर्दिष्ट फ़ोल्डर में अनपैक करने के लिए और फ़ाइलों को अधिलेखित करने के लिए:
Expand-Archive -Path C:\archive\logs-all.zip -DestinationPath c:\logs -Force
Microsoft.PowerShell.Archive मॉड्यूल के नुकसान:
- आप संग्रह की सामग्री को निकाले बिना नहीं देख सकते;
- आप संग्रह से कुछ फ़ाइलों को नहीं निकाल सकते (आपको संपूर्ण संग्रह फ़ाइल को निकालना होगा);
- ज़िप को छोड़कर आप अन्य संग्रह प्रारूपों का उपयोग नहीं कर सकते;
- आप किसी ज़िप संग्रह को पासवर्ड से सुरक्षित नहीं कर पाएंगे।
आप 7Zip4Powershell मॉड्यूल को स्थापित कर सकते हैं और पासवर्ड से सुरक्षित ज़िप फ़ाइल को निम्नानुसार निकाल सकते हैं:
Install-Module -Name 7Zip4Powershell
Expand-7Zip -ArchiveFileName C:\Archive\Logs.zip -Password "p@ssd0rw" -TargetPath C:\Share\Logs
पावरशेल ज़िपफाइल क्लास के साथ संपीड़ित फ़ाइलों के साथ कार्य करना
पुराने Windows संस्करण में (Windows 10 या Windows Server 2016 से पहले PowerShell संस्करण <5.0 (यदि आप PowerShell संस्करण को अपग्रेड नहीं कर सकते हैं) के साथ, आप ज़िप संग्रह बनाने के लिए एक अलग ZipFile वर्ग (NET Framework 4.5 से) का उपयोग कर सकते हैं।
सबसे पहले, कक्षा को अपने पावरशेल सत्र में लोड करें:
Add-Type -AssemblyName "System.IO.Compression.FileSystem"
किसी फोल्डर को आर्काइव करने के लिए, इस तरह PS स्क्रिप्ट का उपयोग करें:
$SourceFolder = 'C:\Logs'
$ZipFileName = 'C:\PS\logs.zip'
[IO.Compression.ZipFile]::CreateFromDirectory($SourceFolder, $ZipFileName)
ज़िप संग्रह को अद्यतन करने और संपीड़न अनुपात सेट करने के लिए, निम्न पावरशेल कोड का उपयोग करें:
$addfile = ‘C:\temp\new.log’
$compressionLevel = [System.IO.Compression.CompressionLevel]::Fastest
$zip = [System.IO.Compression.ZipFile]::Open($zipFileName, 'update')[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip, $addfile, (Split-Path $addfile -Leaf), $compressionLevel)
$zip.Dispose()
$zip.Dispose()
जिप फाइल को बंद करने के लिए कमांड का उपयोग किया जाता है। आप ज़िप संग्रह की सामग्री सूचीबद्ध कर सकते हैं:
[System.IO.Compression.ZipFile]::OpenRead($zipFileName).Entries.Name
या आप ज़िप संग्रह की सामग्री को अतिरिक्त जानकारी के साथ आउट-ग्रिड व्यू तालिका के रूप में प्रदर्शित कर सकते हैं (संपीड़ित/असम्पीडित फ़ाइलों का आकार, अंतिम लेखन समय, आदि):
$ZipFileName = "C:\PS\logs1.zip"
$Stream = New-Object IO.FileStream($ZipFileName , [IO.FileMode]::Open)
$ZipArchive = New-Object IO.Compression.ZipArchive($Stream)
$ZipArchive.Entries |
Select-Object Name,
@{Name="File Path";Expression={$_.FullName}},
@{Name="Compressed Size (KB)";Expression={"{0:N2}" -f($_.CompressedLength/1kb)}},
@{Name="UnCompressed Size (KB)";Expression={"{0:N2}" -f($_.Length/1kb)}},
@{Name="File Date";Expression={$_.LastWriteTime}} | Out-GridView
$ZipArchive.Dispose()
$Stream.Close()
$Stream.Dispose()
ज़िप फ़ाइल को C:\Logs फ़ोल्डर में निकालने के लिए, निम्न कमांड का उपयोग करें:
$SourceZipFile = 'C:\PS\logs.zip'
$TargetFolder = 'C:\Logs'
[IO.Compression.ZipFile]::ExtractToDirectory($SourceZipFile, $TargetFolder)