Serwer IIS 7.0 pozwala na bardzo elastyczne podejście do konfiguracji. Parametry serwera, witryn, aplikacji możemy konfigurować na kilka sposobów. Możemy użyć do tego graficznego narzędzia jakim jest IIS Manager, skorzystać z polecenia Appcmd.exe albo też wykorzystać do zarządzania PowerShell, co będzie treścią tego artykułu.
Windows PowerShell Provider dla IIS to PowerShell snapin, który pozwala na wykonywanie zadań administracyjnych dla IIS, oraz na zarządzanie konfiguracją serwera IIS. Dodatkowo otrzymujemy zbiór cmdletów pozwalających w prosty sposób zarządzać witrynami sieci Web, aplikacjami Web i serwerami Web.
Za pomocą PowerShell Provider dla IIS możemy między innymi:
- Utworzyć witryny Web, aplikacje Web, wirtualne katalogi i pule aplikacji,
- Zmienić proste właściwości obiektów IIS opisanych w punkcie 1,
- Dodawać i zmieniać złożone ustawienia konfiguracyjne,
- Odpytywać serwer IIS o stan uruchomionych witryn, pul aplikacji, aktualnie wykonywanych żądań.
Pierwszą rzeczą jaką musimy zrobić to zainstalować PowerShell snap-in for IIS 7.0 na maszynie, na której znajduje się nasz IIS 7.0. Jest on dostępny zarówno w wersji 32- jak i 64-bitowej.
PowerShell snap-in dla IIS 7.0 dla działania wymaga zainstalowanych:
- Windows Server 2008 lub Windows Vista Service Pack 1
- Microsoft PowerShell 1.0 lub 2.0
Instalacja jest prosta i sprowadza się do uruchomienia pobranego pliku msi:


Po kilku chwilach mamy już w systemie skrót do IIS PowerShell Management Console, z której możemy zarządzać serwerem IIS. Możemy też ręcznie zarejestrować IIS snap-in, aby uruchamiać go z istniejącego okna konsoli PowerShell. Jeżeli chcemy to zrobić musimy uruchomić plik IISConsole.PSC1, który zlokalizowany jest w katalogu $env:programfiles\IIS\PowerShellProvider.
Aby to zrobić z poziomu PowerShell należy wykonać następujące polecenie
PS C:\> & "$env:programfiles\IIS\PowerShellSnapin\iisConsole.psc1"
Powershell snap-in wykorzystuje analogie do systemu plikowego w zarządzaniu IIS. Górną ścieżką, z której możemy zarządzać IIS jest wirtualny dysk „IIS:\", poniżej którego znajdziemy wszystkie obiekty serwera IIS. Poniżej struktura przestrzeni nazw w IIS 7.0 PowerShell snapin:
- IIS:\
- Sites
- Site Collection
- Applications and Virtual Directories
- AppPools
SslBindings
Witryny uruchomione na IIS znajdują się w tej strukturze pod sites, pule aplikacji pod AppPools, analogicznie jak w systemie plikowym.
Na początku zobaczmy jak bogata jest lista cmdletów, za pomocą których możemy zarządzać serwerem IIS:
PS IIS:\sites> Get-Command *-web*
CommandType Name
Cmdlet Add-WebConfiguration
Cmdlet Add-WebConfigurationLock
Cmdlet Add-WebConfigurationProperty
Cmdlet Backup-WebConfiguration
Cmdlet Begin-WebCommitDelay
Cmdlet Clear-WebConfiguration
Cmdlet Clear-WebRequestTracingSettings
Cmdlet ConvertTo-WebApplication
Cmdlet Disable-WebGlobalModule
Cmdlet Disable-WebRequestTracing
Cmdlet Enable-WebGlobalModule
Cmdlet Enable-WebRequestTracing
Cmdlet End-WebCommitDelay
Cmdlet Get-WebAppDomain
Cmdlet Get-WebApplication
Cmdlet Get-WebAppPoolState
Cmdlet Get-WebBinding
Cmdlet Get-WebConfigFile
Cmdlet Get-WebConfiguration
Cmdlet Get-WebConfigurationBackup
Cmdlet Get-WebConfigurationLocation
Cmdlet Get-WebConfigurationLock
Cmdlet Get-WebConfigurationProperty
Cmdlet Get-WebFilePath
Cmdlet Get-WebGlobalModule
Cmdlet Get-WebHandler
Cmdlet Get-WebItemState
Cmdlet Get-WebManagedModule
Cmdlet Get-WebRequest
Cmdlet Get-Website
Cmdlet Get-WebsiteState
Cmdlet Get-WebURL
Cmdlet Get-WebVirtualDirectory
Cmdlet New-WebApplication
Cmdlet New-WebAppPool
Cmdlet New-WebBinding
Cmdlet New-WebFtpSite
Cmdlet New-WebGlobalModule
Cmdlet New-WebHandler
Cmdlet New-WebManagedModule
Cmdlet New-Website
Cmdlet New-WebVirtualDirectory
Cmdlet Remove-WebApplication
Cmdlet Remove-WebAppPool
Cmdlet Remove-WebBinding
Cmdlet Remove-WebConfigurationBackup
Cmdlet Remove-WebConfigurationLocation
Cmdlet Remove-WebConfigurationLock
Cmdlet Remove-WebConfigurationProperty
Cmdlet Remove-WebGlobalModule
Cmdlet Remove-WebHandler
Cmdlet Remove-WebManagedModule
Cmdlet Remove-Website
Cmdlet Remove-WebVirtualDirectory
Cmdlet Rename-WebConfigurationLocation
Cmdlet Restart-WebAppPool
Cmdlet Restart-WebItem
Cmdlet Restore-WebConfiguration
Cmdlet Select-WebConfiguration
Cmdlet Set-WebBinding
Cmdlet Set-WebConfiguration
Cmdlet Set-WebConfigurationProperty
Cmdlet Set-WebGlobalModule
Cmdlet Set-WebHandler
Cmdlet Set-WebManagedModule
Cmdlet Start-WebAppPool
Cmdlet Start-WebItem
Cmdlet Start-Website
Cmdlet Stop-WebAppPool
Cmdlet Stop-WebItem
Cmdlet Stop-Website
Oraz jak dużo tych poleceń mamy:
(get-command *-web*).count
71
Jak widać do dyspozycji mamy 71 cmdletów, które związane są ściśle z zarządzaniem IIS, oczywiście również dysponujemy pozostałymi poleceniami PowerShell.
Aby uzyskać szczegółowe informacje na temat poszczególnych cmdletów wystarczy skorzystać z standardowego polecenia Get-help dostępnego w PowerShell. Obecnie prześledźmy kilka z dostępnych poleceń w działaniu.
Aby zorientować się jakie witryny są uruchomione na IIS wystarczy, że przejdziemy w przestrzeni nazw do sites, a potem wywołamy znane polecenie dir:
PS IIS:\> dir
Name
AppPools
Sites
SslBindings
PS IIS:\> cd sites
PS IIS:\sites> dir
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
Default Web Site 1 Started %SystemDrive%\inetpub\wwwroot http *:80:
Jak widać w systemie jest tylko jedna standardowa witryna. Poszczególne pola pozwalają na odczytanie jej stanu, fizycznej ścieżki, oraz portów przypisanych do tej strony. Możemy do tego samego celu użyć dostępnego polecenia:
PS IIS:\> Get-Website
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
Default Web Site 1 Started %SystemDrive%\inetpub\wwwroot http *:80:
Poniżej przykład jak z poziomu IIS PowerShell Management Console utworzyć nową witrynę IIS:
PS IIS:\Sites\> New-Item IIS:\Sites\TestSite -bindings @{protocol="http"; bindingInformation=":80:TestSite"} -physicalPath c:\test
Parametry -bindings przedstawione są za pomocą hash tabeli, natomiast -physicalPath określa fizyczne położenie witryny.
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
TestSite 2 Started c:\test http:80:TestSite
Jeżeli jeszcze raz użyjemy polecenia Get-Website otrzymamy następujący rezultat:
PS IIS:\> Get-Website
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
Default Web Site 1 Started %SystemDrive%\inetpub\wwwroot http *:80:
TestSite 2 Started c:\test http:80:TestSite
Analogicznie możemy utworzyć aplikacje dla nowo utworzonej witryny:
PS IIS:\sites\> New-Item 'IIS:\Sites\TestSite\DemoApp' -physicalPath c:\test -type Application
Name Application pool Protocols Physical Path
---- ---------------- --------- -------------
DemoApp DefaultAppPool http c:\test
Oraz wirtualny katalog:
PS IIS:\sites\> New-Item 'IIS:\Sites\TestSite\DemoVirtualDir1' -type
VirtualDirectory -physicalPath c:\test\virtualDirectory1
Name PhysicalPath
---- ------------
DemoVirtualDir1 c:\test\virtualDirectory1
Możemy też podmienić pulę aplikacji, do której będzie przypisana nowo utworzona aplikacja. Najpierw tworzymy nową pulę aplikacji:
PS IIS:\sites\> cd ..
PS IIS:\> New-Item AppPools\DemoAppPool
Name State Applications
---- ----- ------------
DemoAppPool Started
A potem przypisujemy jej wcześniej utworzoną aplikacje:
PS IIS:\ Set-ItemProperty IIS:\Sites\TestSite\DemoApp -name applicationPool
-value DemoAppPool
Za pomocą dostępnych poleceń możemy np. badać status uruchomionych witryn, zatrzymywać je, uruchamiać jak widać poniżej:
PS IIS:\sites> Get-WebItemState IIS:\Sites\TestSite
Value
-----
Started
PS IIS:\sites> Stop-WebItem TestSite
PS IIS:\sites> Get-WebItemState IIS:\Sites\TestSite
Value
-----
Stopped
PS IIS:\sites> Start-WebItem TestSite
PS IIS:\sites> Get-WebItemState IIS:\Sites\TestSite
Value
-----
Started
Na zakończenie przykład jak uzyskać listę dostępnych backupów konfiguracji IIS oraz jak wykonać backup konfiguracji IIS. Lista kopi zapasowych:
PS IIS:\sites> Get-WebConfigurationBackup
Name Creation Date
---- -------------
Backup100709 7/10/2009 12:00:00 AM
IISBackup01 5/12/2009 12:00:00 AM
CFGHISTORY_0000000032 7/7/2009 9:50:00 AM
CFGHISTORY_0000000033 7/7/2009 10:02:12 AM
CFGHISTORY_0000000034 7/8/2009 9:03:09 AM
CFGHISTORY_0000000035 7/10/2009 1:13:47 PM
CFGHISTORY_0000000036 7/10/2009 1:23:47 PM
CFGHISTORY_0000000037 7/10/2009 1:25:47 PM
CFGHISTORY_0000000038 7/10/2009 1:27:47 PM
CFGHISTORY_0000000039 7/10/2009 2:05:47 PM
CFGHISTORY_0000000040 7/10/2009 2:07:47 PM
CFGHISTORY_0000000041 7/10/2009 2:31:47 PM
Nowa kopia konfiguracji IIS:
PS IIS:\> Backup-WebConfiguration -name MyBackup160709
Name Creation Date
---- -------------
MyBackup160709 7/16/2009 12:00:00 AM
Powyższe przykłady są jedynie wstępem do poznania komend umożliwiających zarządzanie IIS przy pomocy PowerShella. Jednak gdy mamy już kilka serwerów IIS użycie IIS PowerShell Management Console znacząco pozwoli usprawnić nam pracę i na pewno warto jest poświęcić swój czas, aby bliżej przyjrzeć się temu rozwiązaniu.
Na zakończenie należy zaznaczyć, że Windows PowerShell Provider for IIS jest dostępny standardowo w wersji serwera IIS 7.5, która pojawi się wraz z nadejściem Windows Server 2008 R2 i Windows 7.
Zasoby dodatkowe:
Krótki (4min) film wprowadzający do Windows PowerShell Snap-In for IIS 7.0
IIS.net: Managing IIS with the IIS 7.0 PowerShell Snap-in