Reciclar pool de aplicativos IIS remoto na linha de comando?

26

É possível reciclar um pool de aplicativos do IIS7 na linha de comando, em uma máquina diferente?

Encontrei APPCMD ( appcmd recycle apppool my-app-pool), mas ele só opera no host em que é executado, o AFAICT.

Ouvi um boato de que poderia haver uma maneira de fazer isso com o Powershell, mas não sei nada sobre isso, e aparentemente não sou muito bom em pesquisar no Google.

Estou usando o Vista / Server 2008, se isso importa.

EDIT: Encontrei algo chamado WinRM que alguém afirma ser capaz de executar o APPCMD, mas ainda não sei exatamente como.


fonte

Respostas:

28

Ken, se isso for executado no CMD, você poderá fazê-lo com o PSExec . Isso não requer instalação no servidor que você deseja acessar.

Simplesmente copie o conteúdo do zip para o seu arquivo System32 (não inclua o arquivo ELUA ou DLL) do computador do qual você deseja remotamente.
Em seguida, digite o
tipo de CMD
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Se você não estiver no mesmo domínio em uma conta de administrador de domínio, precisará inserir credenciais para acesso administrativo. Para mais informações, basta digitar psexec em uma linha de comando sem argumentos.

Jeff
fonte
4
O local do AppCmd.exe (% systemroot% \ system32 \ inetsrv) não faz parte do PATH automaticamente. Você pode adicioná-lo ao seu caminho ou executar appcmd com: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium
1
Você não cita o comando remoto para o PsExec; você envia o nome do comando seguido pelos argumentos todos separados por espaços. Portanto, o comando deve ser: #Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G
6

Para fazer isso remotamente no PowerShell, você precisa usar o PowerShell remoting ou usar o WMI.

Na verdade, é muito simples usar o cmdlet Invoke-WMIMethod PowerShell, mas você precisa especificar -Authentication PacketPrivacy ... e se precisar especificar credenciais diferentes, você pode fazer isso com o parâmetro -Credential (Get-Credential)... aqui está um exemplo:

$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

Eu escrevi uma boa função para encerrar tudo isso: http://poshcode.org/2466

Jaykul
fonte
3
Pode ser necessário habilitar "IIS 6 WMI Compatibility" no IIS7 para que o espaço para nome raiz \ MicrosoftIISv2 esteja disponível. forums.iis.net/t/1158882.aspx
Brian Low
3

Se a linha de comando é a sua escolha, o PsExec parece ser a solução, mas para tarefas críticas, eu não recomendaria. O motivo é o seguinte: O PsExec tem problemas com várias execuções.

Eu prefiro usar a API para esses fins.

  1. O WMI fará o trabalho conforme descrito aqui (minha solução favorita).
  2. Como alternativa, você pode usar a API do ServerManager . Ele permite gerenciar pools de aplicativos na máquina remota se você executar seu código com as credenciais correspondentes.
Eugene
fonte
2

Semelhante à resposta de @ Jeff, com o Powershell remoting seria:

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

Em seguida, na sessão interativa, então:

appcmd recycle apppool my-app-pool

para reiniciar o pool de aplicativos.

Fator Místico
fonte
0

Reciclar o AppPool no PowerShell

Neste exemplo: 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
fonte