কীভাবে ডিস্ক ক্ষমতা এবং দূরবর্তী কম্পিউটারের বিনামূল্যে স্থান পাবেন


116

আমার এই ওয়ান-লাইনার রয়েছে:

get-WmiObject win32_logicaldisk -Computername remotecomputer

এবং আউটপুট এটি:

DeviceID     : A:
DriveType    : 2
ProviderName :
FreeSpace    :
Size         :
VolumeName   :

DeviceID     : C:
DriveType    : 3
ProviderName :
FreeSpace    : 20116508672
Size         : 42842714112
VolumeName   :

DeviceID     : D:
DriveType    : 5
ProviderName :
FreeSpace    :
Size         :
VolumeName   :

আমি কিভাবে পেতে পারি Freespaceএবং Sizeএর DeviceID C:? অন্য কোনও তথ্য ছাড়াই আমাকে এই দুটি মান বের করতে হবে। আমি Selectসেমিডলেট দিয়ে চেষ্টা করেছি , তবে কোনও প্রভাব নেই।

সম্পাদনা: আমার কেবল সংখ্যাগত মানগুলি বের করতে হবে এবং সেগুলি ভেরিয়েবলগুলিতে সঞ্চয় করতে হবে।

উত্তর:


137
$disk = Get-WmiObject Win32_LogicalDisk -ComputerName remotecomputer -Filter "DeviceID='C:'" |
Select-Object Size,FreeSpace

$disk.Size
$disk.FreeSpace

কেবলমাত্র মানগুলি বের করতে এবং এগুলি একটি ভেরিয়েবলের জন্য নির্ধারণ করতে:

$disk = Get-WmiObject Win32_LogicalDisk -ComputerName remotecomputer -Filter "DeviceID='C:'" |
Foreach-Object {$_.Size,$_.FreeSpace}

18
কেবলমাত্র $ ডিস্ক.সাইজ / 1 জিবি যুক্ত করলে ফলাফল আরও পাঠযোগ্য হয়।
রিকি 89

8
আপনি যদি কেবল পুরো সংখ্যাটি দেখানোর জন্য প্রদর্শনটি গোল করতে চান তবে ব্যবহার করুন[Math]::Round($Disk.Freespace / 1GB)
ব্যবহারকারীর 4317867

পাওয়ারশেল কেন 1mbএকটি মান প্রদান করে 1048576এবং কেন না 1000000????
ওল্ডবয়

@ ওল্ডবয় কারণ এটি 2: 2 ^ 20 বনাম 10 ^ 6 এর শক্তি ব্যবহার করে। এটি অবশ্যই লিখতে হবে 1MiB(যথাযথ ক্ষেত্রে) তবে সাধারণত "কে" না করে ছোট ক্ষেত্রে প্রদর্শিত হয়। মেবিবাইট দেখুন ।
ম্যাথিউউ

128

অনেক সহজ সমাধান:

Get-PSDrive C | Select-Object Used,Free

এবং দূরবর্তী কম্পিউটারের জন্য (প্রয়োজন Powershell Remoting)

Invoke-Command -ComputerName SRV2 {Get-PSDrive C} | Select-Object PSComputerName,Used,Free

PSTools ইনস্টল করুন এবং করুনpsexec -u administrator \\[computer name or IP] powershell "get-psdrive C"
Ch.Idea

@ জ্যাকোবেভানস জবাবদিহি?
কিকিনেট

আপনার যদি প্রমাণীকরণের প্রয়োজন হয় তবে এর জন্য দূরবর্তী মেশিনে "কার্বেরোস প্রমাণীকরণ প্রক্রিয়া" সক্ষম করা দরকার।
এডি কুমার 16

45

কেবল একটি কমান্ড সহজ মিষ্টি এবং পরিষ্কার তবে এটি কেবল স্থানীয় ডিস্কের জন্যই কাজ করে

Get-PSDrive

এখানে চিত্র বর্ণনা লিখুন

আপনি এখনও এই কমান্ডটি একটি রিমোট সার্ভারে একটি এন্টার-পিএসএসশন -কম্পিউটারনেম সার্ভারনাম ব্যবহার করে ব্যবহার করতে পারেন এবং তারপরে গেট-পিএসডিআরাইভ চালান এটি ডেটা টানবে যেমন আপনি সার্ভার থেকে চালিয়েছেন।


19

কিছুক্ষণ আগে আমি একটি পাওয়ারশেল অ্যাডভান্সড ফাংশন (স্ক্রিপ্ট সেমিডলেট) তৈরি করেছি যা আপনাকে একাধিক কম্পিউটারে জিজ্ঞাসা করতে দেয়।

ফাংশনের কোডটি 100 লাইনের বেশি লম্বা, সুতরাং আপনি এটি এখানে খুঁজে পেতে পারেন: df কমান্ডের পাওয়ারশেল সংস্করণ

উদাহরণস্বরূপ ব্যবহার বিভাগটি দেখুন। নিম্নলিখিত ব্যবহারের উদাহরণটি দূরবর্তী কম্পিউটারগুলির একটি সেট (পাওয়ারশেল পাইপলাইন থেকে ইনপুট) জিজ্ঞাসা করে এবং মানব-পঠনযোগ্য আকারে সংখ্যাসূচক মানগুলির সাথে একটি টেবিল বিন্যাসে আউটপুট প্রদর্শন করে:

PS> $cred = Get-Credential -Credential 'example\administrator'
PS> 'db01','dc01','sp01' | Get-DiskFree -Credential $cred -Format | Format-Table -GroupBy Name -AutoSize

   Name: DB01

Name Vol Size  Used  Avail Use% FS   Type
---- --- ----  ----  ----- ---- --   ----
DB01 C:  39.9G 15.6G 24.3G   39 NTFS Local Fixed Disk
DB01 D:  4.1G  4.1G  0B     100 CDFS CD-ROM Disc


   Name: DC01

Name Vol Size  Used  Avail Use% FS   Type
---- --- ----  ----  ----- ---- --   ----
DC01 C:  39.9G 16.9G 23G     42 NTFS Local Fixed Disk
DC01 D:  3.3G  3.3G  0B     100 CDFS CD-ROM Disc
DC01 Z:  59.7G 16.3G 43.4G   27 NTFS Network Connection


   Name: SP01

Name Vol Size   Used   Avail Use% FS   Type
---- --- ----   ----   ----- ---- --   ----
SP01 C:  39.9G  20G    19.9G   50 NTFS Local Fixed Disk
SP01 D:  722.8M 722.8M 0B     100 UDF  CD-ROM Disc

আমি এই ফাংশনটি ব্যবহার করতে চাই তবে ব্লগস্পট ডোমেনটি আমার জন্য অবরুদ্ধ। আপনি এখানে ফাংশন অন্তর্ভুক্ত করতে পারেন?
কেভিন পানকো

1
ওয়েব সংরক্ষণাগারে একই লিঙ্ক: web.archive.org/web/20150614115736/http://…
টমাস

পাওয়ার-শেল ২.০
জেফ ডাউডি

11

অন্যান্য পরামর্শগুলির সাথে আমি দুটি সমস্যার মুখোমুখি হয়েছি

    1) আপনি যদি টাস্ক শিডিয়ুলারের অধীনে পাওয়ারশেলটি চালান তবে ড্রাইভ ম্যাপিংগুলি সমর্থিত নয়
    2) আপনি অ্যাক্সেস পেতে পারেন রিমোট কম্পিউটারগুলিতে "get-WmiObject" ব্যবহার করার চেষ্টা করে ত্রুটিগুলি অস্বীকার করা যেতে পারে (অবশ্যই আপনার অবকাঠামো সেটআপের উপর নির্ভর করে)

বিকল্পগুলি যা এই সমস্যাগুলির সাথে ভোগ করে না তা হ'ল ইউএনসি পাথ সহ গেটডিস্কফ্রিস্পেসেক্স ব্যবহার করা :

function getDiskSpaceInfoUNC($p_UNCpath, $p_unit = 1tb, $p_format = '{0:N1}')
{
    # unit, one of --> 1kb, 1mb, 1gb, 1tb, 1pb
    $l_typeDefinition = @' 
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
        [return: MarshalAs(UnmanagedType.Bool)] 
        public static extern bool GetDiskFreeSpaceEx(string lpDirectoryName, 
            out ulong lpFreeBytesAvailable, 
            out ulong lpTotalNumberOfBytes, 
            out ulong lpTotalNumberOfFreeBytes); 
'@
    $l_type = Add-Type -MemberDefinition $l_typeDefinition -Name Win32Utils -Namespace GetDiskFreeSpaceEx -PassThru

    $freeBytesAvailable     = New-Object System.UInt64 # differs from totalNumberOfFreeBytes when per-user disk quotas are in place
    $totalNumberOfBytes     = New-Object System.UInt64
    $totalNumberOfFreeBytes = New-Object System.UInt64

    $l_result = $l_type::GetDiskFreeSpaceEx($p_UNCpath,([ref]$freeBytesAvailable),([ref]$totalNumberOfBytes),([ref]$totalNumberOfFreeBytes)) 

    $totalBytes     = if($l_result) { $totalNumberOfBytes    /$p_unit } else { '' }
    $totalFreeBytes = if($l_result) { $totalNumberOfFreeBytes/$p_unit } else { '' }

    New-Object PSObject -Property @{
        Success   = $l_result
        Path      = $p_UNCpath
        Total     = $p_format -f $totalBytes
        Free      = $p_format -f $totalFreeBytes
    } 
}

ধন্যবাদ, দুর্দান্ত সমাধান তবে সকল ব্যবহারকারীর জন্য ইউএনসিপথ পাওয়ার জন্য আমাদের একইরকম ফাংশন রয়েছে
149621

যখন টাস্কশেডুলার ব্যবহার না করে ম্যাপযুক্ত ড্রাইভের পাওয়ারশেল পদ্ধতিটি কি না?
বিল গ্রেয়ার

10

অন্য উপায়টি ডাব্লুএমআই সামগ্রীতে স্ট্রিং ingালাই করছে:

$size = ([wmi]"\\remotecomputer\root\cimv2:Win32_logicalDisk.DeviceID='c:'").Size
$free = ([wmi]"\\remotecomputer\root\cimv2:Win32_logicalDisk.DeviceID='c:'").FreeSpace

এছাড়াও আপনি বিভিন্ন ইউনিট চাইলে ফলাফলগুলি 1 জিবি বা 1 এমবি দ্বারা ভাগ করতে পারেন:

$disk = ([wmi]"\\remotecomputer\root\cimv2:Win32_logicalDisk.DeviceID='c:'")
"Remotecomputer C: has {0:#.0} GB free of {1:#.0} GB Total" -f ($disk.FreeSpace/1GB),($disk.Size/1GB) | write-output

আউটপুট হল: Remotecomputer C: has 252.7 GB free of 298.0 GB Total



@ বিলগ্রিয়ার অফহ্যান্ড জানেন না তবে আমি প্রায়শই ডাব্লুএমআই কলগুলি পিএসের চেয়ে ধীর করে দেখি। আপনি নিজে মেজার-কমান্ড দিয়ে পরীক্ষা করতে পারেন তবে এটি বেশ কয়েকবার চালানো এবং ফলাফলগুলি গড় নিশ্চিত করে নিন।
duct_tape_coder

7

কমান্ড লাইন:

powershell gwmi Win32_LogicalDisk -ComputerName remotecomputer -Filter "DriveType=3" ^|
select Name, FileSystem,FreeSpace,BlockSize,Size ^| % {$_.BlockSize=
(($_.FreeSpace)/($_.Size))*100;$_.FreeSpace=($_.FreeSpace/1GB);$_.Size=($_.Size/1GB);$_}
^| Format-Table Name, @{n='FS';e={$_.FileSystem}},@{n='Free, Gb';e={'{0:N2}'-f
$_.FreeSpace}}, @{n='Free,%';e={'{0:N2}'-f $_.BlockSize}},@{n='Capacity ,Gb';e={'{0:N3}'
-f $_.Size}} -AutoSize

আউটপুট:

Name FS   Free, Gb Free,% Capacity ,Gb

---- --   -------- ------ ------------

C:   NTFS 16,64    3,57   465,752

D:   NTFS 43,63    9,37   465,759

I:   NTFS 437,59   94,02  465,418

N:   NTFS 5,59     0,40   1 397,263

O:   NTFS 8,55     0,96   886,453

P:   NTFS 5,72     0,59   976,562

কম্যান্ড-লাইন:

wmic logicaldisk where DriveType="3" get caption, VolumeName, VolumeSerialNumber, Size, FileSystem, FreeSpace

আউট:

Caption  FileSystem  FreeSpace     Size           VolumeName  VolumeSerialNumber

C:       NTFS        17864343552   500096991232   S01         EC641C36

D:       NTFS        46842589184   500104687616   VM1         CAF2C258

I:       NTFS        469853536256  499738734592   V8          6267CDCC

N:       NTFS        5998840832    1500299264512  Vm-1500     003169D1

O:       NTFS        9182349312    951821143552   DT01        A8FC194C

P:       NTFS        6147043840    1048575144448  DT02        B80A0F40

কম্যান্ড-লাইন:

wmic logicaldisk where Caption="C:" get caption, VolumeName, VolumeSerialNumber, Size, FileSystem, FreeSpace

আউট:

Caption  FileSystem  FreeSpace    Size          VolumeName  VolumeSerialNumber

C:       NTFS        17864327168  500096991232  S01         EC641C36

command-line:

dir C:\ /A:DS | find "free"

out:
               4 Dir(s)  17 864 318 976 bytes free

dir C:\ /A:DS /-C | find "free"

out:
               4 Dir(s)     17864318976 bytes free

2
এটি হাস্যকর।
আলেকজান্ডার ট্রাউজি

@ আলেকজান্ডার ট্রাজি কেন?
কিকিনেট

1
wmic logicaldisk get sizeসংরক্ষিত স্থানের জন্য অ্যাকাউন্ট না ... পাওয়ারশেল get-volumeব্যবহারিক মোট আকার (অর্থাত বিয়োগ সংরক্ষিত স্থান) প্রদান করে, তবে তারপরে যখন আমি চেষ্টা get-volume | format-list sizeকরি তখন মোট আকারের চেয়ে বেশি সংরক্ষিত স্থান বলে ... আমি কীভাবে মোট আকারের বিয়োগফলকে সংরক্ষিত স্থান পাব? পাওয়ারশেল সহ প্রতিটি ড্রাইভের জন্য ???
ওল্ডবয়

6
Get-PSDrive C | Select-Object @{ E={$_.Used/1GB}; L='Used' }, @{ E={$_.Free/1GB}; L='Free' }

3
PS> Get-CimInstance -ComputerName bobPC win32_logicaldisk | where caption -eq "C:" | foreach-object {write " $($_.caption) $('{0:N2}' -f ($_.Size/1gb)) GB total, $('{0:N2}' -f ($_.FreeSpace/1gb)) GB free "}  
C: 117.99 GB total, 16.72 GB free 

PS> 

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

2

আমি পিএক্সেক্সেক সরঞ্জামগুলি জানি যা আপনি এখান থেকে ডাউনলোড করতে পারেন

সরঞ্জাম প্যাকেজ থেকে একটি psinfo.exe আসে। মৌলিক ব্যবহার নিম্নলিখিত পদ্ধতিতে পাওয়ারশেল / সেন্টিমিটারে হয়।

এখানে চিত্র বর্ণনা লিখুন

তবে আপনার এটির সাথে প্রচুর বিকল্প থাকতে পারে

ব্যবহার: psinfo [[\ কম্পিউটার [, কম্পিউটার [, ..]] | @ ফাইল [-u ব্যবহারকারী [-p পিএসএসডাব্লু]]] [-হ] [-এস] [-ডি] [-সি [-টি বিস্ময়কর]] [ফিল্টার]

\ কম্পিউটার দূরবর্তী কম্পিউটার বা নির্দিষ্ট কম্পিউটারগুলিতে কমান্ডটি সম্পাদন করে। আপনি যদি কম্পিউটারের নামটি বাদ দেন তবে কমান্ডটি স্থানীয় সিস্টেমে চলে এবং আপনি যদি একটি ওয়াইল্ডকার্ড (if *) নির্দিষ্ট করেন তবে বর্তমান ডোমেনের সমস্ত কম্পিউটারে কমান্ডটি চলবে।

@file   Run the command on each computer listed in the text file specified.
-u  Specifies optional user name for login to remote computer.
-p  Specifies optional password for user name. If you omit this you will be prompted to enter a hidden password.
-h  Show list of installed hotfixes.
-s  Show list of installed applications.
-d  Show disk volume information.
-c  Print in CSV format.
-t  The default delimiter for the -c option is a comma, but can be overriden with the specified character.

ফিল্টার PSinfo ফিল্টার মেলে ক্ষেত্রের জন্য ডেটা প্রদর্শিত হবে। উদাহরণস্বরূপ "psinfo পরিষেবা" কেবল পরিষেবা প্যাক ক্ষেত্রের তালিকা করে।


0

আমি এন্টার-পিএসসিশন পিসি নামটি কম্পিউটারে রিমোট করি তারপরে আমি get-PSDrive টাইপ করি rive

এটি সমস্ত ড্রাইভ এবং ব্যবহৃত এবং অবশিষ্ট স্থানের তালিকা প্রদর্শন করবে। আপনার যদি সমস্ত তথ্য ফর্ম্যাটেড দেখতে হয় তবে এটিকে এফএলে পাইপ করুন : গেট-পিএসড্রাইভ | এফএল *


0

আমাকে সাহায্য করার জন্য আমি এই সাধারণ ফাংশনটি তৈরি করেছি। এটি আমার কলগুলি পড়া খুব সহজ করে তোলে যে একটি গেট-ডাব্লুআইবজেক্ট , যেখানে-অবজেক্ট স্টেটমেন্ট ইত্যাদির ইনলাইন রয়েছে having

function GetDiskSizeInfo($drive) {
    $diskReport = Get-WmiObject Win32_logicaldisk
    $drive = $diskReport | Where-Object { $_.DeviceID -eq $drive}

    $result = @{
        Size = $drive.Size
        FreeSpace = $drive.Freespace
    }
    return $result
}

$diskspace = GetDiskSizeInfo "C:"
write-host $diskspace.FreeSpace " " $diskspace.Size

1
ওপি ছিলেন "রিমোট কম্পিউটার"। এটি আমার জন্য চালিত ড্রাইভে কাজ করেনি, তবে সম্ভবত এটি আমার শেষ ছিল ...
ইউমি কইজুমি

0

আপনি যদি স্থানীয় এবং নেটওয়ার্ক ড্রাইভের মধ্যে একাধিক ড্রাইভ চিঠি এবং / অথবা ফিল্টার পরীক্ষা করতে চান তবে আপনি Win32_LogicalDisk ডাব্লুএমআই ক্লাসের সুবিধা নিতে পাওয়ারশেল ব্যবহার করতে পারেন । এখানে একটি দ্রুত উদাহরণ:

$localVolumes = Get-WMIObject win32_volume;

foreach ($vol in $localVolumes) {
  if ($vol.DriveLetter -ne $null ) {
    $d = $vol.DriveLetter[0];
    if ($vol.DriveType -eq 3) {
      Write-Host ("Drive " + $d + " is a Local Drive");
    }
    elseif ($vol.DriveType -eq 4) {
      Write-Host ("Drive" + $d + " is a Network Drive");
    }
    else {
      // ... and so on
    }

    $drive = Get-PSDrive $d;
    Write-Host ("Used space on drive " + $d + ": " + $drive.Used + " bytes. `r`n");
    Write-Host ("Free space on drive " + $d + ": " + $drive.Free + " bytes. `r`n");
  }
}

আমি পাওয়ারশেল স্ক্রিপ্ট তৈরি করতে উপরের কৌশলটি ব্যবহার করেছি যা সমস্ত ড্রাইভ চেক করে এবং যখনই তারা কোনও ব্যবহারকারী-সংজ্ঞায়িত কোটার নীচে যায় একটি ইমেল সতর্কতা প্রেরণ করে। আপনি আমার ব্লগে এই পোস্টটি থেকে পেতে পারেন ।



0

সবেমাত্র গেট-ভলিউম কমান্ডটি পাওয়া গেছে , যা প্রত্যাবর্তন করে SizeRemaining, তাই (Get-Volume -DriveLetter C).SizeRemaining / (1e+9)ডিস্ক সি এর জন্য রইল জিবি দেখতে কিছু ব্যবহার করা যেতে পারে বলে মনে হয় এর চেয়ে দ্রুত কাজ করে Get-WmiObject Win32_LogicalDisk

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.