2013-03-26 136 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模塊在這種情況下不可用。