从命令行回收远程IIS应用程序池?


26

是否可以从命令行在另一台计算机上回收IIS7应用程序池?

我找到了APPCMD(appcmd recycle apppool my-app-pool),但它只能在运行它的主机AFAICT上运行。

我听说有一个谣言可能使用Powershell来实现,但是对此我一无所知,而且我显然不太擅长使用它。

如果有的话,我正在使用Vista / Server 2008。

编辑:我发现有人称WinRM本身可以运行APPCMD,但我不确定具体如何。

Answers:


28

肯,如果这是从CMD运行的,则可以使用PSExec来完成。这不需要在要访问的服务器上进行安装。

只需将zip的内容复制到要从其进行远程复制的计算机的System32文件(不包括ELUA或DLL文件)中。
然后输入CMD
类型
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

如果您不在域管理员帐户的同一域上,则需要输入凭据以进行管理访问。有关更多信息,只需在不带参数的命令行中键入psexec。


4
AppCmd.exe的位置(%systemroot%\ system32 \ inetsrv)不自动包含在PATH中。您可以将其添加到路径或使用以下命令运行appcmd:“%systemroot%\ system32 \ inetsrv \ AppCmd.exe”
ashtonium 2013年

1
您没有引用PsExec的远程命令;您发送命令名称,后跟参数,所有参数之间均用空格分隔。因此命令应该是:Psexec \\computer c:\windows\system32\inetsrv\appcmd.exe" recycle apppool AppPoolName
Carl G

6

要从PowerShell远程进行操作,您需要使用PowerShell远程处理或使用WMI。

使用Invoke-WMIMethod PowerShell cmdlet实际上非常简单,但是您必须指定-Authentication PacketPrivacy ...,如果需要指定其他凭据,则可以使用参数来完成此操作-Credential (Get-Credential)……这是一个示例:

$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

我写了一个很好的函数来包装所有内容:http : //poshcode.org/2466


3
您可能需要在IIS7上启用“ IIS 6 WMI兼容性”,以使root \ MicrosoftIISv2命名空间可用。forums.iis.net/t/1158882.aspx
Brian Low

3

如果您选择命令行,PsExec似乎是解决方案,但是对于关键任务,我不建议这样做。原因如下:PsExec 多次运行存在问题

我更喜欢将API用于此类目的。

  1. WMI将按此处所述完成我的工作(我最喜欢的解决方案)。
  2. 或者,您可以使用ServerManager API。如果您使用相应的凭据运行代码,则它允许在远程计算机上管理应用程序池。

2

与@Jeff的答案类似,通过Powershell进行远程处理将是:

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

然后在交互式会话中,然后:

appcmd recycle apppool my-app-pool

重新启动应用程序池。


0

在PowerShell中回收AppPool

在此的示例:MSExchangeSyncAppPool

$appPool = Get-WmiObject -Authentication PacketPrivacy -Impersonation Impersonate -ComputerName (hostname) -namespace "root/MicrosoftIISv2" -class IIsApplicationPool | Where-Object {$_.Name -eq "W3SVC/AppPools/MSExchangeSyncAppPool" }
$appPool.Recycle()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.