Remote-IIS-App-Pool über die Befehlszeile wiederherstellen?

26

Ist es möglich, einen IIS7-App-Pool über die Befehlszeile auf einem anderen Computer zu recyceln?

Ich habe APPCMD ( appcmd recycle apppool my-app-pool) gefunden, aber es funktioniert nur auf dem Host, auf dem es ausgeführt wird, AFAICT.

Ich habe ein Gerücht gehört, dass es eine Möglichkeit geben könnte, dies mit Powershell zu tun, aber ich weiß nichts darüber, und ich bin anscheinend nicht sehr gut darin, danach zu googeln.

Ich verwende Vista / Server 2008, wenn das wichtig ist.

EDIT: Ich habe etwas namens WinRM gefunden , von dem jemand behauptet, dass es APPCMD selbst ausführen kann, aber ich weiß noch nicht genau, wie.


quelle

Antworten:

28

Ken, wenn dies von CMD ausgeführt wird, könnten Sie es mit PSExec tun . Dies erfordert keine Installation auf dem Server, auf den Sie zugreifen möchten.

Kopieren Sie einfach den Inhalt der ZIP- Datei in Ihre System32-Datei (ohne die ELUA- oder DLL-Datei) des Computers, von dem Sie eine Remote-Verbindung herstellen möchten. Geben Sie
dann den CMD-
Typ ein
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

Wenn Sie sich mit einem Domänenadministratorkonto nicht in derselben Domäne befinden, müssen Sie Anmeldeinformationen für den Administratorzugriff eingeben. Für weitere Informationen geben Sie einfach psexec in eine Befehlszeile ohne Argumente ein.

Jeff
quelle
4
Der Speicherort von AppCmd.exe (% systemroot% \ system32 \ inetsrv) ist nicht automatisch Teil des PATH. Sie können es entweder Ihrem Pfad hinzufügen oder appcmd mit folgendem Befehl ausführen: "% systemroot% \ system32 \ inetsrv \ AppCmd.exe"
ashtonium
1
Sie zitieren den Remote-Befehl für PsExec nicht. Sie senden den Befehlsnamen, gefolgt von den durch Leerzeichen getrennten Argumenten. Das Kommando sollte also lauten:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G
6

Um dies von PowerShell aus zu tun, müssen Sie entweder PowerShell-Remoting oder WMI verwenden.

Die Verwendung des PowerShell-Cmdlets Invoke-WMIMethod ist eigentlich sehr einfach, aber Sie müssen Folgendes angeben -Authentication PacketPrivacy ... und wenn Sie andere Anmeldeinformationen angeben müssen, können Sie dies mit dem Parameter tun -Credential (Get-Credential)... hier ein Beispiel:

$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

Ich habe eine nette Funktion geschrieben, um das alles zusammenzufassen: http://poshcode.org/2466

Jaykul
quelle
3
Möglicherweise müssen Sie "IIS 6-WMI-Kompatibilität" auf IIS7 aktivieren, damit der Namespace root \ MicrosoftIISv2 verfügbar ist. forums.iis.net/t/1158882.aspx
Brian Low
3

Wenn die Befehlszeile Ihre Wahl ist, scheint PsExec die Lösung zu sein, aber für geschäftskritische Aufgaben würde ich es nicht empfehlen. Der Grund ist folgender: PsExec hat Probleme mit mehreren Läufen.

Ich bevorzuge es, API für solche Zwecke zu verwenden.

  1. WMI erledigt den Job wie hier beschrieben (meine Lieblingslösung).
  2. Alternativ können Sie die ServerManager- API verwenden. Sie können Anwendungspools auf einem Remotecomputer verwalten , wenn Sie Ihren Code mit den entsprechenden Anmeldeinformationen ausführen.
Eugene
quelle
2

Ähnlich wie bei der Antwort von @ Jeff wäre es mit Powershell-Remoting:

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

Dann in der interaktiven Sitzung, dann:

appcmd recycle apppool my-app-pool

um den App-Pool neu zu starten.

Factor Mystic
quelle
0

Bereiten Sie AppPool in PowerShell auf

In diesem Beispiel: 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-es
quelle