我正在尝试使用 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)
| 归档时间: |
|
| 查看次数: |
16681 次 |
| 最近记录: |