【问题标题】:Powershell in C# Return Command OutputC# 中的 Powershell 返回命令输出
【发布时间】:2011-06-04 23:36:30
【问题描述】:

我不熟悉将 C# 和 Powershell 结合在一起,但我希望创建一个在后端利用 Powershell 的网页。我意识到我正在做的事情只能用 C# 来完成,但想为其他应用程序解决这个问题。

本质上,我从 Web 表单中获取新 Web 应用程序的名称,并获取经过身份验证的用户的用户名以进行物理路径映射。

我的 Powershell 代码工作正常(即使直接从 Pipeline.Commands[0] 复制它),但当我运行它时它似乎没有做任何事情。如果我强制一个,我会在结果变量中得到参数错误(例如:使 -physicalpath 成为不存在的路径),但是在所有参数正确的情况下,变量结果只包含一个空白项。

我看到许多与此类似的问题,但没有看到明确的答案。

这听起来像是 C# 或 IIS Powershell 模块问题吗?任何想法如何从我的命令返回更多信息?

protected void Button1_Click(object sender, System.EventArgs e)
{
  String username = getUser();
  String physicalPath = "S:\\WebSites\\" + username + "\\public_html\\" + TextBox1.Text; 

  // Create Powershell Runspace
  Runspace runspace = RunspaceFactory.CreateRunspace();

  runspace.Open();

  // Create pipeline and add commands
  Pipeline pipeline = runspace.CreatePipeline();
  pipeline.Commands.AddScript(
    "Import-Module WebAdministration; set-psdebug -trace 1; " +

    "New-WebApplication -Site MySite" +
    " -Name " + TextBox1.Text +
    " -PhysicalPath " + physicalPath +
    " -ApplicationPool WebSites -Verbose -force");

  pipeline.Commands.Add("Out-String");

  // Execute Script
  Collection<PSObject> results = new Collection<PSObject>();
  try
  {
    results = pipeline.Invoke();
  }
  catch (Exception ex)
  {
    results.Add(new PSObject((object)ex.Message));
  }

  // Close runspace
  runspace.Close();

  //Script results to string
  StringBuilder stringBuilder = new StringBuilder();
  foreach (PSObject obj in results)
  {
    stringBuilder.AppendLine(obj.ToString());
  }

}

谢谢!

【问题讨论】:

    标签: c# iis powershell


    【解决方案1】:

    看起来应该可以。您应该检查错误流并查看那里是否有消息(即:“目标元素已存在”)。

    我还建议您考虑使用本文中的 PowerShell 2 API:

    http://huddledmasses.org/how-to-invoke-powershell-and-use-the-results-from-csharp/

    如果你正在使用它,你可以检查 ps.Streams.Error 以确保它是空的......

    【讨论】:

    • 谢谢 Jaykul——有机会我会尝试一下并回帖。
    • @Jykul,链接无效。我现在不需要它,但其他用户可能会从答案或更新链接中的信息中受益。
    • 呃。你会认为链接到我自己的博客是安全的,因为我为什么要删除它!? (长篇故事)......现在第一段就是答案。该链接只是额外的建议(无论如何有点过时,因为 PowerShell 4 和 5 进一步改进了 API)。
    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2011-12-11
    • 2019-03-15
    • 1970-01-01
    • 2018-10-31
    • 2011-04-05
    相关资源
    最近更新 更多