কম্পিউটার টিউটোরিয়াল

পাওয়ারশেল দিয়ে ZIP আর্কাইভ তৈরি এবং আনজিপ করার পদ্ধতি

পাওয়ারশেলের ফিচার ব্যবহার করে 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

হিন্ট। Microsoft.PowerShell.Archive মডিউল System.IO.Compression.ZipArchive ক্লাস ব্যবহার করলে, আপনি ২ GB-র বড় ফাইল কমপ্রেস করতে পারবেন না (কারণ Undarlaying API-এর লিমিটেশন)। বড় ফাইল কমপ্রেস করার চেষ্টা করলে এরর আসবে:

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)

  1. উইন্ডোজ ১০-এ ফাইল কমপ্রেস ও ডিকমপ্রেস - সহজ, বিনামূল্যে, ধাপে ধাপে গাইড

  2. আইফোনে জিপ ফাইল তৈরি ও খোলার ধাপে ধাপে গাইড

  3. ম্যাকে আনজিপ ও এক্সট্রাক্ট ফাইল মাস্টার করুন—সহজ ধাপে ধাপে টিউটোরিয়াল

  4. উইন্ডোজ ১০-এ পাওয়ারশেল ব্যবহার করে ফাইল কমপ্রেস এবং এক্সট্র্যাক্ট করুন – ধাপে ধাপে গাইড