পাওয়ারশেল ব্যবহার করে কি জিপ সংরক্ষণাগার তৈরি করা সম্ভব?
পাওয়ারশেল ব্যবহার করে কি জিপ সংরক্ষণাগার তৈরি করা সম্ভব?
উত্তর:
আপনি যদি কোডপ্লেক্সে পৌঁছে যান এবং পাওয়ারশেল সম্প্রদায় এক্সটেনশানগুলিwrite-zip
ধরেন তবে আপনি সেমিডলেট ব্যবহার করতে পারেন ।
থেকে
কোডপ্লেক্স বন্ধের প্রস্তুতির জন্য কেবল পঠন মোডে রয়েছে in
আপনি পাওয়ারশেল গ্যালারী যেতে পারেন ।
write-zip [input file/folder] [output file]
একটি খাঁটি পাওয়ারশেল বিকল্প যা পাওয়ারশেল 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)
}
আপনি যে জিপ সংরক্ষণাগারটি তৈরি করতে চান তার পুরো পথ এবং আপনি যে ফাইলগুলি জিপ করতে চান সেগুলি সম্বলিত ডিরেক্টরিটির পুরো পথটি পাস করুন।
পাওয়ারশেল ভি 5.0 যোগ করে Compress-Archive
এবং Expand-Archive
সেমিডলেটস। লিঙ্কযুক্ত পৃষ্ঠাগুলিতে পূর্ণ উদাহরণ রয়েছে তবে এর সূত্রটি হ'ল:
# 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 জিবি This এটি অন্তর্নিহিত এপিআইয়ের একটি সীমাবদ্ধতা" তবে, আপনি যদি System.IO.Compression.ZipFile
এই সীমাবদ্ধতাটি বাইপাস করতে পারেন তবে ।
System.IO.Compression.ZipFile
। আপনি যে নেট নেট ফ্রেমওয়ার্কটি ব্যবহার করছেন সেটি যদি এই সীমা না থাকে, তবে সিএমডিলেট এই সীমাটিকে আঘাত করবে না। আমি কোডটিতে যাচাই করেছি।
-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 ইনস্টল করুন (বা পরিবর্তে কমান্ড লাইন সংস্করণটি ডাউনলোড করুন) এবং এই পাওয়ারশেল পদ্ধতিটি ব্যবহার করুন:
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
ফোল্ডার। নতুন সংরক্ষণাগার ফাইলে সি: \ রেফারেন্স ফোল্ডারের প্রতিটি ফাইল থাকে কারণ পাথ প্যারামিটারে নির্দিষ্ট ফাইলের নামের জায়গায় একটি ওয়াইল্ডকার্ড অক্ষর ব্যবহৃত হত ।
Compress-Archive -Path C:\Reference\* -CompressionLevel Fastest -DestinationPath C:\Archives\Draft
কমান্ড একটি সম্পূর্ণ ফোল্ডার থেকে একটি সংরক্ষণাগার তৈরি করে, C:\Reference
Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft
পাওয়ারশেল .zip
স্বয়ংক্রিয়ভাবে ফাইলের নামের সাথে এক্সটেনশনটি যুক্ত করে।
দুটি সম্পাদনা করুন - এই কোডটি পুরানো দিন থেকে একটি কুৎসিত, কুশ্রী ক্লুজ ge আপনি এটি চান না।
এই বিষয়বস্তু সংকোচন .\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()
সম্পাদনা করুন: বড় ফাইলগুলির জন্য অবিশ্বাস্য , সম্ভবত> 10 এমবি, ওয়াইএমএমভি। অ্যাপডোমেন প্রমাণ এবং বিচ্ছিন্ন স্টোরেজ সহ কিছু করার । বন্ধুত্বপূর্ণ। নেট 4.5 পদ্ধতির PS v3 থেকে দুর্দান্তভাবে কাজ করে, তবে আমার ক্ষেত্রে আরও স্মৃতি চেয়েছিল। দ্রষ্টব্য v2 থেকে .NET 4 ব্যবহার করার জন্য, কনফিগ ফাইলগুলি একটি প্রয়োজন অসমর্থিত খামচি ।
অন্য বিকল্পের নীচে দেওয়া। এটি একটি পূর্ণ ফোল্ডারটি জিপ আপ করবে এবং প্রদত্ত নামের সাথে একটি নির্দিষ্ট পথে সংরক্ষণাগারটি লিখবে।
নেট। 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)
পাওয়ারশেল v5 এর জন্য একটি স্থানীয় সমাধান এখানে রয়েছে, সেমিএসলেট Compress-Archive
ব্যবহার করে পাওয়ারশেল ব্যবহার করে জিপ ফাইল তৈরি করা ।
কমপ্রেস-সংরক্ষণাগার জন্য মাইক্রোসফ্ট ডক্সও দেখুন ।
উদাহরণ 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
কনসোল অ্যাপ্লিকেশনটি থাকবে।
আপনি এটিকে সরাসরি আবেদন করতে পারেন এবং যে কোনও সংকোচন বিকল্পটি আপনি চান ব্যবহার করতে পারেন।
আপনি যদি ডিএলএল এর সাথে জড়িত থাকতে চান তবে তাও সম্ভব হওয়া উচিত।
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()
অ্যান্ডার্স হেসেলবমের মাধ্যমে
কেন কেউ ডকুমেন্টেশনের দিকে তাকাচ্ছে না ?? একটি খালি জিপ ফাইল তৈরি করার এবং এটিতে আলাদা আলাদা ফাইল যুক্ত করার একটি সমর্থিত পদ্ধতি রয়েছে N
একটি কোড উদাহরণের জন্য নীচে দেখুন:
# 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/zip-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
সোর্স ফোল্ডার থেকে সমস্ত ফাইল জিপ করে গন্তব্য ফোল্ডারে একটি জিপ ফাইল তৈরি করুন এখানে ওয়ার্কিং কোড is
$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)
}
দ্রষ্টব্য:
জিপনেম: আপনি যে জিপ ফাইলটি তৈরি করতে চান তার সম্পূর্ণ পথ।
সোর্স ডিরেক্টরি: আপনি জিপ করতে চান এমন ফাইলগুলি অন্তর্ভুক্ত করার নির্দেশিকাটির সম্পূর্ণ পথ।
এখানে Sonjz এর উত্তরের একটি সামান্য উন্নত সংস্করণ, এটি একটি ওভাররাইট বিকল্প যুক্ত করে।
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)
}
এটি কোনও অস্থায়ী ফোল্ডারটি ব্যবহার না করে এবং কোনও নেটিভ। নেট 4.5 ব্যবহার না করে একটি একক ফাইলকে সংকোচনের জন্য কাজ করতে হবে, এই স্ট্যাকওভারফ্লো উত্তর থেকে সি # থেকে রূপান্তরিত । এটি এখান থেকে নেওয়া সিনট্যাক্স ব্যবহার করে একটি ভাল ব্যবহার করে ।
ব্যবহার:
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 }
এখানে আপনি এফটিপি-র মাধ্যমে ফাইলগুলি ব্যাকআপ, সংকোচন এবং স্থানান্তর করতে একটি পাওয়ারশেল স্ক্রিপ্ট চেক করতে পারেন ।
আপনি যদি উইনআরআর ইনস্টল করেছেন:
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;
}
আর্গুমেন্টের অর্থ: আফজিপ জিপ সংরক্ষণাগার তৈরি করে, ডিএফ ফাইল মুছে দেয়, এপি 1 আর্কাইভের মধ্যে পুরো ডিরেক্টরি পথ তৈরি করে না
এখানে 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]
অযৌক্তিক ত্রুটিগুলি দমনে শ্রেণিটি লোড করা এবং এর পদ্ধতিগুলি ব্যবহার করা একটি গুরুত্বপূর্ণ পদক্ষেপ, কারণ এটি বিদ্যুতের কোনও স্থানীয় নাগরিক, সুতরাং এটি ছাড়াই ত্রুটিগুলির বিভিন্ন প্রেক্ষাপট আশা করুন।
আমি আমার স্ক্রিপ্টটি টি-তে ত্রুটি-নিয়ন্ত্রিত করেছি, তবে [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
}
}
আমি এখানে যা করছি তা হ'ল এই আইও ত্রুটিগুলি যেমন: ইতিমধ্যে বিদ্যমান ফাইলগুলিতে অ্যাক্সেস করা, ত্রুটিটি ধরা এবং এটি কোনও লগফাইলে পরিচালিত করা যা আমি আরও বড় প্রোগ্রামের সাথে রক্ষণ করছি।
কমপ্রেসিং এবং এক্সট্র্যাক্টিং ডিরেক্টরিটি উইন্ডোজে সম্পূর্ণ কমান্ড-লাইন কমান্ডগুলি নিম্নরূপ:
সংকোচনের জন্য:
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
পাসওয়ার্ড, অন্যান্য ক্রিপ্টো পদ্ধতি ইত্যাদি সমর্থন করে
এই স্ক্রিপ্টটি সমস্ত ডিরেক্টরি পুনরাবৃত্তি করে এবং প্রতিটি জিপ করে
গেট-চাইল্ড আইটেম -অ্যাট্রিবিউটস ডি | foreach {write-zip $। নাম "$ ($। নাম)। জিপ"}