Riciclare il pool di app IIS remoto dalla riga di comando?


26

È possibile riciclare un pool di app IIS7 dalla riga di comando, su una macchina diversa?

Ho trovato APPCMD ( appcmd recycle apppool my-app-pool), ma funziona solo sull'host su cui è in esecuzione, AFAICT.

Ho sentito una voce che potrebbe esserci un modo per farlo con Powershell, ma non ne so nulla e apparentemente non sono molto bravo a cercare su Google.

Sto usando Vista / Server 2008, se è importante.

EDIT: Ho trovato qualcosa chiamato WinRM che qualcuno sostiene sia in grado di eseguire APPCMD stesso, ma non sono ancora sicuro di come.

Risposte:


28

Ken, se questo viene eseguito da CMD, puoi farlo con PSExec . Ciò non richiede installazione sul server a cui si desidera accedere.

Copia semplicemente il contenuto dello zip nel tuo file System32 (non includere il file ELUA o DLL) del computer da cui vuoi remotare.
Quindi immettere il
tipo CMD
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Se non ti trovi nello stesso dominio su un account amministratore di dominio, dovrai inserire le credenziali per l'accesso amministrativo. Per ulteriori informazioni, digitare semplicemente psexec in una riga di comando senza argomenti.


4
La posizione di AppCmd.exe (% systemroot% \ system32 \ inetsrv) non fa automaticamente parte del PERCORSO. Puoi aggiungerlo al tuo percorso o eseguire appcmd con: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium

1
Non citate il comando remoto per PsExec; si invia il nome del comando seguito dagli argomenti tutti separati da spazi. Quindi il comando dovrebbe essere:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G,

6

Per farlo in remoto da PowerShell è necessario utilizzare il telecomando PowerShell o utilizzare WMI.

In realtà è molto semplice utilizzare il cmdlet Invoke-WMIMethod PowerShell, ma è necessario specificare -Authentication PacketPrivacy ... e se è necessario specificare credenziali diverse, è possibile farlo con il parametro -Credential (Get-Credential)... ecco un esempio:

$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

Ho scritto una bella funzione per concludere tutto: http://poshcode.org/2466


3
Potrebbe essere necessario abilitare "Compatibilità WMI IIS 6" su IIS7 per rendere disponibile lo spazio dei nomi root \ MicrosoftIISv2. forums.iis.net/t/1158882.aspx
Brian Low,

3

Se la riga di comando è la tua scelta, PsExec sembra essere la soluzione, ma per le attività mission critical non lo consiglierei. Il motivo è il seguente: PsExec ha problemi con più esecuzioni.

Preferisco usare l'API per tali scopi.

  1. WMI farà il lavoro come descritto qui (la mia soluzione preferita).
  2. In alternativa è possibile utilizzare l' API ServerManager . Permette di gestire pool di applicazioni sul computer remoto se si esegue il codice con le credenziali corrispondenti.

2

Simile alla risposta di @ Jeff, con Powershell remoting sarebbe:

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

Quindi nella sessione interattiva, quindi:

appcmd recycle apppool my-app-pool

per riavviare il pool di app.


0

Riciclare AppPool in PowerShell

In questo esempio: MSExchangeSyncAppPool

$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.