简单的代码如下所示,它确实有效:
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()
我在其他线程中解释了以下内容,您可以选择一个:
Powershell via VB.NET。哪种方法,为什么?
如果您提供有关错误信息的更多信息,我可能会提供帮助。
通过完整示例添加了更多信息:
我刚刚创建了一个非常简单的 C# DLL 并从 VB.NET 调用它,如下所示:
C# DLL 代码:(将其视为第 3 方模块)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml.Linq;
namespace CSVtoXML
{
public class Actions
{
public Actions()
{
}
public static string writeHello(string name)
{
return "Hello " + name;
}
}
}
如果您想在 PS 命令窗口中测试此第 3 方 DLL,只需使用以下命令:
PS C:\2012> [Reflection.Assembly]::LoadFile("C:\2012\CSVtoXML.dll")
GAC Version Location
--- ------- --------
False v2.0.50727 C:\2012\CSVtoXML.dll
PS C:\2012> [CSVtoXML.Actions]::writeHello("Avkash")
Hello Avkash
PS C:\2012>
现在我通过在 VB.NET 应用程序中加载第 3 方模块来使用相同的步骤,如下所示:
Module Module1
Sub Main()
Dim PowerShell As Management.Automation.PowerShell = PowerShell.Create()
Dim PowerShellCommand As New PSCommand
PowerShellCommand.AddScript("[Reflection.Assembly]::LoadFile('C:\2012\CSVtoXML.dll')")
PowerShellCommand.AddScript("[CSVtoXML.Actions]::writeHello('Avkash')")
PowerShell.Commands = PowerShellCommand
Dim results = PowerShell.Invoke()
MsgBox(results.Item(0).ToString())
End Sub
End Module
这是调试窗口中的输出,以证明代码确实按预期工作: