【发布时间】:2016-01-21 17:17:38
【问题描述】:
我正在尝试构建一个 ASP.Net、c# 应用程序,以通过 Web 界面为分布式管理员组公开一些与 IIS 管理相关的活动。
我正在使用 System.Management.Automation V3.0 库来包装 power shell 命令。作为第一步,我想通过调用 Get-WebApplication 命令列出当前在本地 IIS 上启动并运行的所有 Web 应用程序。 这就是我面临的问题。方法调用既不抛出任何异常也不返回结果。有谁知道这个问题的根本原因?请分享您使用 System.Management.Automation.dll 构建此类界面的经验。
var shell = PowerShell.Create();
shell.Commands.AddScript("Get-WebApplication | Out-String");
try
{
var results = shell.Invoke();
if (results.Count > 0)
{
var builder = new StringBuilder();
foreach (var psObject in results)
{
builder.Append(psObject.BaseObject.ToString() + "\r\n");
}
}
}
catch(Exception ex)
{
throw;
}
PS:Get-Service 代替 Get-WebApplication 可以通过返回机器上可用的服务列表来完全正常工作。
【问题讨论】:
-
空结果可以是有效结果。那么,您在本地服务器上有任何 Web 应用程序吗?你检查
shell.Streams.Error的内容了吗? -
是的,本地服务器上的应用程序很少。感谢您指向 Streams.Error 属性。我发现以下异常消息检索具有 CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(来自 HRESULT 的异常:0x80040154(REGDB_E_CLASSNOTREG)) .
-
此 cmdlet 是否在 PowerShell 控制台中工作? x32 和 x64?
-
它在 x64 中工作正常,但在 x32 中给出错误消息。错误信息与我在代码中收到的相同。
-
你的应用是 x32 的?
标签: powershell automation