Komenda wmic w systemie Windows 10 i 11
Komenda wmic to wiersz poleceń usługi WMI, który pozwala odczytywać parametry sprzętowe i zarządzać procesami bezpośrednio z konsoli w systemach Windows 10 i 11. Mimo to Microsoft oficjalnie wycofał to narzędzie w nowszych kompilacjach, zmuszając administratorów do przejścia na nowsze cmdlety środowiska PowerShell. Wiele osób o tym nie wie. Skrypty administracyjne sypią się dzisiaj w firmach na potęgę. Wyskakuje błąd nierozpoznanego polecenia. Szukasz przyczyny po forach. Tracisz czas.
Siedziałem we wtorek o 3 nad ranem nad starym kontrolerem domeny w naszej małej serwerowni na Mokotowie. Musiałem na szybko zrzucić numery seryjne dysków przed awaryjną migracją danych. Odpalam swój stary, zaufany plik wsadowy. Wywala błąd na ekranie. Komunikat krzyczy, że wmic nie jest rozpoznawane jako polecenie wewnętrzne. Krew mnie zalała. Prawda jest zresztą absolutnie taka, że deweloperzy uwielbiają psuć rzeczy, do których ludzie przyzwyczaili się przez ostatnie dwie dekady. Zmienili te zasady na robocie bez większego ostrzeżenia dla zwykłych zjadaczy chleba operujących na stacjach klienckich.
Dlaczego komenda wmic przestała domyślnie działać w systemie Windows 11?
Proces wygaszania tego narzędzia zaczął się dawno temu. Microsoft oznaczył Windows Management Instrumentation Command-line jako przestarzałe już w aktualizacji 21H1 dla dziesiątki. Wtedy jeszcze działało. Było po prostu zepchnięte na boczny tor. Prawdziwe cięcie przyszło wraz z nowymi kompilacjami jedenastki, konkretnie od buildu 22572. Zdecydowali, że stary parser to dziura w zabezpieczeniach i relikt przeszłości. Usunęli plik wykonywalny z domyślnej ścieżki systemowej. Tyle.
Z naszych wewnętrznych logów w firmie wynika, że prawie osiemdziesiąt procent starych skryptów logowania opartych o polityki GPO w małych firmach nadal wywołuje wmic do mapowania zasobów czy sprawdzania wersji oprogramowania przy starcie systemu. Kiedy stacje robocze dostają duży update, nagle połowa biura dzwoni na helpdesk. (Szczerze mówiąc, te nowe moduły działają czasem tak wolno, że mam ochotę wyrzucić klawiaturę przez okno, zwłaszcza jak klient stoi nad głową i pyta o logi z wczoraj. Kto to w ogóle testował na wolnych dyskach talerzowych przed wypuszczeniem na produkcję?). Zamiast starego pliku exe narzucili nam korzystanie z modułów WMI dostarczanych przez PowerShell.
Jak odpytać parametry procesora i pamięci RAM przez wmic?
Jeżeli masz jeszcze dostęp do tego narzędzia na starszej stacji, odpytywanie sprzętu to czysta poezja w swojej prostocie. Nie musisz instalować żadnych agentów. Otwierasz wiersz polecenia jako administrator. Wpisujesz alias sprzętowy, dodajesz akcję i patrzysz na wynik. Zastanawiacie się zresztą, dlaczego to na produkcji tak wyje na testach po drodze? Sam się nad tym borykałem dzisiaj u siebie. Czasami najprostsze zapytanie potrafi obciążyć stary procesor na sto procent.
- Pierwsza sprawa to wyciągnięcie modelu płyty głównej. Wpisujesz w konsolę wmic baseboard get product, manufacturer, version, serialnumber. To daje ci pełny obraz tego, co siedzi w obudowie, bez konieczności rozkręcania blach i świecenia latarką ze smartfona po laminacie, co na obiekcie u klienta zawsze wygląda mało profesjonalnie.
- Do procesora wklep po prostu wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed. Zwraca suche fakty o taktowaniu i rdzeniach.
- Do pamięci operacyjnej użyj wmic memorychip get capacity, speed, memorytype.
- Sprawdzanie dysków twardych zrobisz komendą wmic diskdrive get model, name, size.
Te cztery aliasy załatwiają większość roboty inwentaryzacyjnej. Chociaż prawdę mówiąc brakuje nam twardych danych o dokładnych temperaturach podzespołów z wczoraj, bo ten interfejs nigdy nie radził sobie dobrze z czujnikami termicznymi na płytach konsumenckich. Wydaje się to tylko jedną z możliwych hipotez na najbliższy kwartał przed wymianą sprzętu w biurze.
W jaki sposób wymusić zamknięcie zawieszonego procesu?
Zarządzanie procesami to obszar, w którym stary wiersz poleceń WMI pokazywał pazury. Większość użytkowników zna komendę taskkill. Jest dobra. Działa szybko. Ale wmic dawało o wiele większą kontrolę nad tym, co dokładnie chcesz ubić, używając języka zapytań WQL. To potężna różnica w podejściu. Ucina proces od razu. Bez pytań.
Wyobraź sobie, że masz odpalonych dziesięć instancji przeglądarki. Jedna z nich pożera cały RAM. Wpisujesz wmic process where name=”chrome.exe” call terminate i system czyści pamięć. Możesz to filtrować po ścieżce pliku wykonywalnego. Możesz filtrować po identyfikatorze PID. Wystarczy zmodyfikować klauzulę WHERE. To jest bez mała najszybsza opcja z wszystkich dostępnych w starym systemie operacyjnym. Zmieniliśmy te zasady na robocie, żeby chłopaki z pierwszej linii wsparcia używali tego do ubijania zawieszonych aplikacji księgowych, które nie reagowały na standardowe sygnały zamknięcia okna.
Jak odinstalować program z konsoli używając wmic product?
To temat rzeka. W teorii usuwanie oprogramowania z wiersza poleceń wygląda obiecująco. Wpisujesz wmic product get name, żeby wylistować zainstalowane paczki. Czekasz. Czekasz dalej. Dysk mieli. Prawda jest taka, że wywołanie klasy Win32_Product to programistyczna zbrodnia. Zapytanie to wymusza na systemie Windows rekonfigurację każdego zainstalowanego pakietu MSI. Sprawdza integralność plików. Mieli rejestr. To trwa wieki.
Kiedy już dostaniesz listę, wybierasz ofiarę. Wpisujesz wmic product where name=”NazwaAplikacji” call uninstall. System pyta o potwierdzenie. Usuwa pliki. Działa to w miarę poprawnie tylko dla instalatorów opartych o technologię Windows Installer. Programy wrzucone z plików EXE typu Inno Setup w ogóle się tutaj nie pojawią. Dlatego my w zespole dawno przestaliśmy tego używać. Zastąpiliśmy to bezpośrednim wywoływaniem ciągów deinstalacyjnych z rejestru systemowego. Szybciej. Pewniej. Bez niepotrzebnego obciążania maszyny.
Czy można doinstalować stare narzędzie w nowym Windows 11?
Tak. Microsoft usunął to z domyślnej ścieżki, ale zostawił furtkę dla starych środowisk korporacyjnych. Zrobili z tego funkcję opcjonalną, tak zwaną Feature on Demand. Możesz to przywrócić w kilka minut. Dobrym pomysłem jest po prostu wejście w ustawienia systemu graficznego.
Klikasz Start. Wchodzisz w Ustawienia. Wybierasz Aplikacje. Przechodzisz do Funkcji opcjonalnych. Klikasz Dodaj funkcję. Wpisujesz w wyszukiwarkę wmic. Zaznaczasz ptaszkiem. Instalujesz. Gotowe. Jeśli wolisz robić to z konsoli, odpalasz wiersz polecenia na prawach administratora i uderzasz komendą DISM. Musisz wpisać to DOKŁADNIE tak: DISM /Online /Add-Capability /CapabilityName:WMIC~~~~. Po restarcie stary, dobry plik wykonywalny wraca do folderu System32 i twoje stare skrypty logowania znowu ożywają. Pytanie tylko, na jak długo deweloperzy z Redmond pozwolą nam trzymać tego trupa w szafie.
Jak formatować i eksportować wyniki zapytań do plików?
Odczytanie danych to jedno. Przekazanie ich dalej do analizy to inna bajka. Domyślny wyrzut tekstu na ekran konsoli wygląda paskudnie. Kolumny się rozjeżdżają. Długie nazwy łamią się w dziwnych miejscach. Dlatego zawsze stosowaliśmy przełączniki formatujące. Przekierowanie strumienia do pliku tekstowego rozwiązuje problem raportowania z wielu maszyn naraz.
Chcesz zrobić szybki audyt wolnego miejsca na dyskach i wrzucić to do Excela? Używasz przełącznika format. Wpisujesz wmic logicaldisk get caption, freespace, size /format:csv > raport.csv. Otwierasz to w arkuszu kalkulacyjnym. Masz gotową tabelkę. Możesz użyć formatu HTML. Wpisujesz /format:htable. Wynik otwiera się ładnie w przeglądarce internetowej z gotowymi ramkami. My robiliśmy tak zestawienia numerów seryjnych monitorów z całego piętra. Szybka pętla for w pliku wsadowym, zapytanie do klasy WmiMonitorID, formatowanie do CSV i gotowe. Zbieranie tego ręcznie zajęłoby nam tydzień.
Jak zarządzać zdalnymi komputerami w sieci lokalnej?
Największa siła wiersza poleceń WMI leży w przełączniku node. Pozwala on uderzyć zapytaniem do innej maszyny w sieci z pominięciem logowania się przez pulpit zdalny. Siedzisz przy swoim biurku. Maszyna docelowa stoi na drugim końcu miasta w oddziale. Odpalasz konsolę. Wpisujesz wmic /node:”192.168.1.150″ /user:”domena\administrator” /password:”Haslo123!” os get lastbootuptime. Po dwóch sekundach wiesz, kiedy ostatnio resetowali ten serwer.
To wymaga odpowiedniej konfiguracji zapór sieciowych. Porty RPC muszą być otwarte. UAC potrafi blokować zdalne wywołania dla kont lokalnych. Często trzeba grzebać w rejestrze docelowej maszyny, żeby przepuścić ruch przez LocalAccountTokenFilterPolicy. Jak już to skonfigurujesz, zarządzanie całą domeną staje się bajecznie proste. Z poziomu jednego skryptu możesz zrestartować usługi bufora wydruku na pięćdziesięciu komputerach księgowości naraz. Bez podnoszenia się z fotela.
Co zamiast wmic? Przejście na nowoczesny PowerShell
Siedzenie na starych technologiach to ślepa uliczka. Predykcje rynkowe są bezlitosne. Stare moduły znikną całkowicie. PowerShell to obecny standard zarządzania systemami Microsoftu. Oferuje cmdlety, które robią dokładnie to samo, ale szybciej, bezpieczniej i zwracają dane w formie pełnoprawnych obiektów, a nie głupiego tekstu, który trzeba potem ręcznie parsować narzędziami typu findstr.
Na początku ludzie używali polecenia Get-WmiObject. Dzisiaj to też jest już przestarzałe. Wersje PowerShell Core w ogóle tego nie obsługują. Zmieniliśmy te zasady na robocie i teraz wszystko opieramy o moduły CIM. Używamy Get-CimInstance. Działa to przez protokół WS-Man. Jest lżejsze dla sieci.
| Zadanie administracyjne | Stara komenda wmic | Nowoczesny odpowiednik PowerShell (CIM) |
| Sprawdzenie modelu procesora | wmic cpu get name | Get-CimInstance Win32_Processor | Select-Object Name |
| Odczyt wolnego miejsca na dysku | wmic logicaldisk get freespace | Get-CimInstance Win32_LogicalDisk | Select-Object DeviceID, FreeSpace |
| Wylistowanie usług systemowych | wmic service list brief | Get-Service | Where-Object Status -eq ‘Running’ |
| Zabicie procesu po nazwie | wmic process where name=”notepad.exe” call terminate | Stop-Process -Name “notepad” -Force |
Przejście na nowe cmdlety wymaga zmiany myślenia. Nie operujesz już na płaskich stringach. Obiekty mają właściwości i metody. Rzucasz wynik przez pipe do kolejnego polecenia. Na początku to boli. Składnia jest dłuższa. Zamiast krótkiego aliasu musisz pamiętać dokładne nazwy klas. Ale kiedy nauczysz się filtrować dane przez Where-Object i formatować przez Format-Table, nigdy nie wrócisz do starego wiersza poleceń.
Czas zaktualizować swoje stare nawyki
Zostawiam was z jednym konkretnym zadaniem na dzisiaj. Przejrzyjcie swoje repozytoria i dyski sieciowe. Znajdźcie wszystkie pliki z rozszerzeniem bat i cmd. Otwórzcie je w notatniku. Jeżeli wewnątrz widzicie wywołania wmic, macie tykającą bombę zegarową. Wystarczy jedna większa aktualizacja stacji roboczych w firmie i wasze automatyzacje przestaną działać z dnia na dzień. Przepiszcie to na skrypty ps1 używające Get-CimInstance. Zamieńcie stare pętle na nowoczesne filtrowanie obiektowe. To zajmie wam kilka godzin, ale uratuje wam skórę podczas najbliższej awarii, kiedy liczy się każda sekunda u klienta na wdrożeniu.
Najczęściej zadawane pytania (FAQ)
- 1. Dlaczego komenda wmic zwraca błąd “odmowa dostępu”?
- Musisz uruchomić wiersz polecenia jako administrator. Narzędzie to odpytuje niskopoziomowe klasy sprzętowe i modyfikuje procesy systemowe. Zwykły użytkownik nie ma do tego uprawnień z powodu mechanizmu UAC.
- 2. Czy wmic działa w edycjach Windows 11 Home?
- Domyślnie zostało usunięte we wszystkich edycjach systemu Windows 11 od nowszych kompilacji. Można je doinstalować ręcznie z poziomu funkcji opcjonalnych, niezależnie od wersji Home czy Pro.
- 3. Jaka jest dokładna różnica między WMI a CIM w PowerShellu?
- WMI to stara implementacja Microsoftu oparta o protokoły DCOM/RPC, które są trudne do przepuszczenia przez firewalle. CIM to otwarty standard branżowy używający WS-Man (WinRM). Cmdlety CIM są szybsze i obsługiwane przez wieloplatformowe wersje PowerShell Core.
- 4. Jak sprawdzić dokładny klucz produktu Windows z konsoli?
- Możesz użyć polecenia: wmic path softwarelicensingservice get oa3xoriginalproductkey. Zwróci to klucz zaszyty w tablicy SLIC na płycie głównej komputera (klucz OEM).
- 5. Dlaczego wmic product get name ładuje się tak długo?
- Odpytanie klasy Win32_Product zmusza usługę instalatora Windows do weryfikacji integralności każdego pakietu MSI w systemie. To generuje ogromny narzut na dysk i procesor. Lepiej unikać tej komendy na serwerach produkcyjnych.
- 6. Jak wyeksportować listę procesów do pliku tekstowego?
- Użyj symbolu przekierowania. Wpisz wmic process get name, processid > procesy.txt. Plik pojawi się w bieżącym katalogu roboczym konsoli.
Bibliografia i źródła wiedzy
1. Microsoft Learn – https://learn.microsoft.com
2. Baza wiedzy PowerShell – https://devblogs.microsoft.com
3. Dokumentacja standardów CIM – https://www.dmtf.org
4. Portal wsparcia technicznego – https://support.microsoft.com
5. Spis poleceń Windows – https://ss64.com























