Maestría en PowerShell IIS: Crear y Administrar Sitios Web

Si gestionas servidores Windows, es probable que hayas trabajado con Internet Information Services (IIS). Los sitios web son una de las principales características de IIS y, mediante PowerShell, ¡puedes gestionar y automatizar fácilmente IIS con scripts de PowerShell para IIS!

En este artículo, te introducirás a una nueva forma de gestionar IIS utilizando PowerShell. Utilizando las técnicas de este artículo, puedes construir fácilmente scripts de PowerShell para IIS y crear y gestionar sitios web en IIS.

Para gestionar IIS con PowerShell, necesitas uno de dos módulos de PowerShell: WebAdministration o IISAdministration. Este artículo aborda el módulo más moderno, IISAdministration. El video complementario a este artículo demuestra el antiguo módulo WebAdministration por si prefieres ver una alternativa.

Saber cómo gestionar incluso un sitio web simple para tu empresa o para el mundo en general te distinguirá de tus colegas. Las siguientes secciones en este artículo te ayudarán a aprender cómo crear y gestionar un sitio web en IIS. También aprenderás cómo gestionar los conjuntos de aplicaciones web mediante algunos cmdlets de PowerShell.

Módulos IISAdministration vs WebAdministration

Tienes dos opciones para gestionar IIS: WebAdministration o IISAdministration. Pero, ¿cuál deberías usar?

Si estás utilizando IIS 10.0 o superior, el nuevo módulo IISAdministration ofrece muchas mejoras respecto al antiguo módulo WebAdministration.

Aquí hay algunas cosas destacadas:

  • Los cmdlets de IISAdministration ofrecen un mejor soporte para la canalización y escalan mejor.
  • En comparación con los antiguos cmdlets de WebAdministration de IIS, el IISAdministration contiene un código más eficiente.
  • Los cmdlets de IISAdministration son más simples y brindan acceso directo al administrador del servidor.

Este artículo se va a centrar en este módulo más reciente de IISAdministration.

Requisitos previos

Este artículo será práctico. Si planeas seguirlo, asegúrate de tener los siguientes requisitos previos en su lugar.

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

Se recomienda que estés familiarizado con lo básico de HTML. Habrá un paso en el que el uso de HTML juegue un papel en los ejemplos próximos. ¡Pero no te preocupes, podrás copiar y pegar el código!

Todos los ejemplos en esta publicación fueron creados utilizando IIS 10.0 en Windows 10 y PowerShell 7 Preview 6. Los cmdlets de IISAdministration son los mismos para Windows Server 2016 y 2019 y funcionan con Windows PowerShell 5.1.

Es todo para las herramientas utilizadas, ahora para los recursos necesarios para seguir adelante.

Instalando el Módulo de IISAdministration

Una vez que hayas cumplido con los requisitos previos, es hora de hacer algunos ajustes. Afortunadamente, no hay mucho que configurar, ya que el módulo PowerShell que necesitas (IISAdministration) está disponible de forma gratuita en la PowerShell Gallery.

Adelante y abre una consola de PowerShell elevada en tu servidor web e instala el módulo usando el siguiente comando.

PS> Install-Module -Name 'IISAdministration'

Si no tienes acceso a internet, puedes descargar el módulo en otro host y copiarlo al directorio de tus módulos. Echa un vistazo a la documentación del comando Save-Module.

Descubriendo los Cmdlets Disponibles

Como con cualquier módulo de PowerShell con el que quizás no estés familiarizado, uno de los primeros cmdlets que debes usar para descubrir el inventario de cmdlets de un módulo es Get-Command. Usar el comando Get-Command -Module 'IISAdministration' como se muestra a continuación te permitirá ver qué es posible con este módulo.

Aunque aprenderás algunas acciones comunes para realizar en sitios web, estos comandos te darán una idea de todo lo demás que puedes hacer.

Get-Command -Module ‘IISAdministration’ results

Ahora tienes una lista de cmdlets disponibles. Es hora de empezar a crear un sitio.

Creando Tu Primer Sitio Web

Tener un sitio web con el que trabajar, primero creemos un sitio web. Para hacerlo, el primer paso es crear un directorio para guardar el contenido web. Además, necesitarás un archivo HTML en ese directorio para que IIS lo muestre. Este directorio servirá como el directorio web que se utilizará en ejemplos posteriores.

Creando la Carpeta y Página Web

Primero, crea un directorio. Para hacerlo, puedes usar el cmdlet New-Item. El código a continuación creará un directorio en C:\MiSitioWeb.

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

Puedes elegir cualquier ruta que desees con el código anterior. Para mantener las cosas simples, se usarán rutas genéricas.

Una vez que hayas creado el directorio, es hora de crear un archivo HTML que será la página de inicio de tu nuevo sitio web.

Ahora crea un archivo llamado index.html en el directorio C:\MiSitioWeb como se muestra a continuación.

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

Una vez que se haya creado el archivo, ábrelo en tu editor favorito y copia y pega el código a continuación en ese documento. Este HTML es una página simple que se utilizará para asegurarse de que IIS esté configurado correctamente cuando hayas terminado.

<!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>

Creando un Sitio Web en IIS

Ahora es el momento de hacer que la página web recién creada esté disponible para que el mundo la vea. Para hacerlo, deberás crear un directorio virtual. El directorio virtual contiene todos los activos y recursos utilizados para la página que se está sirviendo.

De forma predeterminada, IIS crea un directorio virtual en C:\inetpub\wwwroot. El directorio contiene todos los activos y recursos de la página web predeterminada para IIS. También podrías usar el directorio predeterminado C:\inetpub\wwwroot para almacenar tus archivos, pero en estos ejemplos no se utilizará para mantener las rutas lo más cortas posible. Por eso estás utilizando C:\MyWebsite en su lugar.

Para crear un nuevo directorio virtual (sitio), usa el cmdlet New-IISSite. Este cmdlet te permite crear el sitio web de IIS.

Para este artículo, crea un sitio web llamado Mywebsite que apunte al directorio C:\MyWebsite y que escuche en el puerto 8088. En el fragmento de código a continuación, puedes ver cómo hacerlo usando el cmdlet New-IISSite.

La única parte que puede resultar confusa es el parámetro BindingInformation. Este parámetro solo permite sintaxis de enlace. En este fragmento, New-IISSite creará un sitio web que está enlazado a una dirección IP (* es lo mismo que 127.0.0.1), el puerto TCP en el que escuchará y cualquier encabezado HTTP.

La sintaxis de enlace se puede explicar como protocolo, seguido de origen:Puerto:destino. En este ejemplo, has configurado IIS para que escuche las solicitudes HTTP de CUALQUIER () dirección IP en el puerto 8088 y el destino es localhost.*

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

Una vez que se haya creado el sitio, puedes ejecutar Get-IISSite para inspeccionar cómo se ve, como se muestra a continuación.

Creating a New Website in IIS

De forma predeterminada, la configuración del sitio web se inicia y tu servidor web comienza a atender las solicitudes HTTP. Abre tu navegador favorito y ve a la máquina local apuntando al puerto 8088. Ahora deberías ver la página web que creaste anteriormente.

MyWebSite IIS site in a web browser

¡Felicidades! Acabas de configurar tu primer sitio web en IIS usando PowerShell!

Ahora que tienes un sitio web en funcionamiento, es hora de aprender a gestionar tu sitio web y el servidor IIS que lo aloja.

Gestión del Sitio Web en IIS

Una vez que un sitio web está en funcionamiento, sin duda necesitarás realizar acciones comunes como detener y iniciar el sitio. Por ejemplo, si el sitio necesita actualizaciones, a veces tendrás que reiniciar el sitio.

Para gestionar el sitio en PowerShell, tienes dos cmdlets para trabajar: Start-IISSite y Stop-IISSite. Estos dos cmdlets funcionan de manera similar a cómo operan los cmdlets Stop-Service y Start-Service.

Detener un sitio web es similar a detener un servicio de Windows. Estás impidiendo o permitiendo el acceso al sitio accesible por un protocolo que se sirve en un puerto único por IIS. Sin embargo, no estás deteniendo el host de IIS. Los sitios pueden detenerse e iniciarse de forma individual.

Detener un solo sitio

Para detener un sitio web de IIS, utilizarás el cmdlet Stop-IISSite. Por defecto, el sitio que creaste anteriormente debería estar en estado Started. Si detienes el sitio y, por lo tanto, evitas el acceso a MyWebsite, ejecuta Stop-IISSite proporcionando el nombre como se muestra a continuación. Este código detiene el sitio MyWebsite para que no sea servido por IIS. Después de detener el sitio, ya no podrás acceder a él.

PS> Stop-IISSite -Name "MyWebsite"

A continuación se muestra un ejemplo de inspección del estado del sitio web como Started, deteniéndolo e inspeccionando nuevamente el estado. En este ejemplo, estás:

  1. Obteniendo el estado del sitio MyWebsite utilizando Get-IISSite.
  2. Ejecutando el cmdlet Stop-IISSite contra el sitio MyWebsite. Este cmdlet cierra el acceso al sitio web. Como esta acción implica cambios operativos, se te pedirá confirmación.
  3. Ejecutando nuevamente Get-IISSite para verificar que el sitio MyWebsite está detenido, al observar el estado Stopped.
Getting, stopping, and confirming MyWebsite state

Detener todos los sitios

Anteriormente, detuviste un solo sitio, pero también puedes detener todos los sitios de manera igual de sencilla. Al utilizar el pipeline y redireccionar la salida de Get-IISSite a Stop-IISSite, PowerShell enumerará todos los sitios y los detendrá. En el siguiente ejemplo de código, se utiliza el parámetro opcional Verbose para mostrar más información.

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

También puedes detener todos los sitios en IIS deteniendo el servicio W3SVC o World Wide Web Publishing Service. Al detener el servicio de Windows, se apaga IIS y se evita que se sirvan todos los sitios. Sin embargo, si haces esto, los sitios aún pueden mostrar que están en un estado Iniciado.

Iniciando un Solo Sitio

Supongamos que has realizado algunos cambios en el sitio MyWebsite y necesitas iniciarlo nuevamente. Es hora de usar el comando Start-IISSite. Para hacerlo, simplemente especifica el nombre como lo hiciste al usar el cmdlet Stop-IISSite.

PS> Start-IISSite -Name 'MyWebsite'

Cuando se ejecuta, puedes inspeccionar el estado nuevamente usando Get-IISSite. Cuando lo hagas, deberías ver una salida similar a la captura de pantalla a continuación.

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

Y ahora tu sitio debería estar disponible nuevamente en http://localhost:8088 si actualizas tu navegador.

Iniciando Todos los Sitios

Similar a cómo detuviste todos los sitios de ser publicados, puedes utilizar el pipeline para iniciar todos los sitios web en tu host de IIS también.

PS> Get-IISSite | Start-IISSite

Nuevamente, estás obteniendo todos los sitios de IIS que se están sirviendo y utilizando el pipeline para iniciar cada uno. Tu salida debería lucir similar a la captura de pantalla a continuación.

Using the pipeline to start all sites on host

Gestión de Vinculaciones Web

Es hora de realizar algunas tareas administrativas comunes en el sitio MyWebsite. Una de las tareas más comunes es cambiar las vinculaciones web.

Cuando creaste el sitio MyWebsite, utilizaste la sintaxis de enlace *:8088:. Esta sintaxis representaba la escucha en la dirección IP 127.0.0.1, en el puerto 80 sin encabezados HTTP. Digamos ahora que has decidido que en cambio quieres que el sitio escuche en el puerto 9000. Para hacer esto, necesitarás modificar los enlaces del sitio.

Inspeccionar los Enlaces Existentes

Antes de poder cambiar los enlaces del sitio, primero debes inspeccionar la configuración actual. Una forma de hacerlo es inspeccionando la propiedad Binding devuelta por Get-IISSite. Observa en el siguiente fragmento de código cómo hacerlo. En el fragmento, Get-IISSite está consultando el sitio MyWebSite, y solo está devolviendo la propiedad Bindings.

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

Cuando inspeccionas solo la propiedad Bindings, PowerShell devolverá un objeto con algunas piezas de información diferentes como se muestra a continuación.

Example 1: Finding binding information

Si quieres ver solo la información de enlace, puedes hacer referencia específicamente a la propiedad bindingInformation como se muestra a continuación.

Example 2: Finding binding information

Eliminar Enlaces

Si deseas cambiar en qué puerto un sitio escucha, primero debes eliminar el enlace existente que lo vincula a ese puerto. Para eliminar el enlace, primero debes detener el sitio.

PS> Stop-IISSite -Name 'MyWebsite'

Una vez que el sitio esté detenido, ahora puedes eliminar el enlace existente que vincula el sitio MyWebsite al puerto 8088. Para hacerlo, puedes usar el Remove-IISSiteBinding cmdlet.

Para eliminar el enlace para MyWebsite como se definió anteriormente, a continuación puedes ver un ejemplo de cómo usar Remove-IISSiteBinding para hacer precisamente eso. A continuación, estás proporcionando el nombre del sitio y especificando la sintaxis de enlace descubierta anteriormente.

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

Cuando ejecutes el código, se te pedirá que confirmes tu decisión, ya que estás haciendo algo destructivo como se muestra a continuación.

Removing site binding using Verbose parameter

No hay límite en la cantidad de enlaces que puedes tener. Puedes mantener fácilmente el enlace original y agregar el puerto TCP 9000 como un nuevo enlace.

Ahora puedes ejecutar Get-IISSite -Name 'MyWebsite' nuevamente. Ahora verás que la información de enlace ha sido eliminada, como se muestra por el valor en blanco bajo Bindings.

Confirming the old bindings were removed

A pesar de que el sitio está publicado, IIS no tiene forma de saber cómo dirigir el tráfico a tu sitio.

Es importante tener al menos un enlace asignado a tu sitio. Para mostrarte la importancia, intenta navegar a http://localhost:8088/index.html nuevamente. Si estabas usando el navegador web Mozilla Firefox, es posible que veas este mensaje a continuación.

Can’t establish a connection

Creación de Nuevos Enlaces

En la última sección, eliminaste el único enlace del sitio MyWebsite tenía. Si bien esto rompió el sitio, es solo un problema temporal. Es hora de corregir este problema creando un nuevo enlace.

Para crear un nuevo enlace, usa el cmdlet New-IISSiteBinding. Dado que ahora necesitas enlazar el puerto 9000 al sitio MyWebsite, especifica la sintaxis de enlace correcta como se muestra a continuación.

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

Una vez que hayas creado el nuevo enlace, reinicia el sitio nuevamente con Start-IISSite. Recuerda que para crear este nuevo enlace, IIS requiere que el sitio se detenga.

Cuando el sitio se reinicie, ahora deberías poder acceder a él en el puerto 9000. Para verificar esto, abre tu navegador web preferido y ve a http://localhost:9000. Ahora deberías ver que la página web funciona nuevamente en el puerto 9000.

Same page, different TCP port

Eliminar un sitio web

Si acabas de seguir un tutorial y no planeas mantener el sitio MyWebsite permanentemente, es hora de limpiarlo. Para eliminar un sitio, utiliza el cmdlet Remove-IISSite.

Eliminar un sitio de IIS puede ser una tarea peligrosa, especialmente si estás eliminando un sitio en IIS que aloja otros sitios web de producción. Para verificar que estás eliminando el sitio correcto, se recomienda utilizar el común parámetro de PowerShell WhatIf. Este parámetro te permite inspeccionar lo que habría sucedido si el comando realmente se hubiera ejecutado.

Puedes ver un ejemplo de cómo eliminar el sitio MyWebsite usando el parámetro WhatIf a continuación.

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

Si todo parece estar bien, suelta la barra de seguridad y vuelve a ejecutar el código, esta vez sin el parámetro -WhatIf.

Cuando utilizas el cmdlet Remove-IISSite, el sitio no se elimina. Se elimina de la configuración de IIS. Los archivos del sitio web permanecen intactos.

Resumen

En este artículo, has aprendido a crear un sitio web usando el módulo IISAdministration. Has visto cómo realizar operaciones administrativas necesarias para mantener un sitio web. ¡Ahora sabes lo suficiente de los conceptos básicos para trabajar con cualquier host IIS moderno usando PowerShell!

Lectura adicional

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