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

27 iis powershell iis-7 command-line-interface winrm

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

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

我听说有一种方法可以用 Powershell 做到这一点,但我对此一无所知,而且我显然不擅长谷歌搜索。

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

编辑:我发现了一个叫做WinRM 的东西,有人声称它可以自己运行 APPCMD,但我还不确定具体是如何运行的。

Jef*_*eff 28

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

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

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

  • AppCmd.exe 位置 (%systemroot%\system32\inetsrv\) 自动不是 PATH 的一部分。您可以将其添加到您的路径中或使用以下命令运行 appcmd:“%systemroot%\system32\inetsrv\AppCmd.exe” (4认同)

Jay*_*kul 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
Run Code Online (Sandbox Code Playgroud)

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

  • 您可能需要在 IIS7 上启用“IIS 6 WMI 兼容性”才能使 root\MicrosoftIISv2 命名空间可用。http://forums.iis.net/t/1158882.aspx (3认同)