我正在尝试使用 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" }