Obiekty WMI mają złą sławę. Można z nich na prawdę dużo wyciągnąć, ale akurat ten kawałek platformy windows mógłby być trochę lepiej udokumentowany. Jednym z najbardziej tajemniczych tematów w pracy z WMI jest wywoływanie metod dla obiektów. Bez zbędnego rozwlekania tematu zobaczmy, jak to zrobić na 2 sposoby. Naszym zadaniem jest uruchomienie metodyDefragAnalysis na rzecz pierwszego dysku:
Metoda 1 – administacyjna
Polecenie Get-WMIObject zwraca obiekt klasy WMI. Wynik tego polecenia można więc potokiem przesłać do Select-Object aby wybrać właściwy dysk (tutaj pierwszy lepszy). Mając już tylko jeden obiekt wywołujemy dla tego obiektu metodę WMI korzystając z polecenia Invoke-WMIMethod. Istnieje również możliwość przekazania argumentów, ale DefragAnalysis nie wymaga żadnego. Oto te trzy polecenia połaczone w potok:
Get-WmiObject -Class win32_volume | select -First 1 | Invoke-WmiMethod -Name DefragAnalysis
Metoda 2 – programistyczna
Zaczynamy znowu od polecenia Get-WMIObject, ale tym razem zapominamy o zabawie potokiem. Aby wybrać właściwy wolumen (u nas pierwszy lepszy) znowu posługujemy się poleceniem Select-Object -Firs 1. Wynik tego potoku zapisujemy w zmiennej $volume. To czym jest teraz $volume? Ano obiektem WMI, ze wszystkimi jego właściwościami i metodami! Żeby wywołać metodę obiektu, po zmiennej napisz kropkę, potem nazwę metody do wywołania i w nawiasach ewentualnie umieść parametry:
$volume = Get-WmiObject -Class win32_volume | select -First 1 $volume.DefragAnalysis()
Podsumowanie:
Zależy jak wolisz, możesz korzystać i z jednej i z drugiej metody. Ja wybieram metodę 2, bo tam łatwiej jest przekazywać parametry i na dodatek, będąc programistą preferuję właśnie taki styl kodu… ale to moja prywatna opinia.