Complemento de PowerShell: Realizar cambios de configuración en sitios web y grupos de aplicaciones

de Thomas Deml

En este tutorial, aprenderá a cambiar las propiedades simples de los contenedores de espacios de nombres IIS, como sitios web, aplicaciones web, directorios virtuales y grupos de aplicaciones, con el uso de los cmdlets integrados de PowerShell. En el siguiente tutorial se explica cómo cambiar las propiedades de configuración en las secciones system.webServer y las secciones personalizadas.

Introducción

La tarea de los complementos de PowerShell es ofrecer espacios de nombres que se pueden administrar con un cmdlet común de PowerShell integrado, como New-Item, Get-Item, Get-ChildItems, Set-Item, Set-ItemProperty etc. Los cmdlets incorporados operan en todos los espacios de nombres proporcionados por PowerShell. New-Item c:\testdir por ejemplo, permite crear un directorio de sistema de archivos, pero también puede crear un nuevo objeto IIS como un Web-Site o un grupo de aplicaciones, por ejemplo New-Item IIS:\AppPools\NewAppPool.

En el tutorial anterior empezamos a usar los cmdlets New-item y Get-Item. Este tutorial explorará más de los cmdlets integrados.

A menudo, es posible que tenga que cambiar la configuración de estos elementos después de crearlos. Para ello, usamos los cmdlets integrados New-ItemProperty y Set-ItemProperty. También veremos cómo usar Get-Item y Set-Item.

Este tutorial se basa en el Web-Site "Demosite" y sus aplicaciones web y directorios virtuales que creamos en el último tutorial.

Examinar las opciones de configuración

Antes de empezar a cambiar la configuración, queremos verlos primero. Este es un comando para ver los valores de configuración de "DemoSite".

PS IIS:\> get-item IIS:\Sites\DemoSite
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
DemoSite         2    Started    c:\demosite                    http :8080:

Esto le ofrece una vista de las propiedades más importantes del sitio. Sin embargo, hay más opciones de configuración que le interesen.

Este es un comando que proporciona más detalles:

(Get-ItemProperty IIS:\Sites\DemoSite -Name bindings).Collection

En el ejemplo anterior usamos paréntesis porque la llamada a Get-ItemProperty debe evaluarse primero antes de poder imprimir las entradas de la colección. En este caso, es similar a en matemáticas: (5 + 4) * 3 evaluará 5 + 4 primero y luego se multiplicará por 3. En este caso, los resultados del comando Get-ItemProperty se evaluarán y el objeto de configuración de IIS resultante contiene una colección que se muestra en la pantalla.

Puede usar la misma estrategia con otras propiedades o colecciones, como la sección ProcessModel de AppPools. El siguiente comando, por ejemplo, devuelve un buen objeto DateTime para startupTimeLimit de nuestro DemoAppPool:

PS IIS:\> (Get-ItemProperty IIS:\AppPools\DemoAppPool -name processModel).startupTimeLimit

Days              : 0
Hours             : 0
Minutes           : 1
Seconds           : 30
Milliseconds      : 0
Ticks             : 900000000
TotalDays         : 0.00104166666666667
TotalHours        : 0.025
TotalMinutes      : 1.5
TotalSeconds      : 90
TotalMilliseconds : 90000

Cambio de la configuración del sitio y del grupo de aplicaciones

Hay dos maneras básicas de realizar cambios.

  1. Si va a cambiar una propiedad simple, use Set-ItemProperty.
  2. Si está trabajando con una colección y desea agregar una nueva entrada de colección, utilice el comando New-ItemProperty. En una instalación predeterminada de IIS, la colección bindings es la única que se usa en el espacio de nombres iiS.

Set-ItemProperty y New-ItemProperty

Comencemos agregando un enlace adicional a nuestro DemoSite:

PS IIS:\> New-ItemProperty IIS:\sites\DemoSite -name bindings -value @{protocol="http";bindingInform
ation=":8081:"}

PS IIS:\> dir IIS:\Sites
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Started    f:\inetpub\wwwroot             http *:80:
DemoSite         2    Started    c:\demosite                    http :8080:
                                                                http :8081:

Como puede ver DemoSite ahora también está escuchando en el puerto 8081.

Use el Set-ItemProperty si desea modificar una propiedad existente. Cambiar el nombre del sitio por ejemplo:

PS IIS:\> Set-ItemProperty IIS:\Sites\DemoSite -name name -value NewDemoSite
PS IIS:\> dir iis:\Sites
Name             ID   State      Physical Path                  Bindings
----             --   -----      -------------                  --------
Default Web Site 1    Started    f:\inetpub\wwwroot             http *:80:
NewDemoSite      2    Started    c:\demosite                    http :8080:
                                                                http :8081:

Volvamos a cambiarlo al nombre anterior:

PS IIS:\> Set-ItemProperty IIS:\Sites\NewDemoSite -name name -value DemoSite

También queremos cambiar la identidad bajo la cual se ejecuta nuestro grupo de aplicaciones. En primer lugar, tenemos que crear un usuario sin embargo. Vamos a usar ADSI para hacerlo

$computer = [ADSI]"WinNT://."
$user = $computer.Create("user", "DemoAppPoolUser")
$user.SetPassword("Secret!!Pw3009")
$user.SetInfo()

Ahora estamos listos para configurar DemoAppPool para que se ejecute como este usuario:

Set-ItemProperty iis:\apppools\DemoAppPool -name processModel -value @{userName="DemoAppPoolUser";password="Secret!!Pw3009";identitytype=3}

Para garantizar la extensibilidad, utilizamos una confiable tabla hash para los nombres de propiedad y sus valores. Si olvidó cómo usarlo, aquí hay un vínculo.

Set-Item y Get-Item

Vamos a hacer lo mismo, es decir, asignar un usuario a un grupo de aplicaciones, con el combo set-item/get-item. Es posible que le guste esta variante un poco mejor porque le permite aprovechar la finalización de la línea de comandos. Para ver cómo funciona, no copie y pegue los siguientes comandos. Escriba un par de caracteres y use la tecla TAB para disfrutar de las ventajas de la finalización de la línea de comandos:

PS IIS:\AppPools> $demoPool = Get-Item IIS:\AppPools\DemoAppPool
PS IIS:\AppPools> $demoPool.processModel.userName = "DemoAppPoolUser"
PS IIS:\AppPools> $demoPool.processModel.password = "Secret!!Pw3009"
PS IIS:\AppPools> $demoPool.processModel.identityType = 3
PS IIS:\AppPools> $demoPool | Set-Item

Resumen

En este tutorial ha aprendido a usar cmdlets proporcionados por PowerShell para administrar contenedores de espacios de nombres de IIS, como sitios y grupos de aplicaciones. Has aprendido a usar tablas hash y a aprovechar la finalización de la línea de comandos. En el siguiente tutorial, aprenderá a usar los cmdlets de administración de IIS para realizar cambios en las configuraciones de IIS que no son accesibles mediante el espacio de nombres de administración del IIS.