Odzyskać zdalną pulę aplikacji IIS z wiersza polecenia?

26

Czy jest możliwe ponowne przetworzenie puli aplikacji IIS7 z wiersza polecenia na innym komputerze?

Znalazłem APPCMD ( appcmd recycle apppool my-app-pool), ale działa tylko na hoście, na którym jest uruchomiony, AFAICT.

Słyszałem pogłoski, że może być sposób, aby to zrobić za pomocą Powershell, ale nic o tym nie wiem i najwyraźniej nie jestem zbyt dobry w googlowaniu.

Używam Vista / Server 2008, jeśli to ma znaczenie.

EDYCJA: Znalazłem coś o nazwie WinRM, o którym ktoś twierdzi, że może sam uruchomić APPCMD, ale nie jestem jeszcze pewien, jak to zrobić.


źródło

Odpowiedzi:

28

Ken, jeśli jest uruchamiany z CMD, możesz to zrobić za pomocą PSExec . Nie wymaga to instalacji na serwerze, do którego chcesz uzyskać dostęp.

Po prostu skopiuj zawartość zip do pliku System32 (nie dołączaj pliku ELUA ani DLL) komputera, z którego chcesz zdalnie korzystać.
Następnie wpisz
typ CMD
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Jeśli nie jesteś w tej samej domenie na koncie administratora domeny, musisz wprowadzić poświadczenia dostępu administracyjnego. Aby uzyskać więcej informacji, po prostu wpisz psexec w wierszu polecenia bez argumentów.

Jeff
źródło
4
Lokalizacja AppCmd.exe (% systemroot% \ system32 \ inetsrv) nie jest automatycznie częścią ŚCIEŻKI. Możesz dodać go do swojej ścieżki lub uruchomić appcmd za pomocą: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium
1
Nie cytujesz polecenia zdalnego dla PsExec; wysyłasz nazwę polecenia wraz z argumentami oddzielonymi spacjami. Tak więc polecenie powinno brzmieć:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G
6

Aby to zrobić zdalnie z PowerShell, musisz albo użyć programu PowerShell, albo WMI.

W rzeczywistości jest to bardzo proste za pomocą polecenia cmdlet PowerShell Invoke-WMIMethod, ale musisz określić -Authentication PacketPrivacy ... a jeśli musisz podać inne poświadczenia, możesz to zrobić za pomocą parametru -Credential (Get-Credential)... oto przykład:

$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

Napisałem fajną funkcję do podsumowania tego wszystkiego: http://poshcode.org/2466

Jaykul
źródło
3
Może być konieczne włączenie „Zgodności IIMI 6 WMI” w IIS7, aby przestrzeń nazw root \ MicrosoftIISv2 była dostępna. forums.iis.net/t/1158882.aspx
Brian Low
3

Jeśli wybierasz wiersz poleceń, PsExec wydaje się rozwiązaniem, ale w przypadku zadań o kluczowym znaczeniu nie poleciłbym tego. Powód jest następujący: PsExec ma problemy z wieloma uruchomieniami.

Wolę używać API do takich celów.

  1. WMI wykona zadanie zgodnie z opisem tutaj (moje ulubione rozwiązanie).
  2. Alternatywnie możesz użyć API ServerManager . Pozwala zarządzać pulami aplikacji na zdalnym komputerze, jeśli uruchomisz kod z odpowiednimi poświadczeniami.
Eugene
źródło
2

Podobnie do odpowiedzi @ Jeffa, z Powershell zdalnie:

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

Następnie w sesji interaktywnej, a następnie:

appcmd recycle apppool my-app-pool

aby ponownie uruchomić pulę aplikacji.

Factor Mystic
źródło
0

Odtwórz AppPool w PowerShell

W tym przykładzie: 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
źródło