Sprawdzanie pojemności dysku w oknach zdalnych serwerów

18

Pracuję w systemie Windows i chcę dowiedzieć się poprzez pojemność dysku wiersza poleceń zdalnych serwerów Windows.

Na przykład: Jestem @localhost, teraz chcę wiedzieć, czy D: dysk serwera 172.68.68.68 jest większy niż 10 GB. Jak mogę to sprawdzić?

Na wszystkich serwerach działa system operacyjny Windows

rocko
źródło

Odpowiedzi:

18

Korzystając z PowerShell, możesz użyć następującego polecenia:

Get-WmiObject -Class win32_logicalDisk -ComputerName server1, server2, server3, etc | Select-Object pscomputername, deviceid, freespace, size

Zastąp server1, server2 itp. Zdalnymi nazwami serwerów lub adresami IP.

Dane wyjściowe wyglądają następująco:

wprowadź opis zdjęcia tutaj

Jeśli chcesz, możesz dodać | Export-Csv -Path .\drives.csvna końcu skryptu, aby wyprowadzić plik do pliku wartości rozdzielanej przecinkami (CSV) do użycia z programem Excel. Jeśli tak, po otwarciu programu Excel należy sformatować kolumny rozmiaru dysku w programie Excel jako liczby.

Tylko na chichoty napisałem ten skrypt PowerShell, który wykona zadanie na wszystkich serwerach w Active Directory:

$ErrorActionPreference= 'silentlycontinue'

Get-ADComputer -Filter 'OperatingSystem -like "*Server*"' -Properties * | Select-Object Name |

ForEach-Object {
    If (Test-Connection $_.Name -Count 1){
        Get-WmiObject -Class win32_logicalDisk -ComputerName $_.Name | 
        Select-Object pscomputername, deviceid, freespace, size
    }
    else {
        Write-host $_.Name " Connection Error"
    }

}
Keltari
źródło
9

Użyj polecenia fsutil:

fsutil volume diskfree C:
fsutil volume diskfree \\server\share

Dane wyjściowe będą wyglądać następująco:

Total # of free bytes        : 851127304192
Total # of bytes             : 2147480485888
Total # of avail free bytes  : 851127304192

Aby uzyskać tylko linię z wolnymi bajtami, możesz użyć:

fsutil volume diskfree C: | find /i "avail free"
Joachim Marder
źródło
Do Twojej wiadomości będzie to wymagało poświadczeń administracyjnych.
Bink
3

Jeśli jesteś w domenie, prawdopodobnie mógłbyś coś zrobić z WMI ( przykład WMI ). Jeśli nie jesteś w domenie, możesz przejść na dwa sposoby zdalnego monitorowania:

mtak
źródło
1

Jeśli masz dostęp do udziału sieciowego i masz zainstalowany Cygwin, możesz wykonać następujące polecenie:

# df -h //myserver/shareddrive Filesystem Size Used Avail Use% Mounted on - 25G 13G 12G 52% //myserver/shareddrive

LatinSuD
źródło
0

chłopaki, przyszedłem również z rozwiązaniem wykorzystującym pomysł fsutil i telnet:

<package>

  <job id="vbs">

  <script language="VBScript">

     set WshShell = WScript.CreateObject("WScript.Shell")
     WshShell.Run "telnet 182.56.32.23 -l work"
     WScript.Sleep 500
     WshShell.AppActivate "Telnet"
     WScript.Sleep 500
     WshShell.SendKeys "y"
     WshShell.SendKeys "~"      
     WScript.Sleep 500
     WshShell.SendKeys "helloworld"
     WScript.Sleep 500
     WshShell.SendKeys "~"  
     WScript.Sleep 500
     WshShell.SendKeys "C:\Users\work2\Desktop\diskcheck.bat"   
     WScript.Sleep 200
     WshShell.SendKeys "~"

  </script>

 </job>

</package>

diskcheck.bat:

wolumin fsutil bezdyskowy C:
Wynik:
Łączna liczba wolnych bajtów: 17084395520
Całkowita liczba bajtów: 249145847808
Całkowita liczba dostępnych wolnych bajtów: 17084395520
rocko
źródło
jakieś ulepszenia?
rocko
Nigdy nie widziałem, aby ktokolwiek instalował serwer Telnet w systemie Windows, nawet wbudowany. Zwłaszcza, że ​​telnet od dawna uważany jest za niebezpieczny.
Keltari
0
Function GetRemoteDiskSpace (
[String]$TargetComputer,
[String]$Drive
)
{
$Drive = New-PSDrive -Name K -PSProvider FileSystem -Root "\\$TargetComputer\$Drive$" -Persist
$Info = Get-PSDrive $Drive 
$Free = $Info.Free /1GB
Remove-PSDrive -Name $drive -PSProvider FileSystem

return $Free
}
Ryan
źródło
1
Witamy w Super User! Twój wkład jest mile widziany, ale czy możesz wyjaśnić powyższą funkcję? :)
bertieb