我有這樣的代碼,其中I(在這種情況下從MS動態導航)加載管理單元:爲什麼PowerShell的類不加載管理單元
using (Runspace runspace = RunspaceFactory.CreateRunspace())
{
runspace.Open();
using (var ps = PowerShell.Create())
{
ps.Runspace = runspace;
ps.AddScript("Add-PSSnapin Microsoft.Dynamics.Nav.Management")
.AddScript("Get-NAVServerInstance");
//This does not work. Says unknown cmdlet Get-NAVServerInstance
//ps.AddCommand("Add-PSSnapin").AddArgument("Microsoft.Dynamics.Nav.Management")
// .AddCommand("Get-NAVServerInstance");
var output = ps.Invoke();
}
}
當我使用AddScript方法如圖此代碼的工作代碼。 但爲什麼AddCommand方法不起作用(請參閱註釋代碼)?看起來snapin沒有加載,因爲錯誤表示Get-NAVServerInstance cmdlet是未知的。 這應該如何工作?
我知道我可以用InitialSessionState創建一個運行空間,我已經在其上導入了管理單元。然後ps.AddCommand(「Get-NAVServerInstance」)正在工作。 但是,當我想創建一個遠程運行空間會話(使用WSManConnectionInfo)時,我無法找到提供initialSessionState的方法。
UPDATE: 如此看來,只有AddCommand可用於在運行空間被打開可用的cmdlet(或產生的?)。在RunspaceFactory.CreateRunspace(...)中使用InitialSessionState或RunspaceConfiguration實例。因此,此代碼的工作:
var config = RunspaceConfiguration.Create();
PSSnapInException warning;
config.AddPSSnapIn("Microsoft.Dynamics.Nav.Management", out warning);
using (Runspace runspace = RunspaceFactory.CreateRunspace(config))
{
runspace.Open();
using (var ps = PowerShell.Create())
{
ps.Runspace = runspace;
ps.AddCommand("Get-NAVServerInstance");
var output = ps.Invoke();
}
}
但我的問題是,在這種情況下,我不能指定WSManConnectionInfo實例。
那麼我怎樣才能創建一個遠程連接與管理單元(安裝在遠程機器上)加載的運行空間?如何提供遠程連接的配置?
你需要先導入一個模塊? – Colyn1337
該cmdlet位於snapin中。 – Jaap