【问题标题】:Hosting powershell import-module failure托管 powershell 导入模块失败
【发布时间】:2013-03-27 11:22:21
【问题描述】:

我正在尝试托管 powershell 并运行需要“ServerAdmin”模块的 Get-Windows 功能。操作系统是 Server 2008 R2。我可以在 PS comamnd 提示符下成功运行“Import-module ServerAdmin”,所以我知道机器配置很好。但是,我无法让它在我的自定义 c# 主机中工作。我尝试了两种方法,如下所示。第一个,使用 import-module 命令,报告错误“未加载指定的模块'ServerAdmin',因为在任何模块目录中都找不到有效的模块文件”。使用 InitialSessionState.ImportModule() 的第二种方法也失败了。该方法没有报告错误,但 get-windowsfeature 命令仍然无法识别。

第一种方法:

var ps = PowerShell.Create();
var cmd = ps.AddCommand("Import-Module");
cmd.AddArgument("ServerManager");
ps.Invoke();
Console.WriteLine("errors");
// produces "The specified module 'ServerAdmin' was not loaded because no valid module file was found in any module directory"
foreach (var error in ps.Streams.Error)
{
    Console.WriteLine(error.ToString());
}

第二种方法:

var ps = PowerShell.Create();
var initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new[]{"ServerManager"});
var runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
ps.Runspace = runspace;
ps.AddCommand("Get-WindowsFeature");
var results = ps.Invoke(); // throws exception because Get-WindowsFeature is not known
foreach (var result in results)
{
    Console.WriteLine(result);
}

【问题讨论】:

  • fwiw,我已经在第二种方法中使用了 runspace.SessionStateProxy.PSVariable.GetValue("Error") 来确认它正在产生与第一种方法。我也尝试过指定模块的完整路径。还是不行。

标签: powershell powershell-2.0


【解决方案1】:

发现问题。我正在构建 x86 而不是 x64 或“任何”。显然 x86 是默认值。当然 server2008 很乐意在 wow64 中运行它,但 serveradmin 模块在这种情况下不可用。

【讨论】:

    猜你喜欢
    • 2016-11-12
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    相关资源
    最近更新 更多