একটি নিয়ম হিসাবে, স্থানীয় এবং বিশ্বব্যাপী নেটওয়ার্কগুলিতে, ফাইলগুলি SMB, FTP বা HTTP প্রোটোকল ব্যবহার করে ডিভাইসগুলির মধ্যে স্থানান্তরিত হয়। এই সমস্ত প্রোটোকলের সমস্যা হল বড় ফাইলগুলির ডাউনলোড পুনরায় শুরু করার সাথে কিছু সমস্যা, যা নেটওয়ার্ক ধীর বা অবিশ্বস্ত হলে আরও খারাপ হতে পারে। তদুপরি, এই প্রোটোকলগুলি ব্যবহার করে ফাইলগুলি অনুলিপি করার সময়, একটি সার্ভার এবং প্রাপকের মধ্যে সমস্ত উপলব্ধ ব্যান্ডউইথ ব্যবহার করা হয়, যা নেতিবাচকভাবে নেটওয়ার্ক কর্মক্ষমতা এবং অন্যান্য নেটওয়ার্ক অ্যাপের অপারেশনকে প্রভাবিত করতে পারে (নেটওয়াকে সঠিক QoS নীতিগুলি কনফিগার করা সবসময় সম্ভব নয়। সরঞ্জাম)। এই নিবন্ধে, আমরা কিভাবে BITS প্রোটোকল এবং PowerShell ব্যবহার করব তা বিবেচনা করব একটি ধীর বা অস্থির নেটওয়ার্কে বড় ফাইল কপি করতে।
BITS প্রোটোকল
BITS (ব্যাকগ্রাউন্ড ইন্টেলিজেন্ট ট্রান্সফার সার্ভিস) সিস্টেমের মধ্যে ফাইল স্থানান্তর করতে ব্যবহৃত একটি উইন্ডোজ পরিষেবা। আপনি BITS প্রোটোকল ব্যবহার করে ফাইল ডাউনলোড এবং আপলোড করতে পারেন। স্বয়ংক্রিয় উইন্ডোজ আপডেট করার সময় (WSUS সার্ভার থেকে আপডেট ডাউনলোড করার ক্ষেত্রে কেস সহ), SCCM ডিস্ট্রিবিউশন পয়েন্ট ইত্যাদি থেকে প্রোগ্রাম গ্রহণ করার সময় সার্ভার থেকে ফাইল গ্রহণ করার সময় এই প্রোটোকলটি কম্পিউটার দ্বারা ব্যবহৃত হয়।
BITS প্রোটোকলের সুবিধাগুলি :
- BITS হল একটি বুদ্ধিমান প্রোটোকল যা যোগাযোগ চ্যানেলের ব্যবহৃত ব্যান্ডউইথকে নিয়ন্ত্রণ করতে সক্ষম এবং অন্যান্য নেটওয়ার্ক অ্যাপ এবং পরিষেবাগুলির ক্রিয়াকলাপকে প্রভাবিত করতে পারে না৷ BITS শুধুমাত্র বিনামূল্যে (অবরাদ্দকৃত) ব্যান্ডউইথ ব্যবহার করতে পারে এবং স্থানান্তরের সময় গতিশীলভাবে ডেটা রেট পরিবর্তন করতে পারে (যদি অন্য অ্যাপ্লিকেশনগুলি নেটওয়ার্ক ব্যবহার বাড়ায়, BITS ক্লায়েন্ট নেটওয়ার্কে ডেটা স্থানান্তর হার কমাতে পারে);
- ফাইল ডাউনলোড ব্যবহারকারীর কাছে স্বচ্ছভাবে ব্যাকগ্রাউন্ড মোডে এগিয়ে যেতে পারে;
- কম্পিউটার এবং ক্লায়েন্টের মধ্যে যোগাযোগের চ্যানেল ভেঙ্গে গেলেও বা কম্পিউটার রিবুট করার পরেও রিজুমে মোডে BITS কাজ স্বয়ংক্রিয়ভাবে চলতে থাকবে;
- আপনি ডেটা হারানো ছাড়াই BITS-এর মাধ্যমে ডাউনলোড করা থামাতে বা পুনরায় শুরু করতে পারেন; দ্রষ্টব্য . নেটওয়ার্কের মাধ্যমে ফাইল কপি করা পুনরায় শুরু করার ক্ষমতা robocopy.exe ইউটিলিটিতেও পাওয়া যায়, যা আপনাকে সংযোগ হারিয়ে গেলে ফাইলটি আবার ডাউনলোড করা শুরু করতে দেয়।
- BITS আপনাকে কাজ ডাউনলোড করার অগ্রাধিকারগুলি পরিচালনা করতে দেয়;
- কম্পিউটারগুলির মধ্যে ফাইল স্থানান্তর পোর্ট 80 (HTTP) বা 443 (HTTPS) এ ঘটে, তাই আপনাকে ফায়ারওয়ালে অতিরিক্ত পোর্ট খুলতে হবে না। উদাহরণস্বরূপ, পোর্ট 445, যা SMB প্রোটোকলের মাধ্যমে ফাইল কপি করার সময় ব্যবহৃত হয় (ভুলে যাবেন না যে SMB 1.0 প্রোটোকলের পুরানো সংস্করণে অনেক দুর্বলতা রয়েছে);
- বিআইটিএস প্রাপক এবং সার্ভারের পাশে একটি স্থাপন করা IIS সার্ভারের প্রয়োজন হয় না৷
সুতরাং, ধীরগতির এবং অস্থির নেটওয়ার্কগুলিতে (স্যাটেলাইট চ্যানেল, জিপিআরএস সংযোগ, ইত্যাদি) বড় ফাইল স্থানান্তর করার জন্য BITS হল পছন্দের প্রোটোকল।
BITS:OS এবং PowerShell সংস্করণের প্রয়োজনীয়তা
BITS প্রোটোকল Windows XP-এ উপস্থিত হয়েছে, যেখানে bitsadmin.exe ইউটিলিটি BITS কাজগুলি পরিচালনা করতে ব্যবহার করা যেতে পারে। ইউটিলিটি এখনও সমর্থিত, কিন্তু অবহেলিত। BITS কাজ পরিচালনা করতে, বিশেষ PowerShell cmdlets ব্যবহার করা বাঞ্ছনীয়।
এই পরিস্থিতিতে কাজ করার জন্য, আপনার Windows Vista বা Windows Server 2008 এবং PowerShell 2.0 বা তার চেয়ে কম নয় এমন একটি OS প্রয়োজন৷ Windows 10 এবং Windows Server 2016/2012 R2 এর আধুনিক সংস্করণগুলি সম্পূর্ণরূপে BITS সমর্থন করে৷
টিপ . উইন্ডোজ সার্ভার 2003 ব্যবহার করাও সম্ভব। এই ক্ষেত্রে আপনাকে KB 923845 আপডেট এবং PowerShell 2.0 ইনস্টল করতে হবে।ক্লায়েন্ট এবং সার্ভার উভয় দিকেই BITS সমর্থন প্রয়োজন৷
পাওয়ারশেল ব্যবহার করে BITS প্রোটোকলের মাধ্যমে একটি ফাইল কীভাবে ডাউনলোড করবেন?
ধরুন আপনি IIS HTTP সার্ভারে সংরক্ষিত একটি বড় ISO ফাইল ডাউনলোড করতে চান (https://10.1.1.18/erd65_32.iso ) এটা ধরে নেওয়া হয় যে এই ইউআরএলে বেনামী অ্যাক্সেস অনুমোদিত (পরে আমরা প্রমাণীকরণ সহ ইউআরএল অ্যাক্সেস বিবেচনা করব)।
প্রথমত, আপনার PowerShell সেশনে BITS মডিউল আমদানি করুন:
Import-Module BitsTransfer
মডিউলটি আমদানি করার পরে, সমস্ত উপলব্ধ কমান্ডের তালিকা নিম্নরূপ প্রদর্শিত হতে পারে:
get-command *-BITS*
আপনি দেখতে পাচ্ছেন, এখানে 8টি cmdlet পাওয়া যায়:
- অ্যাড-বিটসফাইল
- সম্পূর্ণ-বিট ট্রান্সফার
- গেট-বিট ট্রান্সফার
- বিট ট্রান্সফার সরান
- রিজুমে-বিট ট্রান্সফার
- সেট-বিট ট্রান্সফার
- স্টার্ট-বিট ট্রান্সফার
- সাসপেন্ড-বিট ট্রান্সফার
বিটস ব্যবহার করে কম্পিউটারের মধ্যে সিঙ্ক্রোনাস ফাইল স্থানান্তর
স্টার্ট-বিট ট্রান্সফে r cmdlet আপনাকে HTTP(গুলি) (যেমন Invoke-WebRequest cmdlet) এর পাশাপাশি নেটওয়ার্ক শেয়ার করা ফোল্ডারগুলি থেকে (SMB এর মাধ্যমে) ফাইল ডাউনলোড করতে দেয়। BITS প্রোটোকল ব্যবহার করে নির্দিষ্ট URL থেকে একটি ফাইল ডাউনলোড করতে এবং স্থানীয় ডিরেক্টরি C:\Temp-এ সংরক্ষণ করতে, কমান্ডটি ব্যবহার করুন:
Start-BitsTransfer –source https://10.1.1.18/erd65_32.iso -destination c:\temp
বার্তাটি “এটি একটি ফাইল স্থানান্তর যা ব্যাকগ্রাউন্ড ইন্টেলিজেন্ট ট্রান্সফার সার্ভিস (BITS) ব্যবহার করে” মানে নির্দিষ্ট ফাইলটি BITS ব্যবহার করে ডাউনলোড করা হচ্ছে।
এই ক্ষেত্রে cmdlet একটি সিঙ্ক্রোনাস মোডে ISO ফাইল ডাউনলোড করা শুরু করেছে। ডাউনলোডটি ফাইল এক্সপ্লোরারের মাধ্যমে বা কপি-আইটেম cmdlet ব্যবহার করে ফাইল কপি করার একটি সাধারণ প্রক্রিয়ার মতো। একটি অগ্রগতি বার স্ক্রিনে প্রদর্শিত হয়, যা ডাউনলোডের স্থিতি দেখায়। যদি একটি কম্পিউটার পুনরায় চালু করা হয়, ডাউনলোড পুনরায় শুরু করা হবে না (আপনাকে আবার সম্পূর্ণ ফাইল ডাউনলোড করতে হবে)।
অসিঙ্ক্রোনাস মোডে BITS-এর মাধ্যমে নেটওয়ার্কে বড় ফাইল স্থানান্তর করা হচ্ছে
BITS ডাউনলোড অ্যাসিঙ্ক্রোনাস মোডেও শুরু করা যেতে পারে। এটি করতে, –অসিঙ্ক্রোনাস যোগ করুন উপরে দেখানো কমান্ডের পরামিতি। এই মোডে, কিছু ঘটলে (সার্ভার বা ক্লায়েন্ট রিবুট, যোগাযোগ চ্যানেলের বাধা, ইত্যাদি), উৎস পুনরুদ্ধার করার পরে BITS কাজ স্বয়ংক্রিয়ভাবে পুনরায় শুরু হবে এবং সংযোগ বিঘ্নিত হওয়ার মুহুর্ত থেকে ফাইল ডাউনলোড চলতে থাকবে:
Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous
গুরুত্বপূর্ণ . ডিফল্টরূপে, স্টার্ট-বিটসট্রান্সফার ফোরগ্রাউন্ড অগ্রাধিকারের সাথে চলে (সর্বোচ্চ সম্ভাব্য একটি)। এটি অনুমিত হয় যে এই মোডে শুরু হওয়া ডাউনলোড চ্যানেল ব্যান্ডউইথের জন্য অন্যান্য প্রক্রিয়াগুলির সাথে প্রতিযোগিতা করবে। এটি এড়াতে, আপনাকে কমান্ডের যুক্তি হিসাবে স্পষ্টভাবে অন্য কোন অগ্রাধিকার সেট করতে হবে, e. g., -অগ্রাধিকার কম:
Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low
অ্যাসিঙ্ক্রোনাস BITS টাস্কটি ব্যাকগ্রাউন্ডে চলে এবং ফাইল ডাউনলোড প্রক্রিয়া স্ক্রিনে প্রদর্শিত হয় না। Get-BitsTransfer ব্যবহার করে PowerShell কনসোল থেকে BITS কাজের স্থিতি পাওয়া যেতে পারে কমান্ড:
Get-BitsTransfer | fl
কমান্ডটি স্থানান্তরের স্থিতি প্রদান করে (এই ক্ষেত্রে স্থানান্তর শেষ হয়েছে:স্থানান্তরিত), স্থানান্তরিত বাইটের সংখ্যা, মোট ফাইলের আকার, ফাইলটি তৈরি হওয়ার সময় এবং কাজটি শেষ হওয়ার সময় সম্পর্কে তথ্য।
আপনি টেবিল ফর্মে কম্পিউটারে চলমান সমস্ত BITS কাজের অবস্থা দেখতে পারেন:
Get-BitsTransfer | select DisplayName, BytesTotal, BytesTransferred, JobState | Format-Table -AutoSize
অ্যাসিঙ্ক্রোনাস ট্রান্সফার মোড ব্যবহার করার সময়, TMP সহ একটি অস্থায়ী ফাইল এক্সটেনশন তৈরি করা হয় (ডিফল্টরূপে, এটি উইন্ডোজ এক্সপ্লোরারে লুকানো থাকে)। এটিকে সোর্স ফাইলে রূপান্তর করতে (যা সোর্স সার্ভারে সংরক্ষিত থাকে), কমান্ডটি চালান Complete-BitsTransfer :
Get-BitsTransfer | Complete-BitsTransfer
বিআইটিএস ডাউনলোডের কাজটি তখন সম্পন্ন বলে বিবেচিত হয় এবং চাকরির তালিকা থেকে সরিয়ে দেওয়া হয়।
আপনি দূরবর্তী উইন্ডোজ ফাইল সার্ভারে একটি নেটওয়ার্ক শেয়ার করা ফোল্ডারে একটি স্থানীয় ফাইল আপলোড করতে পারেন। এটি করার জন্য, নিম্নলিখিত কমান্ডটি ব্যবহার করুন (সুবিধার জন্য, আপনি কপি কাজের নাম উল্লেখ করতে পারেন):
Start-BitsTransfer -Source C:\iso\w10_1809.iso -Destination \\manch-fs1\iso -Asynchronous -DisplayName CopyISOtoMan
একটি BITS টাস্ক সাময়িকভাবে স্থগিত করতে, চালান:
Get-BitsTransfer -Name CopyISOtoMan | Suspend-BitsTransfer
BITS কাজ পুনরায় শুরু করতে, Resume-BitsTransfer cmdlet ব্যবহার করুন:
Get-BitsTransfer -Name CopyISOtoMan | Resume-BitsTransfer -Asynchronous
আপনি Add-BitsFile cmdlet ব্যবহার করে BITS টাস্কে অতিরিক্ত ফাইল যোগ করতে পারেন:
Get-BitsTransfer -Name CopyISOtoMan | Add-BitsFile -Source C:\iso\w10msu\* -Destination \\manch-fs1\iso -Asynchronous
কম্পিউটারে (অন্যান্য ব্যবহারকারীদের দ্বারা শুরু করা সহ) সমস্ত BITS ডাউনলোড কার্যগুলি মুছতে, নিম্নলিখিত কমান্ডটি চালান:
Get-BitsTransfer -Allusers|Remove-BitsTransfer
আপনি সিস্টেম অ্যাকাউন্টের অধীনে চলমান BITS কাজগুলি বাতিল করতে পারবেন না (ত্রুটি 0x80070005 "চাকরি বাতিল করতে অক্ষম")। এই ধরনের একটি কাজ বাতিল করতে, আপনাকে সিস্টেমের অধীনে Remove-BitsTransfer কমান্ডটি চালাতে হবে।
সার্ভারের, যেখানে ফাইলটি সংরক্ষণ করা হয়, ব্যবহারকারীর প্রমাণীকরণের প্রয়োজন হলে, নিম্নলিখিত কমান্ডটি সংস্থান অ্যাক্সেস করার জন্য শংসাপত্রগুলি নির্দিষ্ট করার জন্য একটি উইন্ডো দেখানোর অনুমতি দেবে:
Start-BitsTransfer -source https://10.1.1.18/erd65_32.iso -destination c:\temp -asynchronous -Priority low -Authentication NTLM -Credential Get-Credential
একটি BITS টাস্কের ফলাফলগুলি ট্র্যাক করা সহজ করতে, আপনি একটি সাধারণ স্ক্রিপ্ট ব্যবহার করতে পারেন, যা কাজের অগ্রগতি ট্র্যাক করতে দেয় এবং প্রতি কয়েক সেকেন্ডে একবার স্ক্রিনে ডাউনলোড শতাংশ প্রদর্শন করে৷ ডাউনলোড শেষ হওয়ার পরে, স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে TMP ফাইলটিকে উৎস বিন্যাসে রূপান্তর করে:
Import-Module BitsTransfer
$bitsjob = Start-BitsTransfer -Source https://10.1.1.18/erd65_32.iso -Destination c:\temp -Asynchronous
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Write-host $bitsjob.JobState.ToString()
$Proc = ($bitsjob.BytesTransferred / $bitsjob.BytesTotal) * 100
Write-Host $Proc “%”
Sleep 3
}
Complete-BitsTransfer -BitsJob $bitsjob
কিভাবে BITS ব্যবহার করে ডিরেক্টরির বিষয়বস্তু কপি করবেন?
আমরা আগেই বলেছি, BITS-এর জন্য কোনো ওয়েব-সার্ভারের প্রয়োজন নেই, এবং এর মানে হল যে আমরা অন্য উইন্ডোজ কম্পিউটার বা নেটওয়ার্ক শেয়ার করা ফোল্ডার থেকে সরাসরি ফাইল কপি করতে পারি:
Start-BitsTransfer -Source \\lon-rep01\os\RHEL4.8-x86_64-AS-DVD.iso -Destination c:\temp -Asynchronous
BitsTransfer একটি নির্দিষ্ট ফোল্ডার বা অন্যান্য প্রোগ্রাম দ্বারা ব্যবহৃত ফাইলগুলি থেকে সমস্ত ফাইল এবং ফোল্ডার পুনরাবৃত্তিমূলকভাবে অনুলিপি করতে পারে না। নির্দিষ্ট নেটওয়ার্ক শেয়ার করা ফোল্ডার থেকে সমস্ত ফাইল এবং সাবডিরেক্টরি কপি করার জন্য, এই স্ক্রিপ্টটি ব্যবহার করুন (আপনি প্রথমে লক্ষ্য ডিরেক্টরিটি বিদ্যমান কিনা তা পরীক্ষা করে দেখতে পারেন):
Import-Module BitsTransfer
$Source="\\lond-rep01\share\"
$Destination="c:\tmp\"
if ( -Not (Test-Path $Destination))
{
$null = New-Item -Path $Destination -ItemType Directory
}
$folders = Get-ChildItem -Name -Path $source -Directory -Recurse
$bitsjob = Start-BitsTransfer -Source $Source\*.* -Destination $Destination -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
foreach ($i in $folders)
{
$exists = Test-Path $Destination\$i
if ($exists -eq $false) {New-Item $Destination\$i -ItemType Directory}
$bitsjob = Start-BitsTransfer -Source $Source\$i\*.* -Destination $Destination\$i -asynchronous -Priority low
while( ($bitsjob.JobState.ToString() -eq 'Transferring') -or ($bitsjob.JobState.ToString() -eq 'Connecting') )
{
Sleep 4
}
Complete-BitsTransfer -BitsJob $bitsjob
}
কিভাবে PowerShell এবং BITS ব্যবহার করে HTTP সার্ভারে ফাইল আপলোড করবেন?
BITS-এর মাধ্যমে, আপনি শুধুমাত্র একটি HTTP সার্ভার থেকে একটি ফাইল ডাউনলোড করতে পারবেন না, কিন্তু এটি একটি দূরবর্তী ওয়েব সার্ভারে আপলোড করতে পারবেন। এটি করার জন্য, বিট সার্ভার এক্সটেনশন সহ IIS ওয়েব সার্ভার কম্পোনেন্ট টার্গেট সার্ভারে ইনস্টল করা আবশ্যক। বিট আপলোড-এ IIS ভার্চুয়াল ডিরেক্টরির সেটিংসে বিভাগে, আপনাকে “ক্লায়েন্টদের ফাইল আপলোড করার অনুমতি দিন সক্ষম করতে হবে৷ ” বিকল্প।
আপনি যদি বেনামী প্রমাণীকরণ ব্যবহার করেন তবে আপনাকে অবশ্যই বেনামী ব্যবহারকারীদের NTFS অনুমতি স্তরের ডিরেক্টরিতে লিখতে অনুমতি দিতে হবে। ফাইল আপলোডগুলি অনুমোদিত ব্যবহারকারীদের অধীনে সঞ্চালিত হলে, তাদের আপলোড ফোল্ডারে RW অনুমতি দিতে হবে৷
BITS প্রোটোকল ব্যবহার করে একটি HTTP সার্ভারে একটি ফাইল আপলোড করতে, নিম্নলিখিত কমান্ডটি চালান:
Start-bits –source c:\iso\winsrv2016.iso -destination https://10.1.1.18/MEDVImages/winsrv2016.iso –Transfertype Upload
এইভাবে, BITS বৈশিষ্ট্যগুলি ব্যবহার করা SMB প্রোটোকল ব্যবহার করে নেটওয়ার্কে সাধারণ ফাইল কপি করার একটি দুর্দান্ত বিকল্প। সংযোগ বিঘ্নিত হওয়া বা কম্পিউটার পুনরায় চালু হওয়া সত্ত্বেও BITS ফাইল স্থানান্তরের কাজটি সম্পাদিত হয় এবং অন্যান্য অ্যাপের সাথে হস্তক্ষেপ না করে ব্যান্ডউইথ বেশি দখল করে না। একটি WAN নেটওয়ার্কে বড় ISO ইমেজ এবং ভার্চুয়াল মেশিন ফাইল (vmdk, vhdx) স্থানান্তর করার জন্য BITS প্রোটোকল হতে পারে সর্বোত্তম সমাধান৷