AppCmd - zarządzanie IIS z wiersza poleceń w Windows Server
16.01.2013 20:48
Zarządzanie usługami IIS z poziomu GUI jest dziecinnie proste. Od wersji 7.0 wszystkie opcje są łatwo dostępne i zarządzanie jest niezmiernie proste. Oczywiście interfejs graficzny nie zawsze jest wygody w pewnych zastosowaniach. Do napisania skryptu zarządzającego witryną czy pulą aplikacji łatwiej użyć oczywiście wiersza poleceń. W tym momencie z pomocą przychodzi narzędzie AppCmd - administracja IIS z poziomu konsoli bez użycia graficznego środowiska Menadżera.
AppCmd pozwala na na:
- Tworzenie i konfigurowanie witryn, pól aplikacji, katalogów wirtualnych
- Zatrzymywanie i wznawianie witryn
- Zatrzymywanie, wznawianie i odtwarzanie pól aplikacji
- Podgląd procesów
- Analiza reqestów aplikacji na serwerze IIS
- Zarządzanie i backup konfiguracji aplikacji
- Mechanizm potoków
AppCmd.exe znajduje się w folderze %windir%\system32\inetsrv. Powyższa ścieżka nie istnieje w zmiennej path, a zatem aby ułatwić pracę, można ją tam dopisać. Dzięki temu zabiegowi uzyskamy dostęp do aplikacji z każdej lokacji.
Składnia
Narzędzie AppCmd działa poprzez wydanie odpowiednich poleceń (command) dla obiektów (object-type) z opcjonalnymi parametrami (parameter1:value1 ...):
appcmd (command) (object-type) <identifier></parameter1:value1 ...>
Obiektem może być: SITE, APP, VDIR, APPPOOL, CONFIG, WP, REQUEST, MODULE, BACKUP, TRACE. W zależności od wybranego obiektu, posiada on własną listę komend, jaką można użyć. Najłatwiej przejrzeć ją poprzez zapytanie:
appcmd (object-type) /?
O parametrach do komend, najszybciej dowiemy się poprzez polecenie:
appcmd (command) (object-type) /?
Przykłady
Teoria już za nami. Przejdźmy do kilku przykładów które pokarzą możliwości AppCmd, a także najbardziej przydatne polecenia. Część poleceń np. delete, czy set, jest analogiczna dla większości obiektów i nie ma potrzeby powtarzania ich dla każdej z opcji.
Witryny
appcmd list sites
[list][item]lista witryn[/item]
Jeśli dodamy np. parametr /state:Started, otrzymamy listę z tylko aktywnymi witrynami. Listę możemy filtrować również za pomocą innych parametrów (patrz następny podpunkt).
[item]dodanie witryny[/item][code=shell]appcmd add site /name:Test /id:10 /bindings:"http/*:95:" /physicalPath:"c:\PUB\d1" [/code]
name - nazwa witryny, id - identyfikator witryny, bindings - powiązania (w tym przypadku dostęp przez port 95)
[item]zmiana parametrów[/item][code=shell]appcmd set site Test /id:20 [/code]
[item]usuwanie[/item][code=shell]appcmd delete site Test[/code]
[/list]
Aplikacje
Mając już witrynę możemy pobawić się z aplikacjami w jej obrębie.
[list] [item]dodanie aplikacji[/item]
appcmd add app /site.name:Test /path:/a1 /physicalPath:"c:\PUB\d1\a1"
site.name - witryna, path - ścieżka wirtualna (w tym przypadku będzie to a1, czyli dostęp będzie poprzez adres: http://adres:95/a1), physicalPath - ścieżka fizyczna do folderu z plikami [/list]
Pule aplikacji
appcmd add apppool /name:apool
[list][item][/item][item]dodanie puli aplikacji[/item]
Dodaliśmy własną pulę aplikacji o nazwie apool. [item]podgląd puli aplikacji[/item][code=shell]appcmd list apppool "apool" /text:*[/code]
Na wyjściu otrzymamy podgląd konfiguracji puli aplikacji:
APPPOOL APPPOOL.NAME:"apool" PipelineMode:"Integrated" RuntimeVersion:"v4.0" state:"Started" [add] name:"apool" queueLength:"1000" autoStart:"true" enable32BitAppOnWin64:"false" managedRuntimeVersion:"v4.0" (...)
[item]edycja[/item]Dowolny parametr edytujemy w następujący sposób:
appcmd set apppool "apool" /autoStart:"false"
[/list]
Foldery wirtualne
appcmdadd vdir /app.name:"Test/a1" /path:/a2 /physicalPath:"c:\PUB\d1\a2"
[list][item]tworzenie folderu[/item]
Powyższe polecenie w naszym przypadku utworzyło wirtualną ścieżkę dla Test/a1.
[item]listowanie[/item][code=shell]appcmd list vdir /physicalPath:"c:\PUB"[/code]
Pomimo, iż listowanie, w każdym przypadku wygląda podobnie, to dzięki parametrom, można odfiltrować dane wg potrzeb. Tutaj tylko te witryny, które znajdują się fizycznie, w określonym folderze.
[/list]
Backup
Dzięki appcmd w prost sposób wykonany backup konfiguracji serwera:
appcmd add backup "b20120116"
[list][item]backup[/item]
[item]przywrócenie kopii[/item][code=shell]appcmd restore backup "b20120116"[/code]
[/list]
Procesy
[list] [item]analiza procesów[/item]Obiekt wp pozwala w prosty sposób na podgląda działających procesów. Poniższe polecenia listują wszystkie procesy działające na domyślnej puli aplikacji:
appcmd list wps /apppool.name:DefaultAppPool
lub dziłające na okreslonym numerze PID:
appcmd list wp "35674"
[/list]
Śledzenie witryn
Ciekawym obiektem jest trace to śledzenia witryn. Można w prosty sposób przeanalizować działanie witryn pod kątem błędów.
appcmd configure trace "Test" /enablesite
[list][item]dodanie witryny do śledzenia[/item]
Dodaliśmy śledzenie dla witryny Test. [item]podgląd logu[/item]Aby podejrzeć działanie trace, na początku należy wylistować logi (pliki XML):
appcmd list traces
Z logów wybieramy ten, który nas interesuje i wyświetlamy go
appcmd list trace "id_logu.xml" /text:path
[/list]
Potoki
Dzięki zaimplementowanemu mechanizmowi potoków, można jeszcze więcej wycisnąć z appcmd. Oto kilka bardziej zaawansowanych przykładów, które wykorzystują potoki (dla ułatwienia analizy, dodałem linie nowych znaków pomiędzy potokami):
appcmd list site /state:stopped /xml | appcmd start site /in
[list][item]szybkie uruchomianie nieaktywnych witryn[/item]
Listujemy witryny nieaktywne (wyjście w formacie /xml) i wrzucamy je jako wejście (/in) do polecenia uruchomienia witryn. [item]recycling puli aplikacji, dla witryn które generują błąd 500[/item]
appcm list trace /statusCode:500 /xml | appcmd list apppool /in /xml | appcmd recycle apppool /in
W tym przypadku listujemy witryny, generujące błąd 500, następnie przekazujemy je do list apppool w celu uzyskania odpowiednich pól aplikacji i na koniec robimy recycling tych puli.
[/list]
Podsumowanie
AppCmd to potężne narzędzie do zarządzania IIS z konsoli, w przypadku gdy np. nie możemy skorzystać z graficznego odpowiednika. Przedstawiłem zaledwie kilak podstawowych i najprzydatniejszych funkcji. Jeszcze jest wiele do odkrycia. Cieszy duża gama opcji i co najważniejsze, mechanizm potoków, który jest tu wręcz niezbędny.