2016-05-19 5 views
0

Ich habe nach einer Lösung für das Problem gesucht, mit dem ich konfrontiert werde, wenn ich versuche, PowerShell von VB.net zu starten. Ich bin nicht sehr erfahren im Codieren, also Entschuldigung, wenn ich nicht die richtige Terminologie verwende.PowerShell und .NET

Unten habe ich den Code kopiert, mit dem ich arbeite. Wenn ich den Code kompiliere und das Programm ausführe, erhalte ich ein paar Ausnahmen, die auf PowerShell-Module verweisen. Ich habe viel gesucht, um sicherzustellen, dass ich die erforderlichen PowerShell-Module und/oder -Ansammlungen nicht vermisse.

Imports System.Collections.ObjectModel 
Imports System.Management.Automation 
Imports System.Management.Automation.Runspaces 
Imports System.Management.Automation.Host 
Imports System.Text 
Public Class Form1 
Private Function RunScript(ByVal Script As String) As Object 
    Dim MyRunSpace As Runspace = RunspaceFactory.CreateRunspace() 
    MyRunSpace.Open() 
    Dim MyPipeline As Pipeline = MyRunSpace.CreatePipeline() 
    MyPipeline.Commands.AddScript(Script) 
    Dim results As Collection(Of PSObject) = MyPipeline.Invoke() 
    MyRunSpace.Close() 
    Dim MyStringBuilder As New StringBuilder() 
    For Each obj As PSObject In results 
     MyStringBuilder.AppendLine(obj.ToString()) 
    Next 
    Return MyStringBuilder 
End Function 
Private Function GetAD() 
    Dim Script As New StringBuilder() 
    Script.Append("$ADUSER= Get-ADUser -filter { cn -eq " + Chr(34) + "Common Name" + Chr(34) + " }" + vbCrLf) 
    Script.Append("$ADUSER" + vbCrLf) 
    Return Script.ToString() 
End Function 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Call RunScript(GetAD) 
End Sub 


Private Sub RichTextBox1_TextChanged(sender As Object, e As EventArgs) Handles RichTextBox1.TextChanged 
    RichTextBox1.Text = ToString() 
End Sub 
End Class 

Hier sind die Ausnahmen, die der Compiler zurückgibt, wenn die PowerShell-Pipeline das Skript verarbeitet und an den Compiler zurückgibt. Wiederum habe ich sichergestellt, dass ich den RSAT auf meinem Computer installiert habe. Außerdem stellte ich sicher, dass ich ein altes NET 3.5 SDK hatte. Alle Suchergebnisse zu diesem speziellen Thema waren bisher nicht hilfreich.

+  Exception Exception thrown: 'System.DllNotFoundException' in System.Management.Automation.dll ("Unable to load DLL 'wldp.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)") System.DllNotFoundException 

Exception thrown: 'System.Management.Automation.ItemNotFoundException' in System.Management.Automation.dll ("Cannot find path 'C:\windows\system32\windowspowershell\v1.0\Modules\ActiveDirectory\Microsoft.ActiveDirectory.Management' because it does not exist.") 

Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll ("Could not load file or assembly 'Microsoft.ActiveDirectory.Management' or one of its dependencies. The system cannot find the file specified.") 

Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll ("Could not load file or assembly 'file:///C:\windows\system32\windowspowershell\v1.0\Modules\ActiveDirectory\Microsoft.ActiveDirectory.Management' or one of its dependencies. The system cannot find the file specified.") 

Exception thrown: 'System.IO.FileNotFoundException' in mscorlib.dll ("Could not load file or assembly 'Microsoft.ActiveDirectory.Management' or one of its dependencies. The system cannot find the file specified.") 

Exception thrown: 'System.Management.Automation.PSArgumentException' in System.Management.Automation.dll ("The Windows PowerShell snap-in 'Microsoft.ActiveDirectory.Management' is not installed on this computer.") 

Jede Hilfe oder Vorschlag wird sehr geschätzt.

+0

Ihre Ausnahme # 2 besagt eindeutig, dass der angegebene Pfad nicht existiert, Sie sollten das zuerst überprüfen, und ich glaube, es ist das seme-Problem für die anderen. – abichango

+0

Ich habe den referenzierten Pfad auf der Ausnahme überprüft und das Verzeichnis ist dort und es gibt Dateien darin, obwohl ich nicht sicher bin, wenn im referenzierten Verzeichnis Dateien fehlen. –

+0

Wenn Sie in einer 32-Bit-VB.NET-Anwendung sind, müssen Sie in C suchen: \ Windows \ SysWOW64 \ WindowsPowerShell \ v1.0 \ Module –

Antwort

0

Ich stieß heute auf das gleiche Problem. Ich habe herausgefunden, was mein Problem ist und vielleicht auch dein Problem. Ich bin auch nicht so toll beim Programmieren.

Diese

Script.Append("$ADUSER" + vbCrLf)Script.Append("$ADUSER.Name" + vbCrLf)

sein sollte Wenn Sie den .Name zum Befehl hinzufügen, wird es ausgegeben ohne Probleme.