PowerShell IIS Mastery: Criar e Gerenciar Websites

Se você gerencia servidores Windows, provavelmente já trabalhou com o Serviço de Informações da Internet (IIS). Os sites são uma das principais características do IIS, e, usando o PowerShell, você pode gerenciar e automatizar facilmente o IIS com scripts do PowerShell IIS!

Neste artigo, você será apresentado a uma nova maneira de gerenciar o IIS usando o PowerShell. Utilizando as técnicas deste artigo, você pode facilmente criar scripts do PowerShell IIS para criar e gerenciar sites no IIS.

Para gerenciar o IIS com PowerShell, é necessário um dos dois módulos do PowerShell – WebAdministration ou IISAdministration. Este artigo aborda o módulo mais moderno, IISAdministration. Um vídeo complementar a este artigo demonstra o módulo mais antigo, WebAdministration, caso prefira uma abordagem alternativa.

Saber como gerenciar até mesmo um site simples para sua empresa ou para o mundo em geral o distinguirá dos demais. As seções a seguir neste artigo ajudarão você a aprender como criar e gerenciar um site no IIS. Você também aprenderá como gerenciar pools de aplicativos da web usando alguns cmdlets do PowerShell.

IISAdministration vs. Módulos WebAdministration

Você tem duas opções para gerenciar o IIS. Você pode usar WebAdministration ou IISAdministration. Mas qual deles deve usar?

Se estiver usando o IIS 10.0 ou superior, o novo módulo IISAdministration oferece muitas melhorias em relação ao antigo módulo WebAdministration.

Aqui estão alguns destaques:

  • Os cmdlets do IISAdministration oferecem melhor suporte para o pipeline e têm uma melhor capacidade de escalabilidade.
  • Comparados aos antigos cmdlets WebAdministration do IIS, os cmdlets do IISAdministration contêm código mais eficiente.
  • Os cmdlets do IISAdministration são mais simples e proporcionam acesso direto ao gerenciador do servidor.

Este artigo vai se concentrar neste módulo mais recente do IISAdministration.

Pré-requisitos

Este artigo será prático. Se você pretende seguir junto, certifique-se de ter os seguintes pré-requisitos em vigor.

The Windows 10 “Turn Windows features on or off” dialogue

É recomendável que você esteja familiarizado com o básico de HTML. Haverá um passo em que o uso de HTML desempenha um papel nos exemplos a seguir. Mas não se preocupe, você poderá copiar e colar o código!

Todos os exemplos neste post foram criados usando o IIS 10.0 no Windows 10 e o PowerShell 7 Preview 6. Os cmdlets do IISAdministration são os mesmos para o Windows Server 2016 e 2019 e funcionam com o Windows PowerShell 5.1.

Isso é tudo para as ferramentas utilizadas, agora para os recursos necessários para seguir adiante.

Instalando o Módulo IISAdministration

Assim que você tiver cumprido os pré-requisitos, é hora de fazer algumas configurações. Felizmente, não há muita configuração a ser feita, já que o módulo PowerShell necessário (IISAdministration) está disponível gratuitamente na Galeria do PowerShell.

Vá em frente e abra um console do PowerShell elevado em seu servidor web e instale o módulo usando o comando abaixo.

PS> Install-Module -Name 'IISAdministration'

Se você não tiver acesso à internet, pode baixar o módulo para outro host e copiá-lo para o seu diretório de módulos. Dê uma olhada na documentação para o Save-Module comando.

Descobrindo Cmdlets Disponíveis

Como em qualquer módulo do PowerShell com o qual você possa não estar familiarizado, um dos primeiros cmdlets que você deve usar para descobrir o inventário de cmdlets de um módulo é Get-Command. Usar o comando Get-Command -Module 'IISAdministration' como mostrado abaixo permitirá que você veja o que é possível com este módulo.

Mesmo que você esteja aprendendo algumas ações comuns para realizar em sites, esses comandos lhe darão uma ideia de tudo mais que você pode fazer.

Get-Command -Module ‘IISAdministration’ results

Agora você tem uma lista de cmdlets disponíveis. É hora de começar a montar um site.

Criando Seu Primeiro Site

Para ter um site para trabalhar, primeiro vamos criar um site. Para fazer isso, o primeiro passo é criar um diretório para salvar o conteúdo da web. Além disso, você precisará de um arquivo HTML nesse diretório para que o IIS o exiba. Este diretório servirá como o diretório da web que será usado nos exemplos posteriores.

Criando a Pasta e Página da Web

Primeiro, crie um diretório. Para fazer isso, você pode usar o cmdlet New-Item. O código abaixo criará um diretório em C:\MeuSite.

PS> New-Item -ItemType Directory -Name 'MyWebsite' -Path 'C:\'

Você pode escolher qualquer caminho desejado com o código acima. Para manter as coisas simples, serão usados caminhos genéricos.

Depois de criar o diretório, é hora de criar um arquivo HTML que será a página inicial do seu novo site.

Agora crie um arquivo chamado index.html no diretório C:\Meusite conforme mostrado abaixo.

PS> New-Item -ItemType File -Name 'index.html' -Path 'C:\MyWebsite\'

Assim que o arquivo for criado, abra-o em seu editor favorito e copie e cole o código abaixo nesse documento. Este HTML é uma página simples que será usada para garantir que o IIS esteja configurado corretamente quando você terminar.

<!DOCTYPE html>
<html>
    <head>
         <title>IIS Administration With PowerShell Demo</title>
    </head>
    <body>
        <h1>IIS Administration with PowerShell Demo</h1>
        <p>Thank you for reading this post on how to administer IIS with PowerShell!</p>

        <p>This page was created using the newer IISAdministration PowerShell module.</p>
        <h2>First Steps</h2>
        <p>Keep calm and learn PowerShell.</p>
    </body>
</html>

Criando um Site IIS

Agora é hora de tornar a página da web recém-criada disponível para o mundo ver. Para fazer isso, você precisará criar um diretório virtual. O diretório virtual contém todos os ativos e recursos usados para a página que está sendo servida.

Por padrão, o IIS cria um diretório virtual em C:\inetpub\wwwroot. O diretório contém todos os ativos e recursos padrão da página da web para o IIS. Você pode usar o diretório padrão C:\inetpub\wwwroot para armazenar seus arquivos também, mas para esses exemplos, não será usado para manter os caminhos o mais curtos possível. É por isso que você está usando C:\MyWebsite.

Para criar um novo diretório virtual (site), use o New-IISSite cmdlet. Esse cmdlet permite criar o site IIS.

Para este artigo, crie um site chamado Mywebsite apontando para o diretório C:\MyWebsite que está ouvindo na porta 8088. No trecho de código abaixo, você pode ver como fazer isso usando o cmdlet New-IISSite.

A única parte que pode ser confusa é o parâmetro BindingInformation. Este parâmetro permite apenas sintaxe de vinculação. Neste trecho, New-IISSite criará um site vinculado a um endereço IP (* é o mesmo que 127.0.0.1), a porta TCP para ouvir seguida por quaisquer cabeçalhos HTTP.

A sintaxe de vinculação pode ser explicada como protocolo, seguido por origem:Porta:destino. Neste exemplo, você configurou o IIS para ouvir solicitações HTTP de QUALQUER () endereço IP na porta 8088 e o destino é o localhost.*

PS> New-IISSite -Name 'MyWebsite' -PhysicalPath 'C:\MyWebsite\' -BindingInformation "*:8088:"

Assim que o site for criado, você pode executar Get-IISSite para inspecionar como ele se parece, conforme mostrado abaixo.

Creating a New Website in IIS

Por padrão, a configuração do site é iniciada e seu host da web começa a atender essas solicitações HTTP. Abra o navegador de sua preferência e acesse a máquina local apontando para a porta 8088. Agora você deverá ver a página da web que criou anteriormente sendo exibida.

MyWebSite IIS site in a web browser

Parabéns! Você acabou de configurar seu primeiro site no IIS usando o PowerShell!

Agora que você tem um site em funcionamento, é hora de aprender a gerenciar seu site e o servidor IIS que o hospeda.

Gerenciando o Site do IIS

Assim que um site estiver em funcionamento, você certamente precisará realizar ações comuns como parar e iniciar o site. Por exemplo, se o site precisar de atualizações, às vezes será necessário reiniciá-lo.

Para gerenciar o site no PowerShell, você tem dois cmdlets para trabalhar – Start-IISSite e Stop-IISSite. Esses dois cmdlets funcionam de maneira semelhante à forma como os cmdlets Stop-Service e Start-Service operam.

Parar um site é semelhante a parar um serviço do Windows. Você está impedindo ou permitindo o acesso ao site acessível por um protocolo sendo servido em uma porta exclusiva pelo IIS. No entanto, você não está parando o host do IIS.  Os sites podem ser parados e iniciados individualmente.

Parar um Único Site

Para parar um site IIS, você usará o cmdlet Stop-IISSite. Por padrão, o site que você criou anteriormente deve estar em estado Started. Se você parar o site e, assim, impedir o acesso a MeuSite, execute Stop-IISSite fornecendo o nome conforme mostrado abaixo. Este código interrompe o funcionamento do site MeuSite pelo IIS. Após parar o site, você não poderá mais acessá-lo.

PS> Stop-IISSite -Name "MyWebsite"

Um exemplo de inspecionar o estado do site como Started, parar e inspecionar o estado novamente é mostrado abaixo. Neste exemplo, você está:

  1. Obtendo o status do site MeuSite usando Get-IISSite.
  2. Executando o cmdlet Stop-IISSite contra o site MeuSite. Este cmdlet desativa o acesso ao site. Como esta ação está realizando alterações operacionais, será solicitada uma confirmação.
  3. Executando Get-IISSite novamente para verificar se o site MeuSite está parado, observando o estado Stopped.
Getting, stopping, and confirming MyWebsite state

Parando Todos os Sites

Anteriormente, você parou um único site, mas também pode parar todos os sites da mesma maneira. Ao usar o pipeline e encaminhar a saída de Get-IISSite para Stop-IISSite, o PowerShell enumerará todos os sites e os interromperá. No exemplo de código abaixo, o parâmetro de switch opcional Verbose é usado para mostrar mais informações.

Get-IISSite | Stop-IISSite -Verbose
Stopping all IIS sites with PowerShell

Você também pode parar todos os sites no IIS ao interromper o W3SVC ou Serviço de Publicação na Web. Parar o serviço do Windows desliga o IIS e impede que todos os sites sejam servidos. No entanto, se fizer isso, os sites ainda podem mostrar que estão em estado Iniciado.

Iniciando um Único Site

Vamos dizer que você fez algumas alterações no site MyWebsite e precisa iniciá-lo novamente. É hora de usar o comando Start-IISSite. Para fazer isso, basta especificar o nome da mesma forma que fez usando o cmdlet Stop-IISSite.

PS> Start-IISSite -Name 'MyWebsite'

Ao ser executado, você pode então inspecionar o estado novamente usando Get-IISSite. Quando o fizer, deverá ver uma saída semelhante à captura de tela abaixo.

Checking the status of MyWebsite using Get-IISSite and starting the site with Start-IISSite

E agora seu site deve estar disponível novamente em http://localhost:8088 se você atualizar seu navegador.

Iniciando Todos os Sites

Assim como você parou todos os sites de serem publicados, você pode usar o pipeline para iniciar todos os sites em seu host IIS também.

PS> Get-IISSite | Start-IISSite

Mais uma vez, você está obtendo todos os sites do IIS que estão sendo servidos e usando o pipeline para iniciar cada um. Sua saída deve se parecer com a captura de tela abaixo.

Using the pipeline to start all sites on host

Gerenciando Vínculos Web

Agora é hora de realizar algumas tarefas administrativas comuns no site MyWebsite. Uma das tarefas mais comuns é alterar os vínculos da web.

Quando você criou o site MyWebsite, você usou a sintaxe de ligação *:8088:. Essa sintaxe representava a escuta no endereço IP 127.0.0.1, na porta 80, sem cabeçalhos HTTP. Vamos dizer que agora você decidiu que deseja que o site escute na porta 9000. Para fazer isso, será necessário modificar as ligações do site.

Inspeção das Ligações Existentes

Antes de poder alterar as ligações do site, você deve primeiro inspecionar a configuração atual. Uma maneira de fazer isso é inspecionar a propriedade Binding retornada por Get-IISSite. Observe no trecho de código a seguir como fazer isso. No trecho, Get-IISSite está consultando o site MyWebSite e retornando apenas a propriedade Bindings.

PS> (Get-IISSite -Name 'MyWebsite').Bindings

Ao inspecionar apenas a propriedade Bindings, o PowerShell retornará um objeto com algumas informações diferentes, conforme mostrado abaixo.

Example 1: Finding binding information

Se você deseja ver apenas as informações de ligação, pode fazer referência específica à propriedade bindingInformation, como mostrado abaixo.

Example 2: Finding binding information

Remoção de Ligações

Se deseja alterar a porta em que um site escuta, primeiro deve remover a ligação existente associada a essa porta. Para remover a ligação, é necessário primeiro parar o site.

PS> Stop-IISSite -Name 'MyWebsite'

Assim que o site estiver parado, você pode remover a ligação existente que conecta o site MyWebsite à porta 8088. Para fazer isso, pode usar o Remove-IISSiteBinding cmdlet.

Para remover a ligação para MyWebsite conforme definido anteriormente, abaixo você pode ver um exemplo de como usar Remove-IISSiteBinding para fazer isso. Abaixo, você está fornecendo o nome do site e especificando a sintaxe de ligação descoberta anteriormente.

PS> Remove-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:8088:"

Ao executar o código, você será solicitado a confirmar sua decisão, pois está fazendo algo destrutivo, como mostrado abaixo.

Removing site binding using Verbose parameter

Não há limite para quantas ligações você pode ter. Você também poderia ter mantido a ligação original e adicionado a porta TCP 9000 como uma nova ligação.

Agora você pode executar Get-IISSite -Name 'MyWebsite' novamente. Agora você verá que as informações de ligação foram removidas, como mostrado pelo valor em branco em Bindings.

Confirming the old bindings were removed

Mesmo que o site esteja publicado, o IIS não tem como rotear o tráfego para o seu site.

É importante ter pelo menos uma ligação atribuída ao seu site. Para mostrar a importância, tente navegar para http://localhost:8088/index.html novamente. Se estiver usando o navegador da web Mozilla Firefox, você pode ver esta mensagem abaixo.

Can’t establish a connection

Criando Novas Ligações

Na última seção, você removeu a única ligação do site MyWebsite. Embora isso tenha quebrado o site, é apenas um problema temporário. É hora de corrigir esse problema criando uma nova ligação.

Para criar uma nova ligação, use o cmdlet New-IISSiteBinding. Como você precisa vincular a porta 9000 ao site MyWebsite agora, especifique a sintaxe de ligação correta como mostrado abaixo.

PS> New-IISSiteBinding -Name 'MyWebsite' -BindingInformation "*:9000:"

Assim que você criar o novo vínculo, inicie o site novamente com Start-IISSite. Lembre-se de que para criar este novo vínculo, o IIS exigiu que o site fosse encerrado.

Quando o site iniciar novamente, você deverá conseguir acessá-lo na porta 9000. Para verificar isso, abra o navegador da web de sua escolha e acesse http://localhost:9000. Agora você deverá ver que a página da web está funcionando novamente na porta 9000.

Same page, different TCP port

Removendo um Site

Se você acabou de passar por um tutorial e não pretende manter o site MyWebsite permanentemente, é hora de limpar. Para remover um site, use o cmdlet Remove-IISSite.

Remover um site do IIS pode ser uma empreitada perigosa, especialmente se estiver removendo um site no IIS que hospeda outros sites de produção. Para verificar se está removendo o site certo, é recomendável usar o parâmetro WhatIf comum do PowerShell. Este parâmetro permite que você inspecione o que teria acontecido se o comando realmente tivesse sido executado.

Você pode ver um exemplo de remoção do site MyWebsite usando o parâmetro WhatIf abaixo.

Remove-IISSite -Name 'MyWebSite' -WhatIf
Being careful with destructive cmdlets by using -WhatIf !

Se tudo parecer correto, solte a barra de segurança e execute o código novamente, desta vez sem o parâmetro -WhatIf.

Ao usar o cmdlet Remove-IISSite, o site não é excluído. Ele é removido da configuração do IIS. Os arquivos do site permanecem intactos.

Resumo

Neste artigo, você aprendeu a criar um site usando o módulo IISAdministration. Você viu como realizar operações administrativas necessárias para manter um site. Agora, você tem conhecimento suficiente sobre os conceitos básicos para trabalhar com qualquer host IIS moderno usando o PowerShell!

Leitura Adicional

Source:
https://adamtheautomator.com/powershell-iis/