web-dev-qa-db-fra.com

Exécutez mon fichier tiers DLL avec PowerShell

Je ne sais pas si cela est possible ou non avec PowerShell.

Mais en gros, j'ai un programme Windows Forms qui configure un programme appelé EO Server. Le serveur EO possède une API et je fais référence à EOServerAPI.dll pour exécuter le code suivant.

using EOserverAPI;
...
private void myButton_Click(object sender, EventArgs e)
{
    String MDSConnString="Data Source=MSI;Initial Catalog=EOMDS;Integrated Security=True;";

    //Create the connection
    IEOMDSAPI myEOMDSAPI = EOMDSAPI.Create(MDSConnString);

    //Get JobID
    Guid myMasterJobID = myEOMDSAPI.GetJobID("myJobRocks");
}

Est-il possible d'interagir avec un fichier API DLL et d'effectuer les mêmes types d'appels que vous le feriez dans une application Windows Forms?

25
MicroSumol

Oui, vous pouvez:

Add-Type -Path $customDll
$a = new-object custom.type

Vous appelez une méthode statique comme ceci:

[custom.type]::method()

Au lieu de Add-Type, vous pouvez également utiliser la réflexion:

[Reflection.Assembly]::LoadFile($customDll)

(Notez que même ce qui précède appelle la bibliothèque Reflection et la méthode statique LoadFile.)

34
manojlds

Jetez un oeil à l'article de blog Chargez un DLL de PowerShell personnalisé. Si vous peut interagir avec un objet dans .NET, vous pouvez probablement le faire aussi dans PowerShell.

11
Chris N

En fait, les autres solutions proposées ne fonctionnent pas pour moi, voici une alternative qui fonctionne parfaitement pour moi:

$AssemblyPath = "C:\SomePath\SomeLIB.dll"
$bytes = [System.IO.File]::ReadAllBytes($AssemblyPath)
[System.Reflection.Assembly]::Load($bytes)
1
f4d0