1

VB.NET プログラムから PS コマンドを呼び出す必要があります。これは、標準の PS コマンドを呼び出している場合は正常に機能しますが、サードパーティ モジュールにあるコマンドを呼び出さなければならない場合は、うまく機能しないようです。PS コンソールImport-Module MyModuleで入力して、そのモジュール内のコマンドを呼び出すことができます。次のことを試しましたが、うまくいきません。モジュール内からコマンドにアクセスできません。

Dim PowerShell As Management.Automation.PowerShell = PowerShell.Create()
Dim PowerShellCommand As New PSCommand()
Dim PowerShellCommandResults As Object

PowerShellCommand.AddScript("Import-Module MyModule")
PowerShellCommand.AddScript("Get-MyCommand | Out-String")
PowerShell.Commands = PowerShellCommand
PowerShellCommandResults = PowerShell.Invoke()

上記のコード例でこれを行うにはどうすればよいですか? Runspace必要がない限り、すべてをクラスに変更したくありません。

4

1 に答える 1

-1

簡単なコードは次のようになり、動作します。

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()

私はあなたが選択できる他のスレッドで次のことを説明しました: VB.NET経由のPowershell。どの方法とその理由は?

エラー情報について詳しく教えていただけると助かります。

完全な例でさらに情報を追加しました:

非常に単純な C# DLL を作成し、以下のように VB.NET から呼び出しました。

C# DLL コード: (サードパーティ モジュールと考えてください)

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;

    }
 }
}

このサード パーティの DLL を PS コマンド ウィンドウでテストするには、次のコマンドを使用します。

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アプリケーションにサードパーティモジュールをロードすることで、同じ手順を使用しています。

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

コードが期待どおりに動作することを証明するデバッグ ウィンドウの出力を次に示します。

ここに画像の説明を入力

于 2012-05-20T00:58:52.283 に答える