PowerShell y Administración de IIS


PowerShell, es una tecnología que permite ejecutar comandos de Windows. Es muy útil para realizar tareas repetitivas como instalaciones complejas de aplicaciones, procesos de mantenimiento…

Compatibilidad

En función de las diferentes versiones de Windows tendremos acceso a las diferentes versiones de PowerShell:

  • Windows Server 2003: No viene instalado por defecto, pero se puede instalar hasta la versión de PowerShell 2.0. Requiere previamente de instalar NET Framework 2.0. Si quisieramos instalar PowerShell 2.0 y previamente estuviera instalado PowerShell 1.0; deberiamos desinstalarlo o eliminar la clave del registro HKLM\SOFTWARE\Microsoft\Powershell\1.
  • Windows Server 2008 anterior a SP2:No viene instalado por defecto, pero se puede instalar hasta la versión de PowerShell 2.0 x86 o PowerShell 2.0 x64. Si opcionalmente queremos usar el editor integrado de PowerShell debemos instalar Microsoft .NET Framework 3.5 Service Pack 1.
  • Windows Server 2008 SP2: Viene instalado por defecto PowerShell 2.0. Se puede instalar PowerShell 3.0 para arquitectura de 32 bits o PowerShell 4.0 para arquitectura de 64 bits.
  • Windows Server 2012:Disponible PowerShell 3.0 y PowerShell 4.0.

Compatibilidad Librería WebAdministration

En PowerShell se pueden añadir librerías que aportan más funcionalidad para trabajar en configuraciones más especificas del Sistema. Por ejemplo, PowerShell incorpora la libreria WebAdministration para trabajar con configuraciones del IIS. Para ello debemos activar IIS Management Console en nuestro servidor.

  • IIS 6.0 (Windows Server 2003): No hay librería disponible. Una alternativa que disponemos es la ejecución de Objectos WMI de IIS.
  • IIS 7.0 (Windows Server 2008): Previamente debemos instalar el PowerShell Snap-In for IIS 7.0
    Add-PSSnapIn WebAdministration
    
  • IIS 7.5 o Superior (Windows 2008 R2 en adelante): Por defecto esta instalada.
    Import-Module WebAdministration
    

Creación de un Application/Web Site en IIS

El siguiente ejemplo de PowerShell crea una aplicación en el IIS; independiente de la versión de IIS de este.
Los parámetros necesarios son:

  • appName: Nombre de la aplicación.
  • appPath: Directorio de instalación.
  • appDefaultDocument: Pagina por defecto.
  • appPoolName: Application pool que usará la aplicación.

Adicionalmente internamente fuerza que la aplicación se ejecute en NET 4.0 en modo integrado.

################################################################################################################################################################  
# This script Create IISWebApp
#
# To run the script
#  
# ./CreateIISWebApp -appPath "C:directory" -appName "ExampleApp" -appDefaultDocument "Start.aspx" -appPoolName "DefaultAppPool"
################################################################################################################################################################  

Param(  
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)]  
    [string] $appPath,  
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)]  
    [string] $appName, 
    [Parameter(ValueFromPipeline=$true)]  
    [string] $appDefaultDocument = "", 
	[Parameter(Mandatory=$true, ValueFromPipeline=$true)]  
	[string] $appPoolName
)

$appPoolNameNetFrameworkVersion = "v4.0"
$appPoolNameManagedPipelineMode = "Integrated"
$appEnableAnonymousAuthentication = $true


Write-Host "###### CreateIISWebApp ######"
Write-Host "######appPath:"$appPath  
Write-Host "######appName:"$appName  
Write-Host "######appDefaultDocument:"$appDefaultDocument  
Write-Host "######appPoolName:"$appPoolName  

$iisVersion = Get-ItemProperty "HKLM:softwaremicrosoftInetStp";
Write-Host "Creating Web Application"$appName" on IIS:" $iisVersion.MajorVersion"."$iisVersion.MinorVersion

if ($iisVersion.MajorVersion -eq 6)
{
    $DefaultWebSiteWmiName = "W3SVC/1/ROOT/";
    $AppNameWmiName = $DefaultWebSiteWmiName + $appName;
    $creationArgs = @{Name = ($AppNameWmiName)}
    $vDir = set-wmiinstance -Class IIsWebVirtualDir -Namespace rootmicrosoftiisv2 -Arguments $creationArgs;
    $vDir.Put();
    $filter = "Name = '" + $AppNameWmiName + "'"
    $vDirSetting = get-wmiobject -Class IIsWebVirtualDirSetting -Namespace rootmicrosoftiisv2 -Filter $filter 
    $vDirSetting.AppFriendlyName = $appName
    $vDirSetting.Path = $appPath
    if ($appDefaultDocument -ne "") {
        $vDirSetting.Properties["DefaultDoc"].Value = $appDefaultDocument + "," + $vDirSetting.Properties["DefaultDoc"].Value
    }
    $vDirSetting.Put();
    $vDir = get-wmiobject -Class IIsWebVirtualDir -Namespace rootmicrosoftiisv2 -Filter $filter 
    $vDir.AppCreate3(2, $appPoolName, 1);
    c:WINDOWSMicrosoft.NETFrameworkv4.0.30319aspnet_regiis -s $AppNameWmiName
    return
}
if ($iisVersion.MajorVersion -eq 7)
{
    if ($iisVersion.MinorVersion -ge 5)
    {
        Import-Module WebAdministration;
    }           
    else
    {
        if (-not (Get-PSSnapIn | Where {$_.Name -eq "WebAdministration";})) {
            Add-PSSnapIn WebAdministration;
        }
    }
}
if ($iisVersion.MajorVersion -ge 7)
{
        Import-Module WebAdministration;
}

$siteName = "Default Web Site"
$appNamePath = "IIS:sites" + $siteName + "" + $appName
$app = New-WebApplication -Name $appName -ApplicationPool $appPoolName -PhysicalPath $appPath -Site $siteName

$DefaultDocumenentfilter = "/system.WebServer/defaultdocument/files"

if ($appDefaultDocument -ne "") {
    Write-Host "   -Setting Default Document:"$appDefaultDocument"..."
	Add-WebConfiguration $DefaultDocumenentfilter $appNamePath -atIndex 0 -Value @{value=$appDefaultDocument}
}

Set-WebConfigurationProperty -filter /system.WebServer/security/authentication/AnonymousAuthentication -name enabled -value $appEnableAnonymousAuthentication -PSPath $appNamePath

Nota

Para poder ejecutar scripts; es necesario autorizar a PowerShell 😉

Set-ExecutionPolicy Unrestricted
Anuncios
Esta entrada fue publicada en IIS, PowerShell, Sistemas y etiquetada , , , . Guarda el enlace permanente.

Una respuesta a PowerShell y Administración de IIS

  1. Pingback: Rasberry Pi y Windows 10 IOT | Pensando bajo la lluvia

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s