【发布时间】: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