বেশিরভাগ উইন্ডোজ ব্যবহারকারীরা জানেন যে ফোল্ডারের আকার পরীক্ষা করার সবচেয়ে সহজ উপায় হল ফাইল এক্সপ্লোরারে ফোল্ডার বৈশিষ্ট্যগুলি খোলা। আরও অভিজ্ঞ ব্যবহারকারীরা TreeSize এর মত তৃতীয় পক্ষের টুল ব্যবহার করতে পছন্দ করেন অথবা WinDirStat . যাইহোক, আপনি যদি নির্দিষ্ট ডিরেক্টরিতে ফোল্ডারের আকার সম্পর্কে আরও বিশদ পরিসংখ্যান পেতে চান বা নির্দিষ্ট ফাইলের প্রকারগুলি বাদ দিতে চান তবে আপনি পাওয়ারশেল বৈশিষ্ট্যগুলি আরও ভাল ব্যবহার করবেন। এই নিবন্ধে, আমরা আপনাকে দেখাব কিভাবে PowerShell ব্যবহার করে ডিস্কে (এবং সমস্ত সাবফোল্ডার) নির্দিষ্ট ফোল্ডারের আকার দ্রুত পেতে হয়।
আপনি Get-ChildItem ব্যবহার করতে পারেন (gci
alias) এবং পরিমাপ-বস্তু (measure
alias) PowerShell-এ ফাইল এবং ফোল্ডারের আকার (সাবফোল্ডার সহ) পেতে cmdlets। প্রথম cmdlet আপনাকে নির্দিষ্ট মানদণ্ড অনুযায়ী নির্দিষ্ট ডিরেক্টরিতে ফাইলের তালিকা (আকার সহ) পেতে দেয় এবং দ্বিতীয়টি গাণিতিক ক্রিয়াকলাপ সম্পাদন করে৷
উদাহরণস্বরূপ, C:\ISO ফোল্ডারের আকার পেতে, নিম্নলিখিত কমান্ডটি চালান:
Get-ChildItem C:\ISO | Measure-Object -Property Length -sum
আপনি দেখতে পাচ্ছেন, এই ডিরেক্টরির ফাইলের মোট আকার সমষ্টি এ দেখানো হয়েছে ক্ষেত্র এবং প্রায় 2.1 GB (আকারটি বাইটে দেওয়া হয়)।
আকারটিকে আরও সুবিধাজনক এমবি বা জিবিতে রূপান্তর করতে, এই কমান্ডটি ব্যবহার করুন:
(gci c:\iso | measure Length -s).sum / 1Gb
অথবা:
(gci c:\iso | measure Length -s).sum / 1Mb
ফলাফলটিকে দুই দশমিকে রাউন্ড করতে, নিম্নলিখিত কমান্ডটি চালান:
"{0:N2} GB" -f ((gci c:\iso | measure Length -s).sum / 1Gb)
আপনি একটি ডিরেক্টরিতে একটি নির্দিষ্ট ধরণের সমস্ত ফাইলের মোট আকার গণনা করতে PowerShell ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি ফোল্ডারে সমস্ত ISO ফাইলের মোট আকার পেতে চান:
(gci c:\iso *.iso | measure Length -s).sum / 1Mb
উপরে দেখানো কমান্ডগুলি আপনাকে নির্দিষ্ট ডিরেক্টরিতে শুধুমাত্র ফাইলের মোট আকার পেতে অনুমতি দেয়। ডিরেক্টরিতে সাবফোল্ডার থাকলে, সাবফোল্ডারগুলিতে ফাইলের আকার গণনা করা হবে না। সাবডিরেক্টরি সহ ডিরেক্টরিতে ফাইলের মোট আকার পেতে, –Recurse
ব্যবহার করুন প্যারামিটার চলুন C:\Windows-এ ফাইলের মোট আকার পাই ফোল্ডার:
"{0:N2} GB" -f ((gci –force c:\Windows –Recurse -ErrorAction SilentlyContinue| measure Length -s).sum / 1Gb)
লুকানো এবং সিস্টেম ফাইলের আকার বিবেচনা করতে, আমি –ফোর্স ব্যবহার করেছি পাশাপাশি যুক্তি।
তাই আমার স্থানীয় ড্রাইভে C:\Windows এর আকার প্রায় 40 GB (স্ক্রিপ্ট NTFS কম্প্রেশন উপেক্ষা করে)।
টিপ . ডিরেক্টরি অ্যাক্সেস ত্রুটি (PermissionDenied -> DirUnauthorizedAccessError) প্রতিরোধ করার জন্য, -ErrorAction SilentlyContinue
ব্যবহার করুন প্যারামিটার
এই স্ক্রিপ্টটি ভুলভাবে একটি ডিরেক্টরির আকার গণনা করে যদি এতে প্রতীকী বা হার্ড লিঙ্ক থাকে। উদাহরণস্বরূপ, C:\Windows
ফোল্ডারটিতে WinSxS ফোল্ডারে (উইন্ডোজ কম্পোনেন্ট স্টোর) ফাইলগুলির অনেক হার্ড লিঙ্ক রয়েছে। ফলস্বরূপ, এই ধরনের ফাইলগুলি কয়েকবার গণনা করা যেতে পারে। ফলাফলে হার্ড লিঙ্ক উপেক্ষা করতে, নিম্নলিখিত কমান্ডটি ব্যবহার করুন (সম্পূর্ণ হতে অনেক সময় লাগে):
"{0:N2} GB" -f ((gci –force C:\windows –Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)
আপনি দেখতে পাচ্ছেন, উইন্ডোজ ফোল্ডারের প্রকৃত আকার কিছুটা ছোট।
চূড়ান্ত আকার গণনা করার সময় বিবেচনা করার জন্য ফাইলগুলি নির্বাচন করতে আপনি ফিল্টার ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি 2020 সালে তৈরি করা ফাইলগুলির আকার পেতে পারেন:
(gci -force c:\ps –Recurse -ErrorAction SilentlyContinue | ? {$_.CreationTime -gt ‘1/1/20’ -AND $_.CreationTime -lt ‘12/31/20’}| measure Length -s).sum / 1Gb
আপনি নির্দিষ্ট ডিরেক্টরিতে সমস্ত প্রথম-স্তরের সাবফোল্ডারের আকার পেতে পারেন। উদাহরণস্বরূপ, আপনি C:\Users.
ফোল্ডারে সমস্ত ব্যবহারকারীর প্রোফাইলের আকার পেতে চান
gci -force 'C:\Users'-ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$_.fullname, '{0:N2} GB' -f ($len / 1Gb)
}
%
foreach-object
-এর একটি উপনাম লুপ।
এর উপর যান. ধরুন, আপনার কাজ হল সিস্টেম হার্ড ড্রাইভের রুটে প্রতিটি ডিরেক্টরির আকার খুঁজে বের করা এবং বিশ্লেষণের জন্য সুবিধাজনক টেবিল আকারে তথ্য উপস্থাপন করা এবং ফোল্ডারের আকার অনুসারে সাজানো সম্ভব।
সিস্টেম C:\ ড্রাইভে ডিরেক্টরির আকার সম্পর্কে তথ্য পেতে, নিম্নলিখিত পাওয়ারশেল স্ক্রিপ্টটি চালান:
$targetfolder='C:\'
$dataColl = @()
gci -force $targetfolder -ErrorAction SilentlyContinue | ? { $_ -is [io.directoryinfo] } | % {
$len = 0
gci -recurse -force $_.fullname -ErrorAction SilentlyContinue | % { $len += $_.length }
$foldername = $_.fullname
$foldersize= '{0:N2}' -f ($len / 1Gb)
$dataObject = New-Object PSObject
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldername” -value $foldername
Add-Member -inputObject $dataObject -memberType NoteProperty -name “foldersizeGb” -value $foldersize
$dataColl += $dataObject
}
$dataColl | Out-GridView -Title “Size of subdirectories”
আপনি দেখতে পাচ্ছেন, টেবিলের গ্রাফিক ভিউ দেখা উচিত যেখানে সিস্টেম ড্রাইভ C:\ এর রুটের সমস্ত ফোল্ডার এবং তাদের আকার দেখানো হয়েছে (টেবিলটি Out-GridView
দ্বারা তৈরি করা হয়েছে cmdlet)। কলাম হেডারে ক্লিক করে, আপনি আকার অনুসারে ফোল্ডারগুলি সাজাতে পারেন। এছাড়াও আপনি ফলাফলগুলি CSV (| Export-Csv folder_size.csv
) এ রপ্তানি করতে পারেন ) অথবা একটি এক্সেল ফাইলে।
আপনি যদি আপনার PowerShell স্ক্রিপ্টগুলিতে ডিরেক্টরি আকার চেকিং ব্যবহার করেন তবে আপনি একটি পৃথক ফাংশন তৈরি করতে পারেন:
function Get-FolderSize {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
$Path
)
if ( (Test-Path $Path) -and (Get-Item $Path).PSIsContainer ) {
$Measure = Get-ChildItem $Path -Recurse -Force -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
$Sum = '{0:N2}' -f ($Measure.Sum / 1Gb)
[PSCustomObject]@{
"Path" = $Path
"Size($Gb)" = $Sum
}
}
}
ফাংশনটি ব্যবহার করতে, কেবল একটি আর্গুমেন্ট হিসাবে ফোল্ডার পাথ সহ কমান্ডটি চালান:
Get-FolderSize ('C:\PS')
আপনি Invoke-Command
এর মাধ্যমে দূরবর্তী কম্পিউটারে ফোল্ডারের আকার পরীক্ষা করতে আপনার স্থানীয় PowerShell ফাংশন ব্যবহার করতে পারেন (পাওয়ারশেল রিমোটিং) cmdlet।
Invoke-Command -ComputerName hq-srv01 -ScriptBlock ${Function:Get-FolderSize} –ArgumentList 'C:\PS'
এই কমান্ডগুলি PowerShell Core 7.x এর নতুন সংস্করণ সহ সমস্ত PowerShell সংস্করণে কাজ করে৷