从C#调用PowerShell New-WebAppPool方法无效

时间:2017-08-22 23:23:46

标签: c# powershell-v3.0

我从WinForms应用程序调用了以下函数。该函数位于Main表单中。当我运行程序(具有提升的权限)时,将调用脚本,但不会创建应用程序池。

调用PowerShell脚本的其他几种方法运行良好,特别是那些调用我自己构建的自定义模块的方法。我遇到困难的脚本(如下所示)是修改Windows本身的项目的脚本,例如IIS或创建注册表项。

public void PSSetupIIS(string baseDirectory, IISInfo iisInfo)
{
    var results = new List<string>();
    using (Runspace runspace = RunspaceFactory.CreateRunspace())
    {
        runspace.Open();
        using (PowerShell psInstance = PowerShell.Create())
        {
            psInstance.Runspace = runspace;
            psInstance.AddCommand("Import-Module").AddArgument("Web-Administration");
            psInstance.AddStatement();

            var addWebAppPool = new Command("New-WebAppPool");
            addWebAppPool.Parameters.Add("Name", iisInfo.AppPoolName);
            addWebAppPool.Parameters.Add("Verbose");
            addWebAppPool.MergeMyResults(PipelineResultTypes.All, PipelineResultTypes.Output);
            psInstance.Commands.AddCommand(addWebAppPool);
            psInstance.Commands.AddCommand("Out-String");
            psInstance.AddStatement();

            results.AddRange(psInstance.Invoke<string>());
        }
        foreach (var result in results)
        {
            this.AppendOutput(result);
        }
        runspace.Close();
    }
    this.AppendOutput("IIS Configuration Complete.");
}

我尝试编写脚本并使用psInstance.AddScript并获得相同的结果(尽管在提升的PowerShell实例中运行相同的脚本时,它可以正常工作)。我还试图获得凭据的运行空间提示,但这根本不起作用。

此方法是使用PowerShell安装公司Web应用程序的大型项目的一部分。这是一个包含多个配置文件的复杂安装,并且已经超出了使用Wix或InstallShield简单维护的能力。我使用WinForms项目来创建一个由所有必需脚本使用的PSD1数据源。

我有一个有效的PowerShell脚本,可以从使用生成的PSD1文件的PowerShell控制台运行时很好地完成安装。尝试从UI运行只是为了平滑安装程序的用户体验。

我正在使用PowerShell和C#来尝试使用我们的开发团队和将要使用该项目的人员可访问的技术,并尝试遵循Microsoft设置的一般示例。我知道服务器管理器使用PowerShell。

任何指导?

1 个答案:

答案 0 :(得分:0)

答案结果是我需要为winforms应用程序创建一个清单。第一个密钥位于this question on Microsoft Developer Network,并在Manifest Generation in Visual Studio页面中进行了其他跟进,以获得更多指导。