Scripts de PowerShell para automatizar la configuración de Web Deploy

de Kristina Olson

La versión v2.1 de Web Deploy instala varios scripts de PowerShell que facilitan la configuración del servidor IIS para que los usuarios puedan publicarlo mediante Web Deploy. En esta página se muestra cómo usar estos scripts para crear un sitio de publicación predeterminado, habilitar la publicación para un sitio y un usuario nuevos o existentes, crear bases de datos SQL o MySQL de publicación o configurar reglas de delegación, todo ello mediante PowerShell.

Los scripts que usará son:

  • SetupSiteForPublish.ps1
  • CreateSqlDatabase.ps1
  • CreateMySqlDatabase.ps1
  • AddDelegationRules.ps1

Requisitos

  • El servidor debe tener un sistema operativo que viene con IIS7, lo que significa Windows Server 2008 o Windows Server 2008 R2. Debe ser administrador de la máquina.

  • Asegúrese de que se cumplen las condiciones siguientes:

    • PowerShell2 debe estar instalado (esto está integrado en Windows Server 2008 R2; para Windows Server 2008, puede obtener PowerShell2 como actualización desde aquí: https://www.catalog.update.microsoft.com/ScopedViewInline.aspx?updateid=0be83604-db27-4b99-976a-136a92bd579b. Es posible que se requiera un reinicio.
    • El rol Servidor web (IIS) debe estar habilitado en el Administrador del servidor.
    • El servicio de rol de Gestión Web de IIS ("Servicio de Gestión") debe estar habilitado en el Server Manager.
    • Para usar los scripts de base de datos de PowerShell, el servidor debe tener acceso a una base de datos SQL o MySQL. Los objetos de administración de SQL Server también deben instalarse para SQL.
    • Web Deploy debe instalarse con el componente Management Service Integration. (Para que esta opción aparezca en el instalador de Web Deploy, el servicio de administración web debe estar habilitado primero).

Instrucciones generales de PowerShell

  1. Inicie una ventana de comandos de PowerShell.

    Haga clic en el icono de PowerShell de la barra de tareas o haga clic en Inicio, escriba PowerShell y seleccione Windows PowerShell.
    Captura de pantalla de la barra de tareas de Windows que muestra el botón Inicio.
    (Icono azul)

  2. Asegúrese de que la directiva de ejecución permite ejecutar scripts.

    1. Escriba "Get-ExecutionPolicy". Si está Restringido (el predeterminado), debe restablecer a una configuración más permisiva, por ejemplo, escribiendo "Set-ExecutionPolicy AllSigned". La configuración AllSigned permitirá ejecutar scripts firmados, pero le solicitará en caso de que no sean de confianza.

    2. Para obtener más información sobre la configuración de la directiva de ejecución, consulte Uso del cmdlet Set-ExecutionPolicy.

  3. Cambie al directorio scripts de Web Deploy.

    1. Escriba cd '%programfiles%\IIS\Microsoft Web Deploy v2\Scripts' (pero reemplace %programfiles% con la ruta de acceso real, como C:\Program Files).

Use el script SetupSiteForPublish para crear un sitio web de publicación predeterminado (sin bases de datos)

Ejecute el script SetupSiteForPublish.ps1 sin argumentos:

Captura de pantalla de una consola de PowerShell con salida.

Qué hace esto:

El script crea un usuario y un sitio para la publicación que no es de administrador y guarda la información del perfil de publicación en un archivo del escritorio. Más concretamente, crea un sitio denominado WDeploySite con la raíz del sitio físico en %systemdrive%\inetpub\WDeploySite. El sitio tendrá un grupo de aplicaciones coincidente, WDeployAppPool y se asignará al puerto 8080 de forma predeterminada (o el siguiente puerto disponible si otro sitio usa 8080). El script también crea un usuario de Windows local no administrador llamado WDeploySiteuser y concede a ese usuario las ACL de control total del usuario en la carpeta WDeploySite y los permisos del administrador de IIS en el sitio. La información de configuración se guarda en el escritorio en un archivo denominado WDeploy.PublishSettings: WebMatrix (o potencialmente Visual Studio) puede consumir este archivo para publicarlo en el sitio. Este perfil no contiene ninguna información de publicación de base de datos en este momento.

Habilite la publicación de Web Deploy para cualquier sitio y usuario mediante el script SetupSiteForPublish:

Script: SetupSiteForPublish.ps1

Descripción: para un sitio y una cuenta de usuario especificados, permite que el usuario especificado publique en el sitio especificado. El script crea la cuenta de usuario, el sitio y el grupo de aplicaciones; establece las ACL de directorio y los permisos del Administrador de IIS para el sitio; y guarda la información de configuración en un archivo.

Parámetros:

Nombre Descripción Valor predeterminado Notas
NombreDelSitio Nombre del sitio. Si el sitio no existe, se creará. WDeploySite
sitePhysicalPath Ubicación de archivo físico para el contenido del sitio. Si el directorio no existe, se creará. %systemdrive%\inetpub\WDeploySite
siteAppPoolName Nombre del grupo de aplicaciones que se asociará al sitio. Si el grupo de aplicaciones no existe, se creará. WDeployAppPool Se recomienda dedicar un grupo de aplicaciones por sitio.
sitePort Puerto para las vinculaciones de sitio. Primer puerto del 8080-8200 que no está en uso por otro sitio. Es posible que se requiera una regla de firewall para abrir el puerto para el tráfico remoto.
deploymentUserName Nombre del usuario al que se va a conceder acceso al sitio. Si el usuario no existe, se creará un usuario que no sea administrador. WDeploySiteuser
contraseñaUsuarioImplementación Contraseña del usuario de implementación. Si no se especifica una contraseña, se generará automáticamente una y se guardará en el archivo de configuración. [generado automáticamente]
managedRunTimeVersion Si se especifica, intentará establecer la versión en tiempo de ejecución especificada para el grupo de aplicaciones. Si no se encuentra una versión en tiempo de ejecución coincidente, se usarán los valores predeterminados del grupo de aplicaciones. Valores predeterminados del grupo de aplicaciones Formato de ejemplo "v2.0" o "v4.0"
publishSettingSavePath Directorio existente donde se guardará el archivo de configuración. Escritorio del usuario actual Debe ser un directorio existente. Si el directorio especificado no existe, se producirá un error.
nombreArchivoConfiguraciónPublicación Nombre del archivo de configuración, incluida la extensión . WDeploy.PublishSettings Recuerde incluir la extensión. Si el archivo ya existe, la información del sitio en él se sobrescribirá.

Ejemplos:

Habilite la publicación de un usuario existente en un sitio existente (la contraseña no se guardará en el archivo de configuración):

.\SetupSiteForPublish.ps1 -siteName ExistingSite -deploymentUserName UserA -publishSettingSavePath C:\profiles -publishSettingFileName UserA.PublishSettings

Captura de pantalla de una consola de PowerShell con los resultados del scripting.

Habilite la publicación para un nuevo usuario en un nuevo sitio, con un nombre personalizado y una ubicación para el archivo de configuración de publicación:

.\SetupSiteForPublish.ps1 -siteName NewSite -sitePhysicalPath C:\inetpub\NewSiteRoot -siteAppPoolName NewSitePool -sitePort 81 -deploymentUserName NewSiteUser -deploymentUserPassword Passw0rd -publishSettingSavePath C:\profiles -publishSettingFileName NewSite.PublishSettings

Captura de pantalla de una consola de PowerShell con scripting y salida para la configuración de publicación.

El archivo PublishSettings también contiene la nueva contraseña de usuario. Tenga en cuenta que los campos de cadena de conexión están vacíos: se pueden rellenar manualmente o puede agregarlos al perfil mediante los scripts de generación de bases de datos:

<?xml version="1.0" encoding="utf-8"?>
<publishData>
  <publishProfile publishUrl="RWS-2008R2" msdeploySite="NewSite" destinationAppUrl="http://RWS-2008R2:81" mySQLDBConnectionString="" SQLServerDBConnectionString="" profileName="Default Settings" publishMethod="MSDeploy" userName="NewSiteUser" userPWD="Passw0rd" savePWD="True" />
</publishData>

Creación de una base de datos SQL para una cuenta de publicación mediante el script CreateSqlDatabase

Script: CreateSqlDatabase.ps1

Descripción: crea una base de datos, un inicio de sesión, un usuario de base de datos que tiene db_owner permisos para la base de datos y guarda la información de cadena de conexión correspondiente en un archivo de configuración.

Parámetros:

Nombre Descripción Valor predeterminado Notas
databaseName Nombre de la base de datos que se va a crear. wDeploySqldb
nombreDeUsuarioDeBaseDeDatos Nombre del usuario de la base de datos y credenciales de inicio de sesión. wdeploySqlUser Especifique un nuevo nombre de usuario cada vez, o puede terminar restableciendo la contraseña de inicio de sesión de un usuario y podrá invalidar las credenciales de conexión anteriores del usuario.
databaseUserPassword Contraseña para el usuario y el inicio de sesión de la base de datos. Si no se especifica ninguna contraseña, se generará automáticamente una. [generado automáticamente] En algunos casos, la contraseña generada automáticamente puede contener caracteres que provocan problemas con determinados clientes de publicación. Considere la posibilidad de modificar el script si usa el script para la creación automatizada de bases de datos.
databaseAdminUser Nombre de usuario del administrador de SQL Server (normalmente "sa"). OBLIGATORIO
databaseAdminPassword Contraseña de la cuenta de administrador de SQL Server. OBLIGATORIO
sqlServerInstanceName Ubicación del servidor SQL Server. .\SQLExpress

General

publishSettingSavePath Directorio existente donde se guardará el archivo de configuración. Escritorio del usuario actual Debe ser un directorio existente. Si el directorio especificado no existe, se producirá un error.
nombreArchivoConfiguraciónPublicación Nombre del archivo de configuración, incluida la extensión . WDeploy.PublishSettings Recuerde incluir la extensión. Si el archivo ya existe, la información del sitio en él se sobrescribirá.

Ejemplos:

Cree una base de datos con el usuario mediante los valores predeterminados (base de datos SQLExpress local):

.\CreateSqlDatabase.ps1

Captura de pantalla de una consola de PowerShell con scripting y resultados para crear una base de datos SQL.

Cree una base de datos y agregue la información de la cadena de conexión al archivo c:\profiles\UserA.PublishSettingsde configuración de publicación existente:

PS C:\Program Files\IIS\Microsoft Web Deploy V2\Scripts> .\CreateSqlDatabase.ps1 -databaseName UserADb -databaseUserName UserADbUser -databaseUserPassword Passw0rdA -databaseAdminUser sa -databaseAdminPassword Passw0rd -sqlServerInstanceName .\SQLExpress -publishSettingSavePath C:\profiles -publishSettingFileName UserA.PublishSettings

Captura de pantalla de una consola de PowerShell con scripting y salida conectada a un archivo de configuración de publicación ya existente.

Creación de una base de datos MySQL para una cuenta de publicación mediante el script CreateMySqlDatabase

Script: CreateMySqlDatabase.ps1

Descripción: crea una base de datos, un usuario de base de datos con todos los privilegios de la base de datos (en localhost) y guarda la información de la cadena de conexión en un archivo de configuración.

Parámetros:

Nombre Descripción Valor predeterminado Notas
databaseName Nombre de la base de datos que se va a crear. WDeployDb
nombreDeUsuarioDeBaseDeDatos Nombre del usuario de la base de datos. WDeployUser
databaseUserPassword Contraseña para el usuario y el inicio de sesión de la base de datos. Si no se especifica ninguna contraseña, se generará automáticamente una. [generado automáticamente] En algunos casos, la contraseña generada automáticamente puede contener caracteres que provocan problemas con determinados clientes de publicación. Considere la posibilidad de modificar el script si usa el script para la creación automatizada de bases de datos.
databaseAdminUser Nombre del administrador de la base de datos, normalmente "raíz". OBLIGATORIO Si no se proporciona, se le pedirá este parámetro.
contraseñaDelAdministradorDeBaseDeDatos Contraseña de la cuenta de administrador del servidor. OBLIGATORIO Se le pedirá un valor para este parámetro si no proporciona uno.
nombreDelHostDelServidor Ubicación del servidor MySQL localhost *ver nota debajo de la tabla

General:

publishSettingSavePath Directorio existente donde se guardará el archivo de configuración. Escritorio del usuario actual Debe ser un directorio existente. Si el directorio especificado no existe, se producirá un error.
nombreArchivoConfiguraciónPublicación Nombre del archivo de configuración, incluida la extensión . WDeploy.PublishSettings Recuerde incluir la extensión. Si el archivo ya existe, la información del sitio en él se sobrescribirá.

*Si especifica un valor que no sea localhost para serverHostName y no modifique los permisos para el usuario, es posible que el usuario no pueda acceder a su base de datos. De forma predeterminada, los permisos concedidos en este script proporcionan al usuario de la base de datos acceso desde la máquina local. Si el servidor de bases de datos no está hospedado en la misma máquina, se debe modificar la sección de concesión de permisos del script de PowerShell para conceder permisos más generales, como cambiar la siguiente línea de script para permitir el acceso desde cualquier máquina:

Línea de permisos de script predeterminada:

$createUserScript = "Grant all privileges on {0}.* to '{1}'@'localhost' identified by '{2}';"

Línea de permisos de script modificada:

$createUserScript = "Grant all privileges on {0}.* to '{1}'@'%' identified by '{2}';"

Ejemplos:

Cree una base de datos con el usuario con los valores predeterminados:

.\CreateMySqlDatabase.ps1

Captura de pantalla de una consola de PowerShell con scripting para crear una base de datos.

Cree una base de datos y agregue la información de la cadena de conexión al archivo c:\profiles\UserA.PublishSettingsde configuración de publicación existente:

.\CreateMySqlDatabase.ps1 -databaseName UserADb -databaseUsername UserADbUser -databaseUserPassword Passw0rd -databaseAdminUser root -databaseAdminPassword iis6!dfu -publishSettingSavePath C:\profiles -publishSettingFileName UserA.PublishSettings

Captura de pantalla de una consola de PowerShell con scripting y salida de conexión a la configuración de publicación existente.

Configurar reglas de delegación para el servidor mediante el script AddDelegationRules

Script: AddDelegationRules.ps1

Descripción: el instalador ejecuta automáticamente este script en el momento de la instalación durante una instalación completa, pero si no ha realizado una instalación completa o desea reparar las reglas en cualquier momento, puede volver a ejecutar este script AddDelegationRules.

Parámetros:

Nombre Descripción Valor predeterminado Notas
nombreDeUsuarioElevado Nombre de la cuenta de usuario a la que se concederá acceso de escritura al archivo applicationHost.config del servidor. Este usuario se usará como usuario de ejecución en appPoolPipeline, appPoolNetFx y createApp rules. WDeployUser Crea solo un usuario local de Windows y no funcionará si la configuración compartida está habilitada. La contraseña de esta cuenta de usuario se restablecerá si el script se ejecuta una segunda vez.
contraseña con privilegios elevados Se genera automáticamente si no se especifica. [generado automáticamente]
adminUsername Nombre de una cuenta de usuario administrador que se usará como usuario de ejecución en la regla recycleApp. WDeployAdmin Crea solo un usuario local de Windows y no funcionará si la configuración compartida está habilitada. La contraseña de esta cuenta de usuario se restablecerá si el script se ejecuta una segunda vez.
contraseña de administrador Se genera automáticamente si no se especifica [generado automáticamente]
ignorarErroresDeRestablecimientoDeContraseña Switch. Si elevated/adminUsername hace referencia a una cuenta existente, este modificador permite que el script restablezca la contraseña de la cuenta. [omitido: restablecimiento de contraseñas de usuario no permitidas] Restablecer una contraseña de usuario puede dar lugar a que el usuario pierda acceso a los datos. Este interruptor debe usarse con precaución. Para obtener más información, consulte https://windows.microsoft.com/windows-vista/What-are-the-risks-of-resetting-a-password. Tenga en cuenta también que la nueva contraseña de usuario no se almacena y no se puede recuperar más adelante.