通过 Powershell 在远程服务器上运行 IIS 命令

Pau*_*unt 6 iis powershell

我正在尝试使用 PowerShell 脚本检查远程服务器上是否存在 IIS 应用程序池。我正在运行的命令是:

test-path "IIS:\AppPools\DefaultAppPool"
Run Code Online (Sandbox Code Playgroud)

如果我直接在有问题的 IIS 服务器上运行此脚本,我会收到“True”的响应,因此这告诉我我在 PowerShell 中正确配置了 IIS 管理。但是,当我从远程服务器运行以下脚本时,我收到“False”响应

invoke-command -ComputerName IISSERVER -ScriptBlock { test-path "IIS:\AppPools\DefaultAppPool" }
Run Code Online (Sandbox Code Playgroud)

我知道 PowerShell 远程处理已正确配置,因为我可以运行以下命令并获取文件列表

invoke-command -ComputerName IISSERVER -ScriptBlock { get-childitems "c:\" }
Run Code Online (Sandbox Code Playgroud)

那么为什么我会得到关于应用程序池存在的错误响应呢?

小智 5

这是因为远程 PowerShell 会话不包括“IIS:”PowerShell 驱动器。(尝试在本地运行“Get-PSDrive”,然后通过 Invoke-Command 来查看差异)。

当您在 IIS 服务器上本地运行 Powershell 时,WebAdministration PS 管理单元几乎肯定会添加“IIS:”驱动器,因为您正在从特定于 IIS 的特殊快捷方式启动 PowerShell,或者因为本地 PowerShell 配置文件脚本正在运行并加载它。

通过将 Invoke-Command 更改为如下所示,将 WebAdministration 管理单元显式添加到远程会话(创建“IIS:”驱动器),您应该会得到您正在寻找的结果:

invoke-command -ComputerName IISSERVER -ScriptBlock { Add-PSSnapin WebAdministration; test-path "IIS:\AppPools\DefaultAppPool" }
Run Code Online (Sandbox Code Playgroud)