Reciclar grupo de aplicaciones IIS remotas desde la línea de comandos

26

¿Es posible reciclar un grupo de aplicaciones IIS7 desde la línea de comandos, en una máquina diferente?

Encontré APPCMD ( appcmd recycle apppool my-app-pool), pero solo funciona en el host en el que se ejecuta, AFAICT.

Escuché un rumor de que podría haber una manera de hacerlo con Powershell, pero no sé nada al respecto, y aparentemente no soy muy bueno para buscarlo en Google.

Estoy usando Vista / Server 2008, si eso importa.

EDITAR: Encontré algo llamado WinRM que alguien dice que es capaz de ejecutar APPCMD, pero aún no estoy seguro de cómo.


fuente

Respuestas:

28

Ken, si esto se ejecuta desde CMD, puedes hacerlo con PSExec . Esto no requiere instalación en el servidor al que desea acceder.

Simplemente copie el contenido del archivo zip a su archivo System32 (no incluya el ELUA o el archivo DLL) de la computadora de la que desea alejarse.
Luego ingrese el
tipo CMD
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Si no está en el mismo dominio en una cuenta de administrador de dominio, deberá ingresar las credenciales para el acceso administrativo. Para obtener más información, simplemente escriba psexec en una línea de comando sin argumentos.

Jeff
fuente
44
La ubicación de AppCmd.exe (% systemroot% \ system32 \ inetsrv) no forma parte de la RUTA automáticamente. Puede agregarlo a su ruta o ejecutar appcmd con: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium
1
No cita el comando remoto para PsExec; envía el nombre del comando seguido de los argumentos, todos separados por espacios. Entonces el comando debería ser:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G
6

Para hacerlo de forma remota desde PowerShell, debe usar la comunicación remota de PowerShell o WMI.

En realidad, es muy simple usar el cmdlet Invoke-WMIMethod PowerShell, pero debe especificar -Authentication PacketPrivacy ... y si necesita especificar diferentes credenciales, puede hacerlo con el parámetro -Credential (Get-Credential)... aquí hay un ejemplo:

$pc = "serverName"

## List the app pools, note the __RELPATH of the one you want to kill:
Get-WMIObject IISApplicationPool 
              -Computer $pc 
              -Namespace root\MicrosoftIISv2 
              -Authentication PacketPrivacy 

## Recycle a specific one:
$Name = "W3SVC/APPPOOLS/ASP.NET v4.0 Classic"  ## This is the Name from above
$Path = "IISApplicationPool.Name='$Name'"      ## This is the __RELPATH

Invoke-WMIMethod Recycle 
                 -Path $Path 
                 -Computer $pc 
                 -Namespace root\MicrosoftIISv2 
                 -Authentication PacketPrivacy

Escribí una buena función para terminar todo eso: http://poshcode.org/2466

Jaykul
fuente
3
Es posible que deba habilitar "Compatibilidad con WIS IIS 6" en IIS7 para que el espacio de nombres raíz \ MicrosoftIISv2 esté disponible. forums.iis.net/t/1158882.aspx
Brian Low el
3

Si la línea de comando es su elección, PsExec parece ser la solución, pero para tareas de misión crítica no lo recomendaría. La razón es la siguiente: PsExec tiene problemas con varias ejecuciones.

Prefiero usar API para tales fines.

  1. WMI hará el trabajo como se describe aquí (mi solución favorita).
  2. Alternativamente, puede usar la API ServerManager . Permite administrar grupos de aplicaciones en máquinas remotas si ejecuta su código con las credenciales correspondientes.
Eugene
fuente
2

Similar a la respuesta de @ Jeff, con Powershell remoto sería:

Enter-PSSession -ComputerName <your server> -Credential <username, or (Get-Credential)>

Luego, en la sesión interactiva, luego:

appcmd recycle apppool my-app-pool

para reiniciar el grupo de aplicaciones.

Factor místico
fuente
0

Reciclar AppPool en PowerShell

En este ejemplo: MSExchangeSyncAppPool

$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()
uz-it
fuente