Powershell a través de VB.NET. ¿Qué método y por qué?
Necesito llamar a los comandos de Powershell a través de mi código y encuentro al menos 2 ejemplos diferentes de cómo hacer esto. Me pregunto cuáles son las diferencias entre los métodos y por qué usaría uno en lugar de otro.
El primer método (¿más simple?) Es algo como esto:
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
ahora contiene una colección de objetos Powershell que se pueden convertir en cadenas, por ejemplo:
MsgBox(results.Item(0).ToString())
El segundo método se ve así:
Dim invoker As New RunspaceInvoke
Dim command As String = "<Powershell command here>"
Dim outputObjects As Collection(Of PSObject) = invoker.Invoke(command)
Y luego puedo iterar a través de la colección de objetos devueltos y convertir a cadena de la misma manera:
For Each result As PSObject In outputObjects
Console.WriteLine(result.ToString)
Next
También sé que con cualquier método puedo canalizar el comando paraout-string
para hacer que Powershell devuelva cadenas en lugar de objetos.
Mi pregunta es, ¿qué método debo usar y por qué? Ambos me parecen iguales.