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

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

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

我发现了 APPCMD(appcmd recycle apppool my-app-pool),但据我所知,它只能在运行它的主机上运行。

我听到传言说可能有一种方法可以使用 Powershell 来实现这一点,但我对此一无所知,而且我显然不太擅长用 Google 搜索它。

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

编辑:我发现了一个叫做温控器有人声称它可以运行 APPCMD 本身,但我还不清楚具体如何运行。

答案1

Ken,如果这是从 CMD 运行的,你可以这样做执行程序. 这不需要在您想要访问的服务器上进行任何安装。

只需复制压缩到您想要远程控制的计算机的 System32 文件(不包括 ELUA 或 DLL 文件)。
然后输入CMD
类型
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

如果您不在同一个域的域管理员帐户上,则需要输入管理员访问权限的凭据。有关更多信息,只需在命令行中键入 psexec 而不输入任何参数即可。

答案2

要从 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

如果你选择命令行,执行程序似乎是解决方案,但对于关键任务,我不推荐它。原因如下:PsExec 有问题多次运行。

我更喜欢使用 API 来实现此类目的。

  1. WMI 将按照描述的方式完成工作这里(我最喜欢的解决方案)。
  2. 或者你可以使用服务器管理器API。它允许管理偏僻的如果您使用相应的凭据运行代码,则机器。

答案4

在 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()

相关内容