Tengo una secuencia de comandos de PowerShell que configura el sitio web y la configuración de la aplicación web en IIS. Así que uso los cmdlets en la administración web complemento. Pero esta secuencia de comandos debe ejecutarse en Windows 2008, Windows 7 y Windows 2008 R2. Y necesito que funcione con un mínimo esfuerzo por parte del usuario.PowerShell: cargue la administración web en la secuencia de comandos ps1 en IIS 7 e IIS 7.5
El problema es que Windows 7 y Windows 2008 R2 usan IIS 7.5 que viene con la administración web instalada como módulo. En Windows 2008 hemos instalado el proveedor de PowerShell de IIS 7, que se instala WebAdministration como un complemento en.
Así incluyendo import-module WebAdministration en el guión hace saltar en IIS 7, pero funciona bien en IIS 7.5 e incluyendo Agregar- pssnapin WebAdministration explota en IIS 7.5 pero funciona bien en IIS 7.
Por lo tanto, nuestra solución consiste en hacer que los administradores carguen WebAdministration manualmente con el comando apropiado para el entorno antes de ejecutar el script. Pero esto no es óptimo, ya que es fácil olvidar qué comando funciona en qué entorno. Podríamos crear dos scripts diferentes, pero eso crea un problema de mantenimiento para el desarrollo.
¿Alguien ha resuelto este problema? ¿Alguien sabe cómo verificar el entorno y luego llamar al cmdlet apropiado desde el script PS?
--- RESPUESTA (por mi situación) ----
La solución es una combinación de código y la consola preconfigurado. El proveedor IIS 7 PoSH incluye un acceso directo de escritorio que inicia una consola PoSH con la administración web cargada. Eso combinado con la siguiente función hace que mi script se ejecute como un hechizo en los tres sistemas.
Function Load-WebAdmin {
$webAdminModule = get-module -ListAvailable
| ? { $_.Name -eq "webadministration" }
If ($webAdminModule -ne $null) {
import-module WebAdministration
}
}
El único problema con esto es que aunque ** import-module ** se puede ejecutar varias veces sin generar un error aunque el módulo ya esté cargado, ** add-pssnapin ** generará un error si el snapin es ya cargado Gracias por la inspiración de una solución viable. –
Eso podría solucionarse con una segunda llamada a ps-snapin para ver si ya está cargada en la sesión actual – GrayWizardx
1. ¿Por qué su segundo bloque usa 'Seleccionar' en lugar de' Donde'? 2. '$ hasSnapin' parece un nombre mal elegido. O bien debería haber algo que convierte la lista de nuevo en un booleano o el nombre debería tener 'has' en su comienzo. – jpmc26