4

我正在尝试从一个类中执行一个 powershell 脚本,但是当我在 x86 模式下设置平台目标时出现错误:

Cannot retrieve the dynamic parameters for the cmdlet. Retrieving the COM class factory for component with CLSID {688EEEE5-6A7E-422F-B2E1-6AF00DC944A6} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

我有从 x86 Powershell 文件夹中获得的 System.Management.Automation dll,所以我不明白为什么不能在 x86 中工作

如果我将平台目标设置为 x64,它可以正常工作

这是我的代码:

 RunspaceConfiguration runspaceConfiguration = RunspaceConfiguration.Create();

        Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConfiguration);
        runspace.Open();

        RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);

        Pipeline pipeline = runspace.CreatePipeline();

        //Here's how you add a new script with arguments
        string fullPath = Path.GetFullPath(@"..\..\Scripts\CreateApplicationPool.ps1");
        Command myCommand = new Command(fullPath);


        myCommand.Parameters.Add("ApplicationPoolName", "example");

        pipeline.Commands.Add(myCommand);

        // Execute PowerShell script
        Collection<PSObject> results = pipeline.Invoke();
4

1 回答 1

3

我意识到这是一个旧问题的新帖子......在我自己寻找解决方案时遇到了它。

关于这篇文章,在 x86 平台目标下从 .NET 运行 PowerShell 时,似乎某些命令/模块似乎有问题。我特别遇到了“Import-Module WebAdministration”的问题,并且会收到与您相同的错误。我从哪里得到 System.Management.Automation.dll 也没关系。此外,使用ILSpy查看 dll ,两者“视觉上”似乎是相同的。

不幸的是,我无法解决这个问题,也找不到任何可行的解决方案。有几篇关于这个完全相同或相似类型问题的帖子都指向在 x86 目标平台上运行(我相信这可能是由于 .NET 应用程序神奇地重定向到 PowerShell 的 SySWoW64 版本。这是一个示例那与文件系统

虽然我知道这不是一个很好的答案,但我相信答案是不能在 x86 平台上完成。如果您尝试使用 WebAdministration 模块执行操作并且无法克服此错误,您可以尝试Matt Wrock 的Importing the Microsoft.Web.Administration 解决方案。这似乎是一个可以接受的解决方法。

最终,我对我所在项目的解决方案是将框架定位到“任何 CPU”,并将 32 位机器视为“不受支持”。

于 2013-08-15T16:26:19.667 回答