আপনি জিপ সংরক্ষণাগার তৈরি করতে এবং সেগুলি বের করতে পাওয়ারশেলের বৈশিষ্ট্যগুলি ব্যবহার করতে পারেন। PowerShell 5.0-এ (এই PowerShell সংস্করণটি Windows 10-এ ডিফল্টরূপে ইনস্টল করা থাকে), একটি পৃথক মডিউল Microsoft.PowerShell.Archive সহজলভ্য. Windows এর পুরানো সংস্করণগুলিতে, আপনি ZipFile ব্যবহার করতে পারেন৷ আর্কাইভ করার জন্য .NET ফ্রেমওয়ার্ক থেকে ক্লাস।
Microsoft.PowerShell.Archive মডিউলে শুধুমাত্র দুটি cmdlet আছে (C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.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
আসুন আপনার PowerShell স্ক্রিপ্টগুলিতে ZIP সংরক্ষণাগার তৈরি এবং নিষ্কাশন করতে এই cmdlets ব্যবহার করার উদাহরণ দেখি৷
PowerShell:কম্প্রেস-আর্কাইভ দিয়ে জিপ আর্কাইভ তৈরি করুন
কম্প্রেস-আর্কাইভ কমান্ডের নিম্নলিখিত সিনট্যাক্স রয়েছে:
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
আপনি একটি নির্দিষ্ট মাস্ক সহ শুধুমাত্র ফাইলগুলি ZIP সংরক্ষণাগারে যোগ করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত কমান্ডটি শুধুমাত্র *.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
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
এক্সপ্যান্ড-আর্কাইভ দিয়ে কিভাবে একটি জিপ ফাইল বের করবেন?
জিপ ফাইল আনজিপ করতে আপনি এক্সপ্যান্ড-আর্কাইভ 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 মডিউলের অসুবিধা:
- আপনি আর্কাইভের বিষয়বস্তু এক্সট্র্যাক্ট না করে দেখতে পারবেন না;
- আপনি সংরক্ষণাগার থেকে কিছু ফাইল বের করতে পারবেন না (আপনাকে সম্পূর্ণ সংরক্ষণাগার ফাইলটি বের করতে হবে);
- আপনি জিপ ছাড়া অন্য আর্কাইভ ফরম্যাট ব্যবহার করতে পারবেন না;
- আপনি একটি পাসওয়ার্ড দিয়ে একটি ZIP সংরক্ষণাগার রক্ষা করতে সক্ষম হবেন না৷ ৷
আপনি 7Zip4Powershell মডিউল ইনস্টল করতে পারেন এবং নিম্নরূপ একটি পাসওয়ার্ড সুরক্ষিত জিপ ফাইল বের করতে পারেন:
Install-Module -Name 7Zip4Powershell
Expand-7Zip -ArchiveFileName C:\Archive\Logs.zip -Password "p@ssd0rw" -TargetPath C:\Share\Logs
PowerShell ZipFile ক্লাসের সাথে সংকুচিত ফাইলগুলির সাথে কাজ করা
পূর্ববর্তী 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()
জিপ ফাইল বন্ধ করতে কমান্ড ব্যবহার করা হয়। আপনি ZIP সংরক্ষণাগারের বিষয়বস্তু তালিকাভুক্ত করতে পারেন:
[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 ফোল্ডারে ZIP ফাইলটি বের করতে, নিম্নলিখিত কমান্ডগুলি ব্যবহার করুন:
$SourceZipFile = 'C:\PS\logs.zip'
$TargetFolder = 'C:\Logs'
[IO.Compression.ZipFile]::ExtractToDirectory($SourceZipFile, $TargetFolder)