我需要通过我的代码调用 Powershell 命令,并且我发现至少有 2 个不同的示例。我想知道这些方法之间的区别是什么以及为什么我会使用其中一种而不是另一种。
第一个(更简单?)方法是这样的:
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
现在包含可以转换为字符串的 Powershell 对象的集合,例如:
MsgBox(results.Item(0).ToString())
第二种方法如下所示:
Dim invoker As New RunspaceInvoke
Dim command As String = "<Powershell command here>"
Dim outputObjects As Collection(Of PSObject) = invoker.Invoke(command)
然后我可以遍历返回对象的集合并以相同的方式转换为字符串:
For Each result As PSObject In outputObjects
Console.WriteLine(result.ToString)
Next
我也知道,无论使用哪种方法,我都可以通过管道命令out-string
使 Powershell 返回字符串而不是对象。
我的问题是,我应该使用哪种方法,为什么?在我看来,它们都一样。