使用C#调用PowerShell服务器命令行开关到Enable-WindowsOptionalFeature netfx3

时间:2013-07-19 01:11:08

标签: c# .net powershell

我正在使用使用Burn的WiX安装程序,因此具有.Net要求。捆绑.Net的先决条件版本不适用于服务器操作系统,因为它们需要使用角色管理器。事实上,它是WiX安装的一部分并不是非常重要的,如果有其他方法可以帮助我完成我的任务。我正在运行/测试下面的代码作为独立的.Net控制台应用程序。在使用this method失败以解决此问题后,我编写了以下使用powershell和“Enable-WindowsOptionalFeature”。

    static void Main(string[] args)
    {

        PowerShell ps = PowerShell.Create();
        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();

        Pipeline pipeline = runspace.CreatePipeline();

        Command addDotNet = new Command("Enable-WindowsOptionalFeature");
        addDotNet.Parameters.Add("-FeatureName netfx3 -Online -All");
        pipeline.Commands.Add(addDotNet);
        Collection<PSObject> log = pipeline.Invoke();

}

当我运行它时会弹出这个窗口 无法通过Windows功能控制面板自动安装或卸载Windows Server角色和功能。 enter image description here

看到我的想法我已经使用了相当于“服务器管理器cmdlet”的东西,我不确定它实际上要求的是什么。所以这两部分问题是1)解决这个问题的正确方法是什么。 2)如何在安装过程中保持安静。

PS:如果这个问题确实属于Server Fault,请告诉我。

4 个答案:

答案 0 :(得分:1)

Enable-WindowsOptionalFeature是DISM的一部分,它将用于创建一个Windows映像以部署到新系统

Add-WindowsFeature是您正在寻找的,它为当前的Windows Server实例添加了一项功能。它位于ServerManager powershell模块中,该模块仅适用于Windows Server(不适用于Windows 7)

答案 1 :(得分:0)

我要说的只是基于常识,而不是以前的经验,如果这不相关,那就很抱歉。

您似乎可以使用Windows Server 2012,因为此版本只有您正在使用的Windows ADK。 Windows 8(客户端操作系统)和Windows Server 2012(服务器操作系统)具有不同的启用功能。这些在Windows 8中显示为可选功能,但在服务器中显示为服务器角色/功能。

请注意,与您所说的相反,捆绑包不起作用,因为它是服务器操作系统,它不起作用,因为它包含在操作系统中,需要启用。这适用于服务器操作系统(Win 2012)和客户端操作系统(Windows 8)。

只需要为Windows 8和Win 2012使用不同的方法。

对于Windows 8,您的方法可以正常工作。对于Windows 2012,您看到的帮助建议您使用Add-WindowsFeature cmdlet。

答案 2 :(得分:0)

基本上,命令失败,因为组件存储中不存在您需要安装的组件。管理员需要插入安装媒体。也许您可以在安装程序中包含相应的文件以避免手动步骤,但我从未尝试过这样做,这也可能会造成许可问题。

对于Server 2012,Microsoft默认决定从组件存储中删除.NET framework 3.5。它仍然存在于安装介质上,在安装过程中不会假脱机到磁盘上。我不久前在我的博客中写了一篇rant

答案 3 :(得分:0)

我在尝试弄清楚服务器2012实例中哪些内容被破坏时添加了一些额外的日志/写入线程语句。我意识到那些调试行根本没有输出到控制台。

事实证明我没有仔细阅读弹出窗口。投诉不是关于使用PS命令行开关,而是关于尝试安装.Net 3.5来运行我的应用程序的投诉。我的应用程序的目标是.Net 3.5,因此消息是关于尝试自动安装.Net 3.5

这个问题可能不仅仅是对我短暂失明和愚蠢的证明,而且还可以作为对注重细节和阅读错误的重要性的评论,以了解它为什么会发生。 :)