Compartir a través de


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 incluya IIS7; es decir, Windows Server 2008 o Windows Server 2008 R2. Debe ser administrador de la máquina.

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

    • 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. Puede ser necesario reiniciar.
    • El rol Servidor web (IIS) debe estar habilitado en el Administrador del servidor.
    • El servicio de rol Servicio de administración web de IIS ("Servicio de administración") debe estar habilitado en el Administrador del servidor
    • Para usar los scripts de la 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 Integración del servicio de administración. (Para que esta opción aparezca en el instalador de Web Deploy, el servicio de administración web debe habilitarse primero).

Instrucciones generales de PowerShell

  1. Abra la 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 es Restringido (el valor predeterminado), debe restablecer a una configuración más permisiva, como al escribir "Set-ExecutionPolicy AllSigned". La configuración AllSigned permitirá ejecutar scripts firmados, pero se le solicitará en caso de que no sean de confianza

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

  3. Cambie al directorio de scripts de Web Deploy.

    1. Escriba cd '%programfiles%\IIS\Microsoft Web Deploy v2\Scripts' (pero reemplace por %programfiles% 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.

Para qué sirve:

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. En concreto, 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
siteName 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 los enlaces del sitio. Primer puerto entre 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
deploymentUserPassword Contraseña del usuario de implementación. Si no se especifica una contraseña, se generará una automáticamente y se guardará en el archivo de configuración. [generada 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.
publishSettingFileName Nombre del archivo de configuración, incluida la extensión. WDeploy.PublishSettings Recuerde incluir la extensión. Si el archivo ya existe, se sobrescribirá la información del sitio en él.

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 con permisos db_owner 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 nueva base de datos que se va a crear. wDeploySqldb
databaseUserName Nombre del usuario y el inicio de sesión de la base de datos. wdeploySqlUser Especifique un nuevo usuario por vez, o puede acabar restableciendo la contraseña de inicio de sesión de un usuario e invalidando las credenciales de conexión anteriores del usuario.
databaseUserPassword Contraseña para el usuario de la base de datos y el inicio de sesión. Si no se especifica ninguna contraseña, se generará una automáticamente. [generada 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 de 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.
publishSettingFileName Nombre del archivo de configuración, incluida la extensión. WDeploy.PublishSettings Recuerde incluir la extensión. Si el archivo ya existe, se sobrescribirá la información del sitio en él.

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 salida para crear una base de datos S Q L.

Cree una base de datos y agregue la información de la cadena de conexión al archivo c:\profiles\UserA.PublishSettings de 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 con conexión al archivo de configuración de publicación 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 nueva base de datos que se va a crear. WDeployDb
databaseUserName Nombre del usuario de la base de datos. WDeployUser
databaseUserPassword Contraseña para el usuario de la base de datos y el inicio de sesión. Si no se especifica ninguna contraseña, se generará una automáticamente. [generada 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
databaseAdminPassword Contraseña de la cuenta de administrador del servidor. OBLIGATORIO Se le pedirá un valor para este parámetro si no proporciona uno.
serverHostName Ubicación de servidor MySQL localhost *vea la nota bajo 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.
publishSettingFileName Nombre del archivo de configuración, incluida la extensión. WDeploy.PublishSettings Recuerde incluir la extensión. Si el archivo ya existe, se sobrescribirá la información del sitio en él.

*Si especifica un valor que no sea localhost para serverHostName y no modifique los permisos para el usuario, ya que 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 del 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.PublishSettings de 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 configuració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
elevatedUsername 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 las reglas appPoolPipeline, appPoolNetFx y createApp. 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.
elevatedPassword Se genera automáticamente si no se especifica. [generada 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.
adminPassword Se genera automáticamente si no se especifica [generada automáticamente]
ignorePasswordResetErrors Modificador. 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 permitido] El restablecimiento de una contraseña de usuario puede dar lugar a que el usuario pierda acceso a los datos. Este modificador debe usarse con precaución. Para obtener más información, vea 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.