Recycler le pool d'applications IIS distantes à partir de la ligne de commande?

26

Est-il possible de recycler un pool d'applications IIS7 à partir de la ligne de commande, sur une autre machine?

J'ai trouvé APPCMD ( appcmd recycle apppool my-app-pool), mais il ne fonctionne que sur l'hôte sur lequel il est exécuté, AFAICT.

J'ai entendu une rumeur selon laquelle il pourrait y avoir un moyen de le faire avec Powershell, mais je n'en sais rien, et je ne suis apparemment pas très bon pour le googler.

J'utilise Vista / Server 2008, si cela importe.

EDIT: J'ai trouvé quelque chose appelé WinRM qui, selon quelqu'un, est capable d'exécuter APPCMD lui-même, mais je ne sais pas encore exactement comment.


la source

Réponses:

28

Ken, si cela est exécuté à partir de CMD, vous pouvez le faire avec PSExec . Cela ne nécessite aucune installation sur le serveur auquel vous souhaitez accéder.

Copiez simplement le contenu du zip dans votre fichier System32 (n'incluez pas l'ELUA ou le fichier DLL) de l'ordinateur que vous souhaitez éloigner. Entrez
ensuite le type CMD

Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Si vous n'êtes pas sur le même domaine sur un compte d'administrateur de domaine, vous devrez entrer les informations d'identification pour l'accès administratif. Pour plus d'informations, tapez simplement psexec dans une ligne de commande sans arguments.

Jeff
la source
4
L'emplacement AppCmd.exe (% systemroot% \ system32 \ inetsrv) ne fait pas automatiquement partie du chemin d'accès. Vous pouvez soit l'ajouter à votre chemin, soit exécuter appcmd avec: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium
1
Vous ne citez pas la commande à distance pour PsExec; vous envoyez le nom de la commande suivi des arguments tous séparés par des espaces. Donc, la commande devrait être:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G
6

Pour le faire à distance à partir de PowerShell, vous devez utiliser la communication à distance PowerShell ou utiliser WMI.

C'est en fait très simple à l'aide de l'applet de commande Invoke-WMIMethod PowerShell, mais vous devez spécifier -Authentication PacketPrivacy ... et si vous devez spécifier des informations d'identification différentes, vous pouvez le faire avec le paramètre -Credential (Get-Credential)... voici un exemple:

$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

J'ai écrit une belle fonction pour récapituler tout cela: http://poshcode.org/2466

Jaykul
la source
3
Vous devrez peut-être activer la «compatibilité IIS 6 WMI» sur IIS7 pour que l'espace de noms root \ MicrosoftIISv2 soit disponible. forums.iis.net/t/1158882.aspx
Brian Low
3

Si la ligne de commande est votre choix, PsExec semble être la solution, mais pour les tâches critiques, je ne le recommanderais pas. La raison est la suivante: PsExec a des problèmes avec plusieurs exécutions.

Je préfère utiliser l'API à de telles fins.

  1. WMI fera le travail tel qu'il est décrit ici (ma solution préférée).
  2. Vous pouvez également utiliser l' API ServerManager . Il permet de gérer les pools d'applications sur une machine distante si vous exécutez votre code avec les informations d'identification correspondantes.
Eugene
la source
2

Semblable à la réponse de @ Jeff, avec Powershell à distance, ce serait:

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

Puis dans la session interactive, puis:

appcmd recycle apppool my-app-pool

pour redémarrer le pool d'applications.

Facteur mystique
la source
0

Recyclez AppPool dans PowerShell

Dans cet exemple: 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
la source