Snap-in do PowerShell: Criando sites, aplicativos Web, dirs virtuais e pools de aplicativos
por Thomas Deml
Neste passo a passo, você aprenderá a criar Sites, Aplicativos Web, Diretórios Virtuais e Pools de Aplicativos.
Introdução
O namespace do IIS PowerShell consiste em itens como Sites, Aplicativos, Diretórios Virtuais e Pools de Aplicativos. Criar novos itens de namespace e gerenciá-los é muito fácil usando os cmdlets internos do PowerShell.
Criando sites da Web
Se você estiver familiarizado com o PowerShell, saberá que o cmdlet New-Item é usado para criar novos itens nos vários namespaces do PowerShell. No entanto, o comando New-Item c:\TestDirectory
cria um novo diretório do sistema de arquivos (a maioria das pessoas usa o alias MD
ou MKDIR
para New-Item
). New-Item
também é usado para criar novos Sites no namespace do IIS PowerShell.
Parâmetros
Especificar o nome do diretório é o único argumento necessário quando você cria um novo diretório do sistema de arquivos. Infelizmente, isso não é suficiente quando você cria um Site. Parâmetros adicionais, como o caminho do sistema de arquivos e as associações de rede, são necessários para criar um Site. Aqui está o comando para criar um novo Site da Web seguido por um comando dir:
PS IIS:\Sites> New-Item iis:\Sites\TestSite -bindings @{protocol="http";bindingInformation=":80:TestSite"} -physicalPath c:\test
PS IIS:\Sites> dir
Name ID State Physical Path Bindings
---- -- ----- ------------- --------
Default Web Site 1 Started f:\inetpub\wwwroot http *:80:
TestSite 2 Started c:\test http :80:TestSite
Usar o argumento -physicalPath é bastante simples. Mas você pode se perguntar por que o argumento -bindings parece tão complexo.
O constructo usado é um hashtable (vá aqui para saber mais sobre tabelas de hash do PowerShell). Dentro dos pares chave=valor da tabela hash, indique as configurações que refletem os atributos na seção de associações de site do IIS:
<bindings>
<binding protocol="http" bindingInformation=":80:TestSite" />
</bindings>
Agora aqui está o motivo pelo qual usamos uma tabela de hash: a configuração do IIS é completamente extensível (consulte aqui para obter mais detalhes) com seções e atributos adicionais. Você pode imaginar que alguém estendendo o elemento <associação> com atributos adicionais. Os pares de valor de chave dentro de uma tabela de hash fornecem a flexibilidade para incorporar esses novos atributos sem precisar reescrever completamente o Snap-in do IIS PowerShell.
É certo que a sintaxe é um pouco complexa. Estamos pensando em encapsular algumas tarefas típicas, como criar sites com funções ou scripts adicionais em uma visualização técnica posterior.
Excluindo sites
Veja como você exclui o site que acabou de criar.
PS IIS:\ >Remove-Item IIS:\Sites\TestSite
Criando aplicativos Web
Criar aplicativos Web é mais fácil do que criar sites. Aqui vamos nós:
PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoApp' -physicalPath c:\test -type Application
Name ApplicationPool EnabledProtocols PhysicalPath
---- --------------- ---------------- ------------
DemoApp DefaultAppPool http c:\test
O único parâmetro que você precisa especificar é o tipo (tipo) porque, em um Site, talvez você queira criar aplicativos ou diretórios virtuais. Ao especificar o parâmetro -type, você informa ao Snap-in do IIS para criar um aplicativo.
Para excluir o aplicativo, você também pode usar Remove-Item.
Criando diretórios virtuais
Para criar um Diretório Virtual, você também usa o cmdlet New-Item. Vamos criar um Diretório Virtual abaixo do 'Site Padrão', mas um segundo abaixo do aplicativo Web que criamos na etapa anterior.
PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoVirtualDir1' -type VirtualDirectory -physicalPath c:\test\virtualDirectory1
Name PhysicalPath
---- ------------
DemoVirtualDir1 c:\test\virtualDirectory1
PS IIS:\> New-Item 'IIS:\Sites\Default Web Site\DemoApp\DemoVirtualDir2' -type VirtualDirectory -physicalPath c:\test\virtualDirectory2
Name PhysicalPath
---- ------------
DemoVirtualDir2 c:\test\virtualDirectory2
Criando pools de aplicativos
Mas fica ainda mais simples. A criação de um novo AppPool requer apenas que o nome seja especificado.
PS IIS:\> new-item AppPools\DemoAppPool
Name State
---- -----
DemoAppPool {}
Simples, não foi? Agora vamos montar isso em um cenário de ponta a ponta.
Juntando todas as peças
No seguinte cenário de ponta a ponta, executaremos a seguinte etapa:
- Crie um conjunto de novos diretórios do sistema de arquivos para sites, aplicativos Web e diretórios virtuais que criaremos um pouco mais tarde.
- Copie um conteúdo da Web muito simples para os diretórios recém-criados.
- Criar novo pool de aplicativos
- Crie um novo site, um novo aplicativo e dois novos diretórios virtuais e atribua-os ao pool de aplicativos recém-criado.
- Solicite o conteúdo da Web por meio do navegador da Web.
Etapa 1: Criar novos diretórios
Usamos o cmdlet New-Item para criar quatro diretórios do sistema de arquivos. Execute os seguintes comandos (use 'md' em vez de New-Item se você não quiser especificar o parâmetro -type):
New-Item C:\DemoSite -type Directory
New-Item C:\DemoSite\DemoApp -type Directory
New-Item C:\DemoSite\DemoVirtualDir1 -type Directory
New-Item C:\DemoSite\DemoVirtualDir2 -type Directory
Etapa 2: Copiar Conteúdo
Agora, vamos escrever um conteúdo html simples para estes diretórios:
Set-Content C:\DemoSite\Default.htm "DemoSite Default Page"
Set-Content C:\DemoSite\DemoApp\Default.htm "DemoSite\DemoApp Default Page"
Set-Content C:\DemoSite\DemoVirtualDir1\Default.htm "DemoSite\DemoVirtualDir1 Default Page"
Set-Content C:\DemoSite\DemoVirtualDir2\Default.htm "DemoSite\DemoApp\DemoVirtualDir2 Default Page"
Etapa 3: Criar novo pool de aplicativos
Crie o novo Pool de Aplicativos 'DemoAppPool' para o novo site se você excluiu o que criamos no exemplo anterior.
New-Item IIS:\AppPools\DemoAppPool
Observação
O cmdlet acima falhará se o módulo WebAdministration não tiver sido importado. Para fazer isso, você pode adicionar o seguinte cmdlet como a primeira etapa de um script que contém o cmdlet acima:
Import-Module "WebAdministration"
Etapa 4: Criar novos sites, aplicativos Web e diretórios virtuais e atribuir ao pool de aplicativos
Aí vem a carne. Criamos DemoSite, DemoApp e dois Diretórios Virtuais – DemoVirtualDir1 está diretamente abaixo de DemoSite e DemoVirtualDir2 está abaixo de DemoApp. Estamos atribuindo o DemoSite e o DemoApp ao DemoAppPool criado na etapa anterior. O DemoSite é atribuído à porta 8080 para não entrar em conflito com o 'Site Padrão'
New-Item IIS:\Sites\DemoSite -physicalPath C:\DemoSite -bindings @{protocol="http";bindingInformation=":8080:"}
Set-ItemProperty IIS:\Sites\DemoSite -name applicationPool -value DemoAppPool
New-Item IIS:\Sites\DemoSite\DemoApp -physicalPath C:\DemoSite\DemoApp -type Application
Set-ItemProperty IIS:\sites\DemoSite\DemoApp -name applicationPool -value DemoAppPool
New-Item IIS:\Sites\DemoSite\DemoVirtualDir1 -physicalPath C:\DemoSite\DemoVirtualDir1 -type VirtualDirectory
New-Item IIS:\Sites\DemoSite\DemoApp\DemoVirtualDir2 -physicalPath C:\DemoSite\DemoVirtualDir2 -type VirtualDirectory
Voila. Tudo o que resta é solicitar o conteúdo da Web.
Etapa 5: Solicitar o conteúdo da Web
É claro que você pode abrir o navegador e inserir http://localhost:8080/
e todas as outras URLs. Mas é um passo a passo do PowerShell e usaremos o PowerShell para fazer isso usando as classes .NET WebClient:
$webclient = New-Object Net.WebClient
$webclient.DownloadString("http://localhost:8080/");
$webclient.DownloadString("http://localhost:8080/DemoApp");
$webclient.DownloadString("http://localhost:8080/DemoVirtualDir1");
$webclient.DownloadString("http://localhost:8080/DemoApp/DemoVirtualDir2");
Se você se sentir aventureiro, também poderá usar o próprio objeto do Internet Explorer:
$ie = new-object -com InternetExplorer.Application
$ie.Visible = $true
$ie.Navigate("http://localhost:8080/");
Resumo
Neste passo a passo, você aprendeu a criar Sites, Aplicativos Web, Diretórios Virtuais e Pools de Aplicativos com o PowerShell. Recursos adicionais do PowerShell foram usados para criar um cenário funcional de ponta a ponta.