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

হোম ইউজারদের জন্য PowerShell ব্যবহার - একটি বেসিক গাইড

কে চায় না তিনি একজন উইজার্ড হন এবং কয়েকটি শব্দ উচ্চারণ করলে ম্যাজিক্যাল জিনিসগুলো ঘটে? খুব অঙ্গীকার, আমরা আপনাকে উইজার্ড হতে দেখাতে পারব না, কিন্তু আমরা আপনাকে কিছু কম্পিউটার ম্যাজিক দেখাতে পারি।

আপনার কাছে যদি Windows 7-সহ একটি Windows কম্পিউটার থাকে, আপনার কাছে PowerShell আছে। এছাড়া, আপনার কাছে যদি Windows 7-সহ একটি কম্পিউটার থাকে, দয়া করে সিকিউরিটির জন্য আপডেট করুন।

কিন্তু এই আর্টিকেল শুধু Windows লোকদের জন্য নয়। PowerShell-এর লেটেস্ট ভার্সন ফ্রি এবং Mac এবং Linux কম্পিউটারে ইন্সটল এবং ব্যবহার করা যেতে পারে।

এটি গুরুত্বপূর্ণ কারণ আপনি PowerShell সম্পর্কে যা শিখবেন সেটি প্রায় যেকোনো কম্পিউটারে এখন ব্যবহার করা যাবে। কে জানে? আপনি এই স্কিলটি পরবর্তী লেভেলে নিয়ে যেতে পারেন এবং ইনফরমেশন টেকনোলজিতে ক্যারিয়ার শুরু করতে পারেন।

PowerShell কী?

Microsoft-এর হাই-টেক জবাব হলো এটি একটি, "সিস্টেম অ্যাডমিনিস্ট্রেটরদের জন্য বিশেষভাবে ডিজাইন করা একটি কমান্ড-লাইন শেল।" ভয়ঙ্কর শোনাচ্ছে। কিন্তু এটি নয়। আপনি কি আপনার কম্পিউটারের যত্ন নেন? হ্যাঁ, তবে আপনি আপনার বাড়ির সিস্টেম অ্যাডমিনিস্ট্রেটর।

আপনি কি আপনার কম্পিউটারকে ক্লিক এবং কীস্ট্রোক দিয়ে কী করবে সেটি বলেন? হ্যাঁ, তাহলে কমান্ড-লাইন শেল কে শুধু অন্য একটি উইন্ডো হিসেবে ভাবুন যেখানে আপনি কিছু টাইপ করে আপনার কম্পিউটারকে কী করবে সেটি বলেন। আপনি এটি করতে পারেন।

PowerShell একটি প্রোগ্রামিং ল্যাঙ্গুয়েজের মতো, কিন্তু повечеাংশের চেয়ে কম ক্রিপ্টিক। এটিwirklich অনেক সাধারণ ইংরেজির মতো পড়ে, যা Microsoft লক্ষ্য করেছিল যাতে নন-প্রোগ্রামাররা এটিকে পিক আপ করতে পারে।

এটি কয়েকটি লাইন কমান্ড লেখার একটি উপায়, যাকে একটি স্ক্রিপ্ট বলা হয়, Windows অপারেটিং সিস্টেমকে আপনি যা করাতে চান সেটি করানোর জন্য। তারপর, আপনি সেগুলো একটি ফাইলে সেভ করতে পারেন এবং এক ক্লিকে বা সময়সূচী অনুযায়ী পর্যায়ক্রমে চালাতে পারেন।

PowerShell-র সাথে আপনি কী করতে পারেন?

PowerShell-এর হাই-লেভেল পয়েন্ট হলো টাস্ক অটোমেট করতে পারা, যাতে আপনাকে বার বার একই নীরস কাজ করতে হয় না। একজন প্রফেশনাল সিস্টেম অ্যাডমিনিস্ট্রেটরের জন্য, সেটি কিছুতে হতে পারে নতুন ব্যবহারকারী তৈরি করা, তাদের জন্য পাসওয়ার্ড জেনারেট করা, এবং ডিটেইলসহ তাদের নতুন সুপারভাইজারের কাছে একটি ইমেইল পাঠানো।

ম্যানুয়ালি করা হলে, ক্লিক এবং টাইপিং দিয়ে, সেই প্রসেস ৫ মিনিট থেকে যতটুকু এক ঘন্টা বা তারও বেশি সময় নিতে পারে। সঠিক স্ক্রিপ্টের সাথে, সিস্টেম অ্যাডমিনিস্ট্রেটরকে সেটির যেকোনো অংশ করতে হবেনা।

তবে আপনি বাড়িতে PowerShell-র সাথে কী করতে পারেন তা জানতে চান। প্রায় যেকোনো কিছু যা আপনি পছন্দ করেন না বার বার করতে। আপনার হার্ড ড্রাইভে জায়গা ফ্রি করতে এটি ব্যবহার করুন অপ্রয়োজনীয় টেম্পোরারি এবং লগ ফাইল ডিলিট করে।

আপনার বাচ্চাদের কম্পিউটারের জন্য একটি কারফিউ লাগান। একসাথে অনেক ফাইল রিনেম বা অর্গানাইজ করুন। PowerShell-এর সৌন্দর্য এটাই। আপনার কম্পিউটারে আপনি প্রায় যেকোনো কিছু করতে পারেন, আপনি সেটির জন্য একটি PowerShell স্ক্রিপ্ট তৈরি করতে পারেন অটোমেট এবং এক ক্লিকে বা একটি সময়সূচীতে চালাতে পারেন।

PowerShell কীভাবে ব্যবহার করবেন?

PowerShell-র সাথে কাজ করার সবচেয়ে সহজ উপায় হলো PowerShell ইন্টিগ্রেটেড স্ক্রিপ্টিং এনভায়রনমেন্ট (ISE)-এ। আপনি এটিকে Windows 10-এ স্টার্ট-এ ক্লিক করে এবং সার্চ বারে powershell ise টাইপ করে খুঁজে পেতে পারেন। আপনাকে নিচের মত দেখাবে।

প্রথমবার যেহেতু আমরা এটি ব্যবহার করছি, আমরা এটি অ্যাডমিনিস্ট্রেটর হিসেবে চালাব। এটি করার জন্য, আপনাকে প্রথমে আপনার কম্পিউটারে অ্যাডমিনিস্ট্রেটর অধিকার থাকতে হবে। আপনার স্টার্ট মেনু-এ, PowerShell ISE-এ রাইট-ক্লিক করুন, তারপর রান অ্যাজ অ্যাডমিনিস্ট্রেটর-এ ক্লিক করুন।

আপনার একটি ইউজার অ্যাক্সেস কন্ট্রোল (UAC) ওয়ার্নিং পপ-আপ আসতে পারে যা জিজ্ঞাসা করবে আপনি নিশ্চিত কি আপনি এটি করতে চান। Yes-এ ক্লিক করুন।

এখন আপনি PowerShell IDE-কে দেখছেন। উইন্ডোর উপরের প্যান (১) হলো স্ক্রিপ্টিং প্যান। এখানেই আপনি আপনার স্ক্রিপ্ট লিখবেন। উইন্ডোর নিচের প্যান (২) হলো কনসোল এরিয়া। আপনি আপনার স্ক্রিপ্ট টেস্ট করলে, আপনি আউটপুট এখানে দেখবেন।

এটিও সেখানে আপনি এরর মেসেজ এবং এমনকি দেখবেন যা আপনাকে আপনার স্ক্রিপ্ট ফিক্স এবং উন্নত করতে সাহায্য করবে। উইন্ডোর ডান পাশের প্যান (৩) হলো কমান্ড অ্যাড-অন। এটিকে আপনার জন্য উপলব্ধ সব PowerShell কমান্ডের একটি ডিকশনারি হিসেবে ভাবুন।

PowerShell ডিফল্টলি যেকোনো স্ক্রিপ্ট চালাতে সেট আপ করা থাকে না যেগুলো ইতিমধ্যে Windows-এর অংশ। আপনাকে এটি পরিবর্তন করতে হবে যাতে আপনি আপনার নিজস্ব স্ক্রিপ্ট চালাতে পারেন।

স্ক্রিপ্টিং উইন্ডোতে, নিচেরটি কপি এবং পেস্ট করুন:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

এটির Set-ExecutionPolicy অংশটিকে একটি cmdlet (উচ্চারণ "commandlet") বলা হয়। Cmdlets শক্তিশালী জিনিস। এগুলোকে Windows-এ আপনি যেসব ছোট কমান্ড দিতে পারেন সেগুলো হিসেবে ভাবুন, এবং Windows সেটি স্যাটিসফাই করার জন্য আরও জটিল জিনিসের একটি গুচ্ছ করবে।

একটি উপমা হবে আপনার বাচ্চাকে তাদের রুম ক্লিন করতে বলা। ছোট এবং টু দ্য পয়েন্ট। আপনার বাচ্চা যদি রুম ক্লিনিং-এ ভালো হয়, তবে তারা যাবে এবং তাদের বিছানা সাজাবে, তাদের লন্ড্রি বাস্কেটে রাখবে, তাদের খেলনা এবং বই শেলফে রাখবে, এবং হয়তো ফ্লোরও ভ্যাকুয়াম করবে। তারা বুঝতে পারে যে cmdlet Clean-YourRoom সেটাই সব কিছু বোঝাচ্ছে।

উইন্ডোর শীর্ষে, আপনি একটি সবুজ অ্যারোহেড দেখবেন। সেটিতে ক্লিক করুন কমান্ডটি চালানোর জন্য।

-ExecutionPolicy অংশটি Set-ExecutionPolicy-কে বলে কোন পলিসি সেট করবে। এটি একটি প্যারামিটার। এটি বলে, "আমি চাই তুমি এই গাইডলাইনের মধ্যে কাজ কর এবং নির্দিষ্টভাবে এটি কর।" এটি নির্দিষ্ট পলিসি RemoteSigned ব্যবহার করতে বলে।

RemoteSigned পলিসি বলে যে PowerShell ইন্টারনেট থেকে ডাউনলোড করা যেকোনো স্ক্রিপ্ট এক্সিকিউট বা রান করতে পারবে না যদি সেটি একটি বিশ্বস্ত পাবলিশার দ্বারা সাইন করা না থাকে।

একটি বক্রমার্গে, এটি PowerShell-কে বলে যে লোকালি তৈরি করা যেকোনো স্ক্রিপ্ট রান করাতে কোনো সমস্যা নেই, কারণ সেগুলো একটি রিমোট বিশ্বস্ত পাবলিশার দ্বারা সাইন করা দরকার নেই। এখন, আপনার PowerShell স্ক্রিপ্ট আপনার কম্পিউটারে আপনি যা লিখবেন সেকো চালাতে পারবে।

চলুন একটি স্ক্রিপ্ট দেখি যা টেম্পোরারি ফাইল ডিলিট করে। এটি CCleaner만큼 শক্তিশালী বা গভীর নয়, কিন্তু CCleaner-এর নিজস্ব সমস্যা সেট আছে।

PowerShell ব্যবহার করে আপনার হার্ড ড্রাইভে জায়গা তৈরি করুন

আমরা এই স্ক্রিপ্টটি লাইন বাই লাইন ব্রেক ডাউন করব যাতে আপনি দেখতে পান কীভাবে এটি কাজ করে। শেষে, স্ক্রিপ্টটি সম্পূর্ণ দেখানো হবে যাতে আপনি কপি এবং পেস্ট করতে পারেন যদি চান।

$TempFileLocation = "C:\Users\username\Appdata\Local\Temp\*"

যেকোনো জিনিস जिसके সামনে ডলার সাইন থাকে সেটি একটি ভেরিয়েবল নাম। এটিকে একটি ਵॉलেট হিসেবে ভাবুন মূল্যবান জিনিস রাখার জন্য। Wallet আমাদের ডলার সাইনের কথা মনে করায়, valuables ভেরিয়েবলের মতো শোনায়, তাই আমরা সেটি মনে রাখব। আমরা একটি ওয়ালেট, অথবা ভেরিয়েবল তৈরি করছি যার নাম $TempFileLocation। ইকুয়াল সাইন PowerShell-কে বলে সেটিতে কী রাখতে হবে।

এই কেসে, আমরা একটি Windows টেম্পোরারি ফাইল লোকেশনের লোকেশন রাখছি - C:\Users\username\AppData\Local\Temp\*। আমরা এটা দুটি কারণ করছি; এটি একটি লোকেশন যেটি সবসময় ফাইল ডিলিট করার জন্য নিরাপদ, এবং আমরা এটি ব্যবহার করব PowerShell-কে বলতে কোথায় যেতে হবে ফাইল ডিলিট করতে।

যেখানে লোকেশনে username লেখা আছে, সেটিকে আপনার ইউজারনেম দিয়ে বদল দিন। সেটি সে ইউজারনেম যা আপনি আপনার কম্পিউটারে লগইন করতে ব্যবহার করেন। তার শেষে এস্টারিস্ক (*) একটি ওয়াইল্ডকার্ড। এটিকে প্রতিনিধিত্ব করে Temp ফোল্ডারে সব কিছু, কারণ Temp ফোল্ডারে সব কিছু টেম্পোরারি এবং আমরা সেগুলো ডিলিট করতে চাই।

লোকেশনের চারপাশে ডবল-কোটেশন গুরুত্বপূর্ণ। এটি PowerShell-কে বলে যে সেটির ভিতরে একটি স্ট্রিং আছে। স্ট্রিং কে একটি অক্ষর এবং ক্যারেক্টারের স্ট্রিং হিসেবে ভাবুন। যদি সেটি সাধারণ সংখ্যা হতো, আমরা কোটেশন ব্যবহার করতাম না।

$TempFile = Get-ChildItem $TempFileLocation -Recurse

আমরা আরেকটি ভেরিয়েবল তৈরি করছি। এইবার আমরা একটি কমান্ড ব্যবহার করব $TempFile ভেরিয়েবলে রাখার কিছু খুঁজে বের করতে।

Get-ChildItem

Get-ChildItem-এর মতো cmdlets-এ আপনি আরেকটি জিনিস লক্ষ্য করবেন যে এটি সম্পূর্ণ পঠনযোগ্য। দেখুন কীভাবে প্রথম শব্দটি একটিVerb? Cmdlets সব অ্যাকশন ওয়ার্ড দিয়ে শুরু হয়, তাই আপনি অবিলম্বে জানতে পারেন এটি কী করছে। ChildItem দুটি noun।

Cmdlet-এর দ্বিতীয় অংশ সবসময় আমাদের বলবে PowerShell অ্যাকশনটি কিসে প্রয়োগ করবে। ChildItem মানে একটি প্যারেন্ট লোকেশনের সকল চাইল্ড। এটি এমন বলার মত "একটি ফোল্ডারের সকল ফাইল পান", ফাইলগুলো চাইল্ড এবং ফোল্ডারটি প্যারেন্ট।

Cmdletটি কিসের চাইল্ড আইটেম পাচ্ছে? ভেরিয়েবল $TempFileLocation-এ সকল কিছু। PowerShell সেটি যেই লোকেশনটি আমরা $TempFileLocation-এ আগে রেখেছিলাম সেখানে যাবে এবং সেখানে থাকা সকল চাইল্ড আইটেম পাবে। তারপর, সেগুলো ভেরিয়েবল $TempFile-এ রাখবে।

তাহলে -Recurse অংশটি কী? সেটি Get-ChildItem-কে বলে সেটি সেখানে সব কিছুর মধ্য দিয়ে যাবে। শুধু প্যারেন্ট ফোল্ডারের ভিতরে যেই ফাইলগুলো আছে সেগুলো পাওয়া يكفي নয়। যদি সেই ফোল্ডারের ভিতরে ফোল্ডার থাকে, তাদের চাইল্ডও পান, এবং তাদের চাইল্ডও, এবং тако 나아가। আমরা সব পাব।

$TempFileCount = ($TempFile).count

হ্যাঁ, আমরা একটি তৃতীয় ভেরিয়েবল তৈরি করছি যার নাম $TempFileCount, এবং আমরা সেটিতে একটি নম্বর রাখব। নম্বরটি কোথায়? যেন, ($TempFile).count আমাদের সেটি দেবে। আপনি সম্ভবত বুঝতে পেরেছেন যে .count অংশটি শুধু আমরা $TempFile-এ সংরক্ষণ করা সকল ফাইল কাউন্ট করবে।

আমরা এটি কেন করলাম? মূলত কারণ এটি জানা ভালো লাগে আমরা বাকি স্ক্রিপ্টের সাথে কতটুকু বেকার ফাইল ক্লিন আউট করছি যাতে আমরা বুঝতে পারি কতটুকু ইফেক্টিভ ছিল।

if($TempFileCount -eq 0)

এখন আমরা একটি কন্ডিশনাল স্টেটমেন্ট সেট আপ করছি। আপনি দেখতে পাচ্ছেন এটি 'if' জিজ্ঞাসা করছে। কী{if}? ব্র্যাকেটের ভিতরের জিনিসটি true বা false কিনা। ব্র্যাকেটগুলো গুরুত্বপূর্ণ, অন্যথায় If জানবে না কী তুলনা করবে। এখানে, এটি জিজ্ঞাসা করছে ভেরিয়েবল $TempFileCount-এ সংরক্ষণ করা নম্বরটি শূন্যের সমান কিনা।

-eq ইকুয়ালসের শর্টহ্যান্ড। এটি একটি কম্পারিজন অপারেটর। এটি আপনার বাচ্চাদের বলার মত, "যদি তোমার রুম ক্লিন হয়, দারুন, আমরা কিছু করব..." এই স্টেটমেন্টটি বলে যদি $TempFileCount-এ সংরক্ষিত নম্বরটি -equal শূন্যের সাথে, তবে পরের জিনিসটি কর।

{Write-Host "There are no files in the folder $TempFileLocation" -ForegroundColor Green}

এটিই সেটি যা ঘটবে যদি $TempFileCount শূন্য হয়। কার্লি ব্র্যাকেটগুলো গুরুত্বপূর্ণ। সেগুলো PowerShell-কে বলে শুধু সেটি করো যা সেগুলোর ভিতরে আছে যদি $TempFileCount শূন্যের সমান হয়।

এটি হোস্টে, অথবা স্ক্রিনে লিখবে, "There are no files in the folder C:\Users\username\Appdata\Local\Temp\*"। শেষে প্যারামিটার, -ForegroundColor PowerShell-কে বলে টেক্সটটিকে সবুজ করুন। এটি শুধু এরর মেসেজ থেকে আলাদা করতে সহজ করে দেয় যা সাধারণত লাল।

Else

আপনি জানেন Else মানে কী। এটি হলো, "তোমার রুম ভালো হয়ে থাকুক নাহলে..." পার্ট অফ চেকিং ইফ ইউর কিড ক্লিনড দെയর রুম। এটি সেটি যা ঘটবে যদি $TempFileCount শূন্য না হয়।

{$TempFile | Remove-Item -WhatIf -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue}

এটি বলে $TempFile-এ সংরক্ষিত বর্তমান লোকেশনে যাও। তারপর উল্লম্ব রেখাটি পাইপ বলা হয়। এটি একটু বাস্তব জীবনের পাইপের মত কাজ করে কারণ এটি PowerShell-কে বলে $TempFile-এর কন্টেন্টগুলো cmdlet-এ ফানেল করো, যেন পানি একটি ওয়াশিং মেশিনে পাইপ করা হচ্ছে। তারপর cmdlet Remove-Item সেটি করে যা সেটি বলে; সেটি সেই লোকেশনে যা আছে সরিয়ে দেয়।

-WhatIf প্যারামিটার এই ধাপে খুব গুরুত্বপূর্ণ। এটি PowerShell-কে বলে কমান্ডটি রান কর, কিন্তু শুধু ট্রাই করো, কিছুই রিমুভ করো না। শুধু আমাদের দেখাও কী হত যদি আমরা সত্যি এটি করতাম।

এটি আপনাকে আপনার কম্পিউটারে কিছুই পরিবর্তন না করেই কমান্ড টেস্ট করতে দেয়। -WhatIf-কে তখনই রেখে দিন যতক্ষণ না আপনি কমফরটেবল হন যে স্ক্রিপ্টটি সেটি করবে যা আপনি চান এবং আর কিছুই নয়। তারপর শুধু সেটি ডিলিট করুন এবং স্ক্রিপ্টটি তার কাজ করবে।

প্যারামিটার -Confirm:$false স্ক্রিপ্টটিকে আপনি কি সত্যি ফাইলটি ডিলিট করতে চান সেটি জিজ্ঞাসা করার থেকে রোকেছে। আপনি জানেন -Recurse কী করে। -Force মানে সেটি ডিলিট করো যাই হোক। -WarningAction সেট করা আছে SilentlyContinue-এ।

এটি স্ক্রিপ্টটিকে আপনি কী ডিলিট করছেন সেটি সম্পর্কে ওয়ার্নিং দেওয়া থেকে রোকেছে। -ErrorAction সেট করা আছে SilentlyContinue তাতে প্রসেসে যেকোনো ধরনের এরর থাকলে, সেটি শুধু চলতে থাকে।

এখন আমরা শেষ লাইনে আছি।

Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green}

ঠিক প্রথমবার Write-Host করলো যেভাবে, এটি নিচের সেন্টেন্স আউটপুট করবে, যাতে আমরা জানি কী হয়েছে। এটি আমাদের বলবে কতটুকু ফাইল ডিলিট হয়েছে সেই ফোল্ডার থেকে যা এখনো প্রসেস করেছে এবং সেটি সবুজে করবে যাতে সহজে দেখতে পাওয়া যায়।

চলুন স্ক্রিপ্টটি একসাথে দেখি:

$TempFileLocation = "C:\Users\guymcd\Appdata\Local\Temp\*"
$TempFile = Get-ChildItem $TempFileLocation -Recurse
$TempFileCount = ($TempFile).count

if($TempFileCount -eq "0") {
Write-Host "There are no files in the folder $TempFileLocation" - ForegroundColor Green
}
Else {
$TempFile | Remove-Item -Confirm:$false -Recurse -Force -WarningAction SilentlyContinue -ErrorAction SilentlyContinue
Write-Host "Cleared $TempFileCount files in the folder $TempFileLocation" -ForegroundColor Green
}

আপনি এটি আপনার PowerShell ISE-এ কপি এবং পেস্ট করতে পারেন এবং delete-TemporaryFiles.ps1 এমন কিছু হিসেবে সেভ করতে পারেন। আপনি cmdlets-এর নামকরণ কনভেনশনের সাথে থাকতে পারেন এখন যেহেতু আপনি সেগুলো বুঝতে পেরেছেন।

যদি কোনো কারণে কোডটি আপনার জন্য কাজ না করে, আপনি আমাদের তৈরি করা PowerShell স্ক্রিপ্টও ডাউনলোড করতে পারেন এবং শুধু রান করতে পারেন। শুধু প্রথমে আনজিপ করুন স্ক্রিপ্ট ফাইল দেখতে।

যতক্ষণ আপনি এই স্ক্রিপ্টটি চালাতে চান, শুধু এটিতে রাইট-ক্লিক করুন এবং Run with PowerShell বেছে নিন। একটি PowerShell কনসোল এক বা দুই সেকেন্ডের জন্য পপ আপ হবে, আপনার স্ক্রিপ্ট अपना কাজ করবে, এবং তারপর যদি কোনো এরর না থাকে তবে গায়েব হয়ে যাবে।

আরো PowerShell শিখতে কোথায় যাব?

এটা অনেক লাগছে! আপনার প্রথম PowerShell স্ক্রিপ্টের জন্য এটি একটি ফেয়ার বিট। আপনি এতটুকু এসে থাকলে, নিজেকে প্রশংসা করুন। আপনি আজ অনেক কিছু শিখেছেন, কিন্তু এখন আপনি আরও শিখতে চান। এটি দুর্দান্ত!

PowerShell সম্পর্কে আরও শিখতে ইন্টারনেটে অনেক রিসোর্স আছে। শুরু করার জন্য একটি ভালো জায়গা হলো আমাদের আর্টিকেল, "Generate a List of Startup Programs via Command Line or PowerShell"। তারপর এই অন্যান্য রিসোর্সগুলো চেক করুন:

  • Getting Started with Microsoft PowerShell – Microsoft Virtual Academy
  • PowerShell Tutorial – TutorialsPoint.com
  1. লিনাক্সে ন্যানো (Nano) টেক্সট এডিটর ব্যবহারের বिगিনার গাইড

  2. হোম থিয়েটার সিস্টেম বাইং গাইড: কী দিয়ে খুঁজবেন

  3. চমৎকার ছবি তোলার জন্য টপ ৫ অ্যান্ড্রয়েড ফটোগ্রাফি অ্যাপ

  4. পরিপূর্ণ ডিস্ক ক্লিনআপ গাইড: Windows ও Mac-এ জায়গা মুক্ত করুন