2013-03-26 252 views
0

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

第一种方法:

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); 
} 
+0

fwiw,我已经在第二种方法,我现在已经使用runspace.SessionStateProxy.PSVariable.GetValue(“错误”),以确认它是第一种方法产生相同的“模块未找到”错误。我也尝试指定模块的完整路径。不过,不行。 – 2013-03-27 02:34:28

回答

1

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