Share via


IIS: Servidores web: rápido y fácil

Puede instalar servidores web en forma mucho más rápida y fácil con la ayuda de Windows PowerShell.

Jason Helmick

Pensar en cuántas veces instalar IIS. ¿No mucho? ¿Realmente? Examinar plataformas como Exchange y SharePoint que necesita IIS como prerrequisitos de software, las implementaciones de granja de Web, pruebas de entornos y entornos de desarrollo. Podría dedicar más tiempo a instalar IIS lo que piensas.

Añadir a esto la necesidad de automatización de la recuperación ante desastres. ¿Puede llevar su granja de servidores Web en línea en minutos? Instalar y configurar IIS junto con sus sitios Web están una tarea sencilla. Es un proceso largo y aburrido si tienes un montón de servidores.

Nadie quiere pasar los fines de semana configuración de servidores. Desea administrar su granja de servidores Web, sitios Web y todas esa Web "cosas" el lunes al viernes, de nueve a cinco. Desea aprovechar cada oportunidad para agilizar y automatizar las tareas en su trabajo.

Esta guía paso a paso le ayudará a implementar IIS y predeterminada a un montón de servidores, los sitios Web a la vez, de unos cuatro minutos. No puede hacerlo con la herramienta Administrador de servidor de GUI y el administrador de IIS de la GUI. De hecho, la GUI es parte del problema. ¿Cómo puede hacer estas cosas mágicas? Windows PowerShell. (Observación: Esto afecta a IIS 7.5 y 8 de IIS).

Comunicación remota de PowerShell

Antes de que comemos empezamos, ¿tienes Windows PowerShell Remoting habilitada en los servidores? Si no es así, debe hacer. Eso es cómo este plan va a trabajar. Antes de entrar a la parte rápida y fácil de implementar, analicemos cómo obtener Windows PowerShell Remoting activado en caso de que aún no lo ha hecho.

Existen dos métodos para ello. Si vas a probar esto en un entorno de prueba, el primer método puede ser más rápido. Hay dos funciones de Windows PowerShell, que es necesario activar: Ejecución de Windows PowerShell Remoting y script. El primer método requiere que visitar cada servidor que desea administrar. Puede utilizar el Protocolo de escritorio remoto (RDP) o zapatillas-net y ejecutar comandos de dos.

1.   Abra una consola Windows PowerShell con privilegios administrativos y usar el cmdlet Enable-PSRemoting para habilitar el acceso remoto de Windows PowerShell en cada servidor:

PS> Enable-PSRemoting -Force

2.   Deseará utilizar algunos de los módulos adicionales de cmdlets almacenados en estos servidores. Para utilizar estos últimos, deberás ser capaz de ejecutar secuencias de comandos — que, de forma predeterminada, Windows PowerShell no permiten. Así que vamos a cambiar eso:

PS> Set-ExecutionPolicy RemoteSigned –Force

En este punto, ya está listo para implementar y administrar los servidores IIS. Si tienes cientos de servidores para administrar, desea emitir una directiva de grupo para realizar estos cambios. Ejecución alrededor a todos esos servidores es un ridículo desperdicio de tiempo, así que aquí están los pasos para activar Windows PowerShell Remoting con un objeto de directiva de grupo (GPO):

  1. Habilitar "Permite la configuración automática de oyentes" y configurar IPv4 e IPv6 para "*". Encontrará la clave en: Equipo configuración de usuario\Directivas\Plantillas administrativas\Componentes Windows\Windows servidor remoto de Management\WinRM.
  2. Permitir la ejecución de secuencias de comandos bajo "Gire sobre la ejecución de secuencias de comandos" y definir la política a "Permitir firmado sólo secuencias de comandos" o "Permitir scripts de locales y remotas scripts firmados". Encontrará la clave en: Equipo configuración de usuario\Directivas\Plantillas administrativas\Componentes Windows\Windows PowerShell.
  3. Configurar el servicio de administración remota de Windows (WinRM) para iniciar automáticamente, en esta clave: Servicios de Settings\System de Windows\Configuración de equipo\Directivas\Configuración de informática.

Si tienes el Firewall de Windows que se ejecutan en esos equipos, necesitará una regla entrante porque WinRM escucha en el puerto 5985. Encontrará la clave en: Equipo equipo\Directivas\Configuración Settings\Windows Firewall con seguridad avanzada.

Implementar los servidores Web

Ahora comienza la diversión. Esto es bastante sencillo, ya que sólo tarda unos chistes de Windows PowerShell para que la magia suceda.

1.   Almacenar una lista de todos los nombres de servidor que va a ser parte de la implementación a una variable. Si desea y luego usar Windows PowerShell para leer esa lista, puede crear una lista en el Bloc de notas:

PS> $servers= get-content c:\servers.txt

Esto es un poco descuidado, especialmente cuando se trata de una lista de grandes servidores. Es mejor que Windows PowerShell hacer todo el trabajo. ¿Sabías que cmdlets de Active Directory puede obtener una lista de nombres de equipo? Para usar los cmdlets de Active Directory, necesitará la herramientas de administración de servidor remoto (RSAT) para Active Directory instalado. Si conoces el secreto para remoting implícita de Windows PowerShell, puede utilizar sin necesidad de instalar los cmdlets localmente. Con la RSAT instalado, la primera tarea consiste en importar el módulo para los cmdlets de Active Directory:

PS> Import-Module ActiveDirectory

Una vez importado, puede usar el cmdlet Get-ADComputer para agarrar los nombres de equipo de su elección. En este ejemplo, los equipos a los que podrá implementar IIS todos comienzan con el nombre "Web." Filtrar el cmdlet Get-ADComputer para encontrar sólo los equipos que comienzan con el nombre de "Web" y tubería para seleccionar objeto para agarrar sólo el nombre del equipo:

PS> $servers= Get-ADComputer -filter 'name -like "web*"' | Select-Object -ExpandProperty name

2.   Ahora es hora de usar el poder de Windows PowerShell Remoting para hacer el levantamiento de lo que normalmente sería un largo y aburrido proceso fácil. Vamos a instalar IIS. En primer lugar, nos crearemos una sesión a todos esos servidores hemos recogido:

PS> $session=New-PSSession -ComputerName $servers

3.   El paso siguiente es importar el módulo de administrador de servidor en los equipos remotos. Este módulo tiene los cmdlets que instalar y quitar características y funciones de servidor. Estamos utilizando el cmdlet Invoke-comando con un parámetro para la sesión que hemos creado anteriormente. Lo interesante de esto es que todos los servidores recibirán inmediatamente cualquier instrucciones enviadas dentro del bloque de secuencias de comandos {}:

PS> Invoke-Command -Session $session {Import-module ServerManager}

Este paso no es necesario en el proceso. Esto sólo comprueba si IIS está instalado en los equipos remotos. El cmdlet Get-WindowsFeature hace un buen trabajo de esto:

PS> invoke-command -Session $session {Get-WindowsFeature web-server} | format-table -AutoSize

Hablemos acerca de cómo instalar IIS para un momento antes que sumergirse en los comandos. IIS tiene una instalación predeterminada que sólo permite las páginas Web estáticas. Esto es genial por razones de seguridad, pero la mayoría de nosotros necesitaremos algunos de los componentes adicionales para nuestras propias necesidades de aplicación.

Cuando utilizas la GUI de instalación, los componentes se enumeran y simplemente puede comprobar el cuadro. Con Windows PowerShell, tienes que decirle a los equipos remotos específicamente qué componentes desea. Si estás sentado en cualquier equipo con Windows Server 2008 R2 o Windows Server 8, por ejemplo, puede utilizar el Get-WindowsFeature a la lista de todos los componentes disponibles para IIS (tenga en cuenta que primero se debe importar el módulo de ServerManager):

PS> Get-WindowFeature *web*

Una vez que conozca los nombres de los componentes, puede utilizar Agregar-WindowsFeature para instalarlos. Inicie con el servidor Web y, a continuación, agregue cada componente, separado por una coma:

PS> Add-WindowsFeature Web-Server, ASP

Puede instalar todos los componentes IIS sin escribir una cadena larga de ellas. Tenga en cuenta que la instalación de todo no es una buena idea por razones de seguridad, pero el cmdlet Add-WindowsFeature tiene un parámetro que ayudará a:

PS> Add-WindowsFeature Web-Server -IncludeAllSubFeature

Ahora vuelve a hacer de nuestro despliegue remoto de IIS. Queremos que la instalación por defecto y los componentes adicionales para ASP y ASP.NET. Una vez más, vamos a utilizar el cmdlet Invoke y mando. Una vez que ejecute este comando, todos los servidores instalación IIS:

PS> Invoke-command -Session $session {Add-WindowsFeature web-server,web-asp,web-asp-net}

4.   Para fines de prueba, lo implementamos un conjunto de páginas Web a los nuevos servidores Web. Utilizaremos un default.htm y un archivo testpage.asp. Asignación de unidades a los servidores y copiar los archivos en el sitio Web predeterminado tomaría mucho tiempo. En su lugar, usaremos Windows PowerShell y la lista de servidores para hacer la copia.

En este ejemplo, los archivos de la Web se encuentran en c:\files. Copiarlos con el cmdlet copiar elemento a un destino que es una ruta UNC. La UNC tiene el nombre del servidor. Pasamos a la lista de servidores (servidores$) para el cmdlet Foreach-objeto. Foreach se recorra cada nombre de servidor en servidor $. Para corregir la ruta de acceso UNC para que no tengamos que escribir los nombres de servidor, utilice la variable especial de Windows PowerShell "$ _". Esta variable contiene el nombre del servidor actual de $Server:

PS> $servers | foreach{copy-item -Path c:\files\*.* -Destination "\\$_\c$\inetpub\wwwroot"}

Sólo implantamos IIS y un sitio Web predeterminado para un montón de servidores en unos cuatro minutos. Para probar los sitios Web, inicie Internet Explorer utilizando la técnica descrita anteriormente. Este comando lanzará un nuevo navegador para cada servidor y mostrar la página de prueba:

PS> $servers | foreach{Start-Process iexplore "http://$_/testpage.asp"}

Para cerrar todos los navegadores, volver a Windows PowerShell y pruebe lo siguiente:

PS> Stop-Process –Name iexplore

Quitar servidores Web

Si está probando las implementaciones para recuperación ante desastres, o simplemente probar esta técnica, puede que desee quitar todo hemos añadido y comenzar de nuevo desde un medio ambiente limpio. Aquí es cómo eliminar los archivos del sitio Web y el servidor Web y realizar un reinicio de los equipos:

PS> $servers | foreach{remove-item -Path "\\$_\c$\inetpub\wwwroot\*.*"} PS> Invoke-command -Session $session {Remove-WindowsFeature web-server,web-asp,web-asp-net} PS> Restart-Computer –Computername $servers -Force

La solución de secuencias de comandos

La mejor parte acerca de Windows PowerShell es que una vez que has hecho algo desde la consola, puede copiar en un archivo de texto y convertirlo en una secuencia de comandos. Sin complicaciones, sin necesidad de programación: automatización sólo puro. Si desea poder ejecutar esta implementación en un momento de recuperación ante desastres y pruebas adicionales, copiar los comandos detallados aquí en un archivo de texto denominado IISDeploy.ps1. Sólo puede ejecutar esta secuencia de comandos cuando se necesita implementar.

Este tipo de técnica abre un conjunto nuevo de posibilidades. Puede automatizar el despliegue de varios sitios Web en una granja de servidores Web, generar prueba en la granja de carga o incluso utilizar estas técnicas para otras funciones y características de Windows.

Incorporar el módulo deusuario en IIS que tiene cmdlets para crear y configurar sitios Web, grupos de aplicaciones y mucho más. Si necesita automatizar algo, Windows PowerShell hará su trabajo mucho más fácil y rápido.

Jason Helmick  tiene más de 20 años como consultor empresarial, capacitador y autor. Como director de tecnologías de Windows PowerShell en formación técnica de interfaz, se centra en la automatización con Active Directory y IIS. Puede ver más información acerca de IIS en su próximo libro de Manning publicaciones, "Aprender Windows IIS en un mes de comidas". Llegar a él en el JasonHelmick@gmail.com.

Contenido relacionado