添加Windows功能未被识别

4

我正在尝试使用C#运行powershell命令,但是在调用流水线时一直出现错误。我想知道是否有人知道为什么会出现add-windowsfeature is not recognized的问题。提前感谢。

private static void RunScript(string name)
{
    InitialSessionState initial = InitialSessionState.CreateDefault();
    initial.ImportPSModule(new[] { "ServerManager"});
    Runspace runspace = RunspaceFactory.CreateRunspace(initial); 
    // create Powershell runspace

    runspace.Open();

    RunspaceInvoke runSpaceInvoker = new RunspaceInvoke(runspace);
    runSpaceInvoker.Invoke("Set-ExecutionPolicy Unrestricted");


    Pipeline pipeline = runspace.CreatePipeline();
    Command cm = new Command("Import-module");
    cm.Parameters.Add("name","ServerManager");
    pipeline.Commands.Add(cm);
    Command command = new Command("add-windowsfeature"); 
    command.Parameters.Add(null, name);  
    pipeline.Commands.Add(command);

    var a = pipeline.Invoke();
    foreach (var psObject in a)
    {
        Console.WriteLine(psObject);
    }

    runspace.Close();
}

我认为 ServerManager 模块没有被正确地导入。在尝试 add-windowsfeature 之前,你可以尝试执行 import-module 命令并查看其结果如何。 - Despertar
我尝试了以下代码,但是出现了相同的错误。 RunspaceInvoke runSpaceInvokerImport = new RunspaceInvoke(runspace); runSpaceInvokerImport.Invoke("Import-module ServerManager"); - Zuzlx
没有新的错误。同一行上的错误是Command command = new Command("add-windowsfeature");,提示它不是有效的 cmdlet。我开始觉得我应该包括 add-windowsfeature 的完整路径... - Zuzlx
暂时将您的add-windowsfeature调用替换为“Get-Module”,以验证您是否已加载了正确的模块。ServerManager是否依赖于另一个可能不可用的模块? - Keith Hill
首先,感谢大家的关注。我用Get-Module替换了“add-windowsfeature”,虽然没有抛出异常,但列表为空。因此没有错误 - 但是Get-module返回一个空集。在shell窗口中运行该序列可以正常工作。我使用的是Windows 2008 R2 sp1。 - Zuzlx
显示剩余2条评论
1个回答

1

ServerManager是一个只支持64位的模块(它不存在于C:\Windows\SysWOW64\WindowsPowerShell\v1.0\Modules,但会存在于C:\Windows\System32\WindowsPowerShell\v1.0\Modules)。编译为x64,你的代码就能正常工作。


谢谢。如果我没记错的话,这是一个64位与32位的问题。已标记为已回答。 - Zuzlx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接