Mam ten jeden wiersz:
get-WmiObject win32_logicaldisk -Computername remotecomputer
a wynik jest taki:
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 :
W jaki sposób uzyskać Freespace
i Size
od DeviceID
C:
? Muszę wyodrębnić tylko te dwie wartości bez innych informacji. Wypróbowałem to za pomocą polecenia Select
cmdlet, ale bez efektu.
Edycja: muszę wyodrębnić tylko wartości liczbowe i przechowywać je w zmiennych.
powershell
scripting
powershell-2.0
kulter
źródło
źródło
[Math]::Round($Disk.Freespace / 1GB)
1mb
zwraca wartość1048576
a nie1000000
????1MiB
(z odpowiednią wielkością liter), ale zwykle jest wyświetlany małymi literami, bez „i”. Zobacz Mebibyte .Dużo prostsze rozwiązanie:
i dla komputerów zdalnych (potrzeby
Powershell Remoting
)źródło
psexec -u administrator \\[computer name or IP] powershell "get-psdrive C"
Tylko jedno polecenie, proste, słodkie i czyste, ale działa to tylko na dyskach lokalnych
Nadal możesz użyć tego polecenia na serwerze zdalnym, wykonując Enter-PSSession -Computername nazwa_serwera, a następnie uruchom Get-PSDrive, które pobierze dane tak, jakbyś je uruchomił z serwera.
źródło
Jakiś czas temu stworzyłem zaawansowaną funkcję PowerShell (skrypt cmdlet), która umożliwia wykonywanie zapytań na wiele komputerów.
Kod funkcji ma nieco ponad 100 linii, więc możesz go znaleźć tutaj: Wersja PowerShell polecenia df
Sprawdź Wykorzystanie sekcję przykładów. Poniższy przykład użycia wysyła zapytanie do zestawu komputerów zdalnych (dane wejściowe z potoku programu PowerShell) i wyświetla dane wyjściowe w formacie tabeli z wartościami liczbowymi w postaci czytelnej dla człowieka:
źródło
W przypadku innych sugestii napotkałem dwa problemy
1) Mapowania dysków nie są obsługiwane, jeśli uruchomisz PowerShell w ramach harmonogramu zadań
2) Możesz otrzymać odmowę dostępu błędy błędy przy próbie użycia polecenia „get-WmiObject” na zdalnych komputerach (oczywiście w zależności od konfiguracji infrastruktury)
Alternatywą, która nie cierpi z powodu tych problemów, jest użycie GetDiskFreeSpaceEx ze ścieżką UNC:
źródło
Innym sposobem jest rzutowanie ciągu znaków na obiekt WMI:
Możesz również podzielić wyniki przez 1 GB lub 1 MB, jeśli chcesz mieć różne jednostki:
Wynik to:
Remotecomputer C: has 252.7 GB free of 298.0 GB Total
źródło
Wiersz poleceń:
Wynik:
wiersz poleceń:
na zewnątrz:
wiersz poleceń:
na zewnątrz:
źródło
wmic logicaldisk get size
nie uwzględnia zarezerwowanego miejsca, mimo ... w programie PowerShellget-volume
zwraca praktyczny całkowity rozmiar (tj. minus zarezerwowane miejsce), ale kiedy spróbujęget-volume | format-list size
, mówi, że całkowity rozmiar plus zarezerwowane miejsce ... jak uzyskać całkowity rozmiar minus zarezerwowane miejsce dla każdego dysku z PowerShell ???źródło
źródło
Znam narzędzia psExec, które możesz pobrać stąd
Z pakietu narzędzi pochodzi plik psinfo.exe. Podstawowe użycie jest następujące w PowerShell / cmd.
Jednak możesz mieć z nim wiele opcji
Użycie: psinfo [[\ komputer [, komputer [, ..] | @file [-u użytkownik [-p psswd]]] [-h] [-s] [-d] [-c [-t separator]] [filtr]
\ komputer Wykonaj polecenie na komputerze zdalnym lub określonych komputerach. Jeśli pominiesz nazwę komputera, które polecenie jest uruchamiane w systemie lokalnym, i jeśli określisz symbol wieloznaczny (\ *), polecenie zostanie uruchomione na wszystkich komputerach w bieżącej domenie.
filter Psinfo pokaże tylko dane dla pola pasującego do filtra. np. „usługa psinfo” wyświetla tylko pole pakietu serwisowego.
źródło
Zdalnie do komputera za pomocą Enter-PSsession pcName, a następnie wpisuję Get-PSDrive
Spowoduje to wyświetlenie wszystkich dysków oraz zajętego i pozostałego miejsca. Jeśli chcesz zobaczyć wszystkie sformatowane informacje, prześlij je do FL w ten sposób: Get-PSdrive | FL *
źródło
Stworzyłem tę prostą funkcję, aby mi pomóc. To sprawia, że moje wywołania są dużo łatwiejsze do odczytania, że mając wbudowane instrukcje Get-WmiObject , Where-Object itp.
źródło
Jeśli chcesz sprawdzić wiele liter dysków i / lub filtrować między dyskami lokalnymi i sieciowymi, możesz użyć programu PowerShell, aby skorzystać z klasy WMI Win32_LogicalDisk . Oto krótki przykład:
Użyłem powyższej techniki do stworzenia skryptu Powershell, który sprawdza wszystkie dyski i wysyła alert e-mail, gdy tylko spadną poniżej limitu zdefiniowanego przez użytkownika. Możesz go pobrać z tego posta na moim blogu.
źródło
Zabawa PowerShell
źródło
Właśnie znalazłem polecenie Get-Volume , które zwraca
SizeRemaining
, więc(Get-Volume -DriveLetter C).SizeRemaining / (1e+9)
można użyć czegoś takiego, aby zobaczyć pozostałą Gb dla dysku C. Wydaje się, że działa szybciej niżGet-WmiObject Win32_LogicalDisk
.źródło