পাওয়ারশেলের ফিচার ব্যবহার করে ZIP আর্কাইভ তৈরি এবং এক্সট্র্যাক্ট করা যায়। পাওয়ারশেল ৫.০-এ (এই পাওয়ারশেল ভার্সন উইন্ডোজ ১০-এ ডিফল্টলি ইনস্টলড থাকে), একটি আলাদা মডিউল Microsoft.PowerShell.Archive উপলব্ধ। পুরনো উইন্ডোজ ভার্সনগুলিতে, আর্কাইভের জন্য .NET Framework-এর ZipFile ক্লাস ব্যবহার করা যায়।
Microsoft.PowerShell.Archive মডিউলে (C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive) শুধু দুটি কামডলেট রয়েছে:
- Compress-Archive
- Expand-Archive
Get-Command -Module Microsoft.PowerShell.Archive | Format-Table -AutoSize
CommandType Name Version Source ----------- ---- ------- ------ Function Compress-Archive 1.0.1.0 Microsoft.PowerShell.Archive Function Expand-Archive 1.0.1.0 Microsoft.PowerShell.Archive
চলুন এই কামডলেটগুলো ব্যবহার করে পাওয়ারশেল স্ক্রিপ্টে ZIP আর্কাইভ তৈরি ও এক্সট্র্যাক্ট করার উদাহরণ দেখি।
পাওয়ারশেল: Compress-Archive দিয়ে ZIP আর্কাইভ তৈরি
Compress-Archive কমান্ডের সিনট্যাক্স:
Compress-Archive [-Path] String[] [-DestinationPath] String [-CompressionLevel String ] [-Update]
- Path প্যারামিটার আর্কাইভ করার ফাইল বা ফোল্ডারের পাথ স্পেসিফাই করতে ব্যবহৃত হয়;
- DestinationPath – ZIP ফাইলের পাথ স্পেসিফাই করে;
- CompressionLevel – কমপ্রেশন লেভেল সেট করে (
NoCompression,OptimalবাFastest); - Update – বিদ্যমান ZIP আর্কাইভে ফাইল যোগ (আপডেট) করার অনুমতি দেয়;
- Force – নির্দিষ্ট নামে আর্কাইভ ইতিমধ্যে থাকলে তা ওভাররাইট করবে।
- Optimal — কমপ্রেশন লেভেল দ্বারা অপ্টিমাইজেশন;
- Fastest — সময় দ্বারা অপ্টিমাইজেশন;
- NoCompression — কোনো কমপ্রেশন ছাড়া।
NoCompression অপশনটি ব্যবহার করা উচিত ইতিমধ্যে কমপ্রেস্ড ফাইলগুলো (jpg, msi, mp3, ইত্যাদি) একক ZIP ফাইলে আর্কাইভ করার সময়। এই কেসে, উইন্ডোজ সিপিইউ টাইম ব্যাবহার করে কমপ্রেস করার চেষ্টা করবে না।
একটি ফাইল জিপ করতে:
Compress-Archive -Path "C:\Logs\WindowsUpdate.log" -DestinationPath C:\Archive\updatelog.zip -CompressionLevel Optimal
নেস্টেড ফোল্ডারসহ একাধিক ফোল্ডার teljes কন্টেন্ট জিপ করতে:
Compress-Archive -Path C:\Logs\,C:\Logs2\ -DestinationPath C:\Archive\logs-all.zip -CompressionLevel Optimal
একাধিক ফাইল বা ফোল্ডার আর্কাইভে যোগ করতে তাদের নাম কমা দিয়ে আলাদা করুন।
নির্দিষ্ট মাস্কवाले ফাইলগুলোকে ZIP আর্কাইভে যোগ করা যায়। উদাহরণস্বরূপ, নিচের কমান্ড শুধু *.txt ফাইলগুলো জিপ করবে।
Compress-Archive -Path C:\Logs\*.txt -DestinationPath C:\Archive\logs-txt.zip –CompressionLevel Fastest
Get-ChildItem কামডলেট ব্যবহার করে আরও জটিল ফিল্টার ব্যবহার করা যায়। উদাহরণস্বরূপ, নিচের স্ক্রিপ্ট ডিস্কে *.docx বা *.xlsx এক্সটেনশনवाले টপ ১০ বড় ফাইল খুঁজে বের করে আর্কাইভে যোগ করবে:
Get-ChildItem c:\share\ITdept -Include *.xlsx –Recurse| sort -descending -property length | select -first 10 |Compress-Archive -DestinationPath C:\backup\itdeptdocs.zip
বিদ্যমান ZIP আর্কাইভে নতুন ফাইল যোগ করতে Update কী ব্যবহার করুন:
Compress-Archive -Path C:\Logs\,C:\logs2\ –Update -DestinationPath C:\Archive\logs-txt.zip
Exception calling "Write" with "3" argument(s): "Stream was too long." At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:805 char:29 + ... $destStream.Write($buffer, 0, $numberOfBytesRead) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : IOException
Expand-Archive দিয়ে ZIP ফাইল এক্সট্র্যাক্ট করা
ZIP ফাইল আনজিপ করতে Expand-Archive কামডলেট ব্যবহার করা যায়। কামডলেটের সিনট্যাক্স সাদৃশ্য:
Expand-Archive [-Path] String [-DestinationPath] String [-Force] [-Confirm]
উদাহরণস্বরূপ, আগে তৈরি করা ZIP আর্কাইভ নির্দিষ্ট ফোল্ডারে আনপ্যাক করে ফাইল ওভাররাইট করতে:
Expand-Archive -Path C:\archive\logs-all.zip -DestinationPath c:\logs -Force
Microsoft.PowerShell.Archive মডিউলের ডিজাডভ্যান্টেজগুলো:
- এক্সট্র্যাক্ট না করলে আর্কাইভের কন্টেন্ট দেখা যাবে না;
- আর্কাইভ থেকে কিছু ফাইল এক্সট্র্যাক্ট করা যাবে না (পুরো আর্কাইভ ফাইল এক্সট্র্যাক্ট করতে হবে);
- ZIP ছাড়া অন্যান্য আর্কাইভ ফরম্যাট ব্যবহার করা যাবে না;
- ZIP আর্কাইভ পাসওয়ার্ড দিয়ে প্রোটেক্ট করা যাবে না।
জটিল কেসগুলোতে, পাওয়ারশেল স্ক্রিপ্টে আর্কাইভিং-এর জন্য থার্ড-পার্টি টুল ব্যবহার করতে হয়। উদাহরণস্বরূপ, 7zip বা 7Zip4Powershell মডিউল।
7Zip4Powershell মডিউল ইনস্টল করে পাসওয়ার্ড প্রোটেক্টেড ZIP ফাইল এক্সট্র্যাক্ট করতে পারেন:
Install-Module -Name 7Zip4Powershell
Expand-7Zip -ArchiveFileName C:\Archive\Logs.zip -Password "p@ssd0rw" -TargetPath C:\Share\Logs
পাওয়ারশেল ZipFile ক্লাস ব্যবহার করে কমপ্রেস্ড ফাইল নিয়ে কাজ
পুরনো উইন্ডোজ ভার্সনে (উইন্ডোজ ১০ বা উইন্ডোজ সার্ভার ২০১৬-এর আগে, পাওয়ারশেল ভার্সন < 5.0-এ যদি আপনি পাওয়ারশেল ভার্সন আপগ্রেড করতে না পারেন), আপনি আলাদা ZipFile ক্লাস (NET Framework 4.5 থেকে) ব্যবহার করে ZIP আর্কাইভ তৈরি করতে পারেন।
প্রথমে ক্লাসটি আপনার পাওয়ারশেল সেশনে লোড করুন:
Add-Type -AssemblyName "System.IO.Compression.FileSystem"
ফোল্ডার আর্কাইভ করতে নিচের PS স্ক্রিপ্ট ব্যবহার করুন:
$SourceFolder = 'C:\Logs'
$ZipFileName = 'C:\PS\logs.zip'
[IO.Compression.ZipFile]::CreateFromDirectory($SourceFolder, $ZipFileName)
ZIP আর্কাইভ আপডেট করতে এবং কমপ্রেশন রেশিও সেট করতে নিচের পাওয়ারশেল কোড ব্যবহার করুন:
$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() কমান্ড ZIP ফাইল বন্ধ করতে ব্যবহৃত হয়।
ZIP আর্কাইভের কন্টেন্ট লিস্ট করতে পারেন:
[System.IO.Compression.ZipFile]::OpenRead($zipFileName).Entries.Name
অথবা ZIP আর্কাইভের কন্টেন্ট Out-GridView টেবিলে আডিশনাল ইনফো (কমপ্রেসড/আনকমপ্রেসড ফাইল সাইজ, লাস্ট রাইট টাইম, ইত্যাদি) সহ দেখাতে পারেন:
$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()
ZIP ফাইল C:\Logs ফোল্ডারে এক্সট্র্যাক্ট করতে নিচের কমান্ডগুলো ব্যবহার করুন:
$SourceZipFile = 'C:\PS\logs.zip'
$TargetFolder = 'C:\Logs'
[IO.Compression.ZipFile]::ExtractToDirectory($SourceZipFile, $TargetFolder)