Powershell za pośrednictwem VB.NET. Jaka metoda i dlaczego?
Muszę wywoływać polecenia Powershell za pośrednictwem mojego kodu i znajduję co najmniej 2 różne przykłady tego. Zastanawiam się, jakie są różnice między metodami i dlaczego używałbym jednej w przeciwieństwie do drugiej.
Pierwsza (prostsza?) Metoda wygląda mniej więcej tak:
Dim command As New PSCommand()
command.AddScript("<Powershell command here>")
Dim powershell As Management.Automation.PowerShell = powershell.Create()
powershell.Commands = command
Dim results = powershell.Invoke()
results
teraz zawiera kolekcję obiektów PowerShell, które można przekonwertować na ciągi znaków, na przykład:
MsgBox(results.Item(0).ToString())
Druga metoda wygląda tak:
Dim invoker As New RunspaceInvoke
Dim command As String = "<Powershell command here>"
Dim outputObjects As Collection(Of PSObject) = invoker.Invoke(command)
A potem mogę iterować przez zbiór zwracanych obiektów i konwertować na łańcuch w ten sam sposób:
For Each result As PSObject In outputObjects
Console.WriteLine(result.ToString)
Next
Wiem też, że za pomocą jednej z metod mogę przekazać komendęout-string
aby Powershell zwracał ciągi znaków zamiast obiektów.
Moje pytanie brzmi: jaką metodę powinienem użyć i dlaczego? Oboje wydają mi się tacy sami.