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

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

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

test-path "IIS:\AppPools\DefaultAppPool"

如果我直接在相关 IIS 服务器上运行此脚本,我会得到“True”的响应,这说明我在 PowerShell 中正确配置了 IIS 管理。但是,当我从远程服务器运行以下脚本时,我得到的响应是“False”

invoke-command -ComputerName IISSERVER -ScriptBlock { test-path "IIS:\AppPools\DefaultAppPool" }

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

invoke-command -ComputerName IISSERVER -ScriptBlock { get-childitems "c:\" }

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

答案1

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

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

应该通过将 WebAdministration 管理单元明确添加到远程会话(创建“IIS:”驱动器),通过将 Invoke-Command 更改为如下所示,获得所需的结果:

invoke-command -ComputerName IISSERVER -ScriptBlock { Add-PSSnapin WebAdministration; test-path "IIS:\AppPools\DefaultAppPool" }

相关内容