2016-07-10 16 views
1

Ich habe eine ganze Reihe von Lösungen gesehen, aber keine behandelt mein Problem. Ich versuche, ein benutzerdefiniertes PowerShell-Modul namens "DSInternals" in meine C# -DLL zu importieren.PowerShell-Modul von C# importieren fehlgeschlagen

https://github.com/MichaelGrafnetter/DSInternals

Alles in meinem Code scheint ganz gut, aber wenn ich versuche, das verfügbare Modul zu bekommen, es ist nicht geladen.

Der Strom antwortet mit

Der Begriff ‚Get-ADReplAccount‘ wird nicht als Name eines Cmdlets, Funktion, Skriptdatei oder ein geschriebenes Programm erkannt. Überprüfen Sie die Schreibweise des Namens, oder überprüfen Sie, ob der Pfad korrekt ist, und versuchen Sie es erneut.

Wohin gehe ich mit diesem Code falsch?

InitialSessionState init = InitialSessionState.CreateDefault(); 
init.ImportPSModule(new string[] { @"D:\\DSInternals\\dsinternals.psd1" }); //location of the module files 
Runspace runspace = RunspaceFactory.CreateRunspace(init); 
runspace.Open(); 
PowerShell ps = PowerShell.Create(); 
ps.Runspace = runspace; 
ps.Commands.AddCommand("Get-ADReplAccount"); //this command is un-recognized 

foreach (PSObject result in ps.Invoke()) 
{ 
    Console.WriteLine(result); //this always returns null 
} 
+0

* Dieser Befehl ist un-erkannt funktioniert * Woher wissen Sie das? Jede Ausnahme ausgelöst? Irgendein Fehler in 'ps.Streams.Error'? – PetSerAl

+0

Die Streams antworten mit "Der Begriff 'Get-ADReplAccount' wird nicht als Name eines Cmdlets, einer Funktion, einer Skriptdatei oder eines ausführbaren Programms erkannt. Überprüfen Sie die Schreibweise des Namens oder überprüfen Sie, ob ein Pfad enthalten ist ist richtig und versuche es erneut. ". Dieses Cmdlets wird von dem DSInternals-Modul –

+0

zu Ihrem Code hinzugefügt: 'init.ThrowOnRunspaceOpenError = true;'. – PetSerAl

Antwort

0

Das Problem war die .NET Framework-Version, in der das Modul eingebaut wurde. ein Modul hinzufügen, die mit einer höheren Version des .NET-Framework auf die C# Klasse wird nicht funktionieren gebaut wurden. Das Modul wurde in 4.5.1 gebaut und ich arbeite mit der Version 2, das Hinzufügen

init.ThrowOnRunspaceOpenError=true; 

fängt die Ursache des Fehlers geholfen.

Hier ist meine letzte Code,

 InitialSessionState init = InitialSessionState.CreateDefault(); 
     init.ImportPSModule(new string[] { @"D:\\DSInternals\\dsinternals.psd1" }); //location of the module files 
     init.ThrowOnRunspaceOpenError = true; 
     Runspace runspace = RunspaceFactory.CreateRunspace(init); 
     runspace.Open(); 
     var script = 
      "Get-ADReplAccount -SamAccountName peter -Domain BLABLA -Server dc.BLABLA.co.za -Credential $cred -Protocol TCP"; //my powershell script 

     _powershell = PowerShell.Create().AddScript(script); 
     _powershell.Runspace = runspace; 

     var results = _powershell.Invoke(); 
     foreach (var errorRecord in _powershell.Streams.Progress) 
      Console.WriteLine(errorRecord); 
     foreach (var errorRecord in _powershell.Streams.Debug) 
      Console.WriteLine(errorRecord); 
     foreach (var errorRecord in _powershell.Streams.Error) 
      Console.WriteLine(errorRecord); 
     foreach (var errorRecord in _powershell.Streams.Warning) 
      Console.WriteLine(errorRecord); 

     var stringBuilder = new StringBuilder(); 
     foreach (var obj in results) 
     { 
      stringBuilder.AppendLine(obj.ToString()); 
     } 

     return stringBuilder.ToString();