我正在尝试托管PowerShell并运行需要“ServerAdmin”模块的Get-Windowsfeature。操作系统是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);
}
答案 0 :(得分:1)
发现问题。我正在构建x86而不是x64或“任何”。显然x86是默认值。当然,server2008很高兴在wow64中运行它,但是serveradmin模块在这种情况下不可用。