web-dev-qa-db-fra.com

Recyclez à distance IIS pool d'applications à partir de la ligne de commande?

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 googler pour cela.

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

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

26
Ken

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 DLL) de l'ordinateur à partir duquel vous souhaitez vous éloigner).
Puis entrez CMD
type
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.

28
Jeff

Pour le faire à distance à partir de PowerShell, vous devez soit utiliser la communication à distance PowerShell, soit 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 fonction Nice pour envelopper tout cela: http://poshcode.org/2466

6
Jaykul

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 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. Alternativement, vous pouvez utiliser ServerManager API. Il permet de gérer les pools d'applications sur machine distante si vous exécutez votre code avec les informations d'identification correspondantes.
3
Eugene

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.

2
Factor Mystic

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()
0
uz-it