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

是否有可能从命令行在不同的机器上回收IIS7应用程序池?

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

我听说有传闻说有可能是用Powershell做的,但我对此一无所知,而且我显然不是很擅长使用它。

如果有问题,我正在使用Vista / Server 2008。

编辑:我发现了一个叫WinRM的东西,有人声称是能够运行APPCMD本身,但我不确定如何,但。

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

只需将zip文件的内容复制到远程FROM的计算机的System32文件(不包括ELUA或DLL文件)即可。
然后inputCMD
types
Psexec \\{Computer Name of ISS7 Server} %systemroot%\System32\inetsrv\appcmd recycle apppool my-app-pool

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

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

如果命令行是你的select, PsExec似乎是解决scheme,但对于任务关键任务,我不会推荐它。 原因如下:PsExec有多次运行的问题 。

我更喜欢使用API​​来达到这个目的。

  1. WMI将按照这里描述的方式完成这项工作(我最喜欢的解决scheme)。
  2. 或者,您可以使用ServerManager API。 它允许pipe理远程机器上的应用程序池,如果你使用相应的证书运行你的代码。

类似于@杰夫的答案,Powershell远程处理将是:

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

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

appcmd recycle apppool my-app-pool

重新启动应用程序池。

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