अधिकांश Windows उपयोगकर्ता जानते हैं कि फोल्डर का आकार जांचने का सबसे आसान तरीका फाइल एक्सप्लोरर में फोल्डर प्रॉपर्टीज खोलना है। अधिक अनुभवी उपयोगकर्ता TreeSize या WinDirStat जैसे थर्ड-पार्टी टूल्स पसंद करते हैं। हालांकि, यदि आप विशिष्ट डायरेक्टरी में फोल्डर्स के आकार पर अधिक विस्तृत आंकड़े प्राप्त करना चाहते हैं या कुछ फाइल प्रकारों को बाहर करना चाहते हैं, तो PowerShell सुविधाओं का उपयोग करना बेहतर है। इस लेख में, हम आपको दिखाएंगे कि PowerShell का उपयोग करके डिस्क पर विशिष्ट फोल्डर (और सभी सबफोल्डर्स) का आकार कैसे जल्दी से प्राप्त करें।
आप फाइलों और फोल्डर्स (सबफोल्डर्स सहित) के आकार प्राप्त करने के लिए PowerShell में Get-ChildItem (gci एलियास) और Measure-Object (measure एलियास) cmdlets का उपयोग कर सकते हैं। पहला cmdlet आपको निर्दिष्ट मानदंडों के अनुसार निर्दिष्ट डायरेक्टरी में फाइलों की सूची (आकार के साथ) प्राप्त करने की अनुमति देता है, और दूसरा अंकगणितीय संक्रियाएं करता है।
सुझाव। पिछले लेखों में से एक में, हमने दिखाया था कि PowerShell में Get-ChildItem cmdlet का उपयोग करके डिस्क पर सबसे बड़ी फाइलें कैसे ढूंढें।
उदाहरण के लिए, C:\ISO फोल्डर का आकार प्राप्त करने के लिए, निम्न कमांड चलाएं:
Get-ChildItem C:\ISO | Measure-Object -Property Length -sum

जैसा कि आप देख सकते हैं, इस डायरेक्टरी में फाइलों का कुल आकार Sum फील्ड में दिखाया गया है और लगभग 2.1 GB है (आकार बाइट्स में दिया गया है)।
आकार को अधिक सुविधाजनक MB या 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)
हिडन और सिस्टम फाइलों के आकार को ध्यान में रखने के लिए, मैंने –force आर्गुमेंट का भी उपयोग किया है।
तो मेरे लोकल ड्राइव पर C:\Windows का आकार लगभग 40 GB है (स्क्रिप्ट NTFS कम्प्रेशन को नज़रअंदाज करती है)।
सुझाव. डायरेक्टरी एक्सेस त्रुटियों (PermissionDenied -> DirUnauthorizedAccessError) को रोकने के लिए, -ErrorAction SilentlyContinue पैरामीटर का उपयोग करें।

यदि डायरेक्टरी में सिम्बोलिक या हार्ड लिंक्स हैं तो यह स्क्रिप्ट डायरेक्टरी के आकार की गलत गणना करती है। उदाहरण के लिए, C:\Windows फोल्डर में WinSxS फोल्डर (Windows कंपोनेंट स्टोर) में फाइलों के कई हार्ड लिंक्स होते हैं। परिणामस्वरूप, ऐसी फाइलों को कई बार गिना जा सकता है। परिणामों में हार्ड लिंक्स को नज़रअंदाज करने के लिए, निम्न कमांड का उपयोग करें (पूरा होने में लंबा समय लगता है):
"{0:N2} GB" -f ((gci –force C:\windows –Recurse -ErrorAction SilentlyContinue | Where-Object { $_.LinkType -notmatch "HardLink" }| measure Length -s).sum / 1Gb)

जैसा कि आप देख सकते हैं, Windows फोल्डर का वास्तविक आकार थोड़ा छोटा है।
आप अंतिम आकार की गणना करते समय विचार की जाने वाली फाइलों को चुनने के लिए फिल्टर्स का उपयोग कर सकते हैं। उदाहरण के लिए, आप 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:\ ड्राइव पर डायरेक्टरीज़ के आकार के बारे में जानकारी प्राप्त करने के लिए, निम्न PowerShell स्क्रिप्ट चलाएं:
$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) या Excel फाइल में एक्सपोर्ट भी कर सकते हैं।
यदि आप अपने 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')

आप अपने लोकल PowerShell फंक्शन का उपयोग Invoke-Command (PowerShell Remoting) cmdlet के माध्यम से रिमोट कंप्यूटर्स पर फोल्डर आकार जांचने के लिए कर सकते हैं।
Invoke-Command -ComputerName hq-srv01 -ScriptBlock ${Function:Get-FolderSize} –ArgumentList 'C:\PS'

ये कमांड्स PowerShell के सभी संस्करणों में काम करते हैं, जिसमें PowerShell Core 7.x के नए संस्करण शामिल हैं।