Запустите мой сторонний DLL-файл с помощью PowerShell

#powershell #powershell-2.0 #powershell-remoting

#powershell #powershell-2.0 #powershell-удаленное управление

Вопрос:

Я не уверен, возможно ли это или нет с помощью PowerShell.

Но в основном у меня есть программа Windows Forms, которая настраивает программу под названием EO Server. Сервер EO имеет API, и я делаю ссылку на EOServerAPI.dll чтобы выполнить следующий код.

 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");
}
 

Возможно ли взаимодействовать с файлом DLL API и выполнять те же типы вызовов, что и в приложении Windows Forms?

Ответ №1:

Да, вы можете:

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

Вы вызываете статический метод следующим образом:

 [custom.type]::method()
 

Вместо Add-Type вы также можете использовать отражение:

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

(Обратите внимание, что даже в приведенном выше примере вызывается библиотека отражения и статический метод LoadFile.)

Комментарии:

1. Я потерялся со вторым утверждением. $a= new-object custom.type Я не знаю, как вызвать мой custom.type Не могли бы вы мне помочь?

2. @MicroSumol Тип — это полное имя (пространство имен имя_класса) вашего класса. Например. A.B.C.имя_класса

Ответ №2:

Взгляните на сообщение в блоге Загрузите пользовательскую DLL из PowerShell. Если вы можете взаимодействовать с объектом в .NET, вы, вероятно, можете делать это и в PowerShell.

Ответ №3:

c # dll

 Add-Type -Path $dllPath
(new-object namespace.class)::Main() #Where namespace=dllnamespace, class=dllclass, Main()=dllstartvoid
 

Информация. получить пространство имен и классы

 $types = Add-Type -Path $dllPath -PassThru
$types | ft fullname
$types
 

если это не «исполняемая» dll (что-то get / set dll), то это лучшее, что я знаю (не требуется vs для создания примера dll):

https://kazunposh.wordpress.com/2012/03/19/проверка-корректного-ввода-distinguished-name-в-скри/

Ответ №4:

На самом деле другие предлагаемые решения для меня не работают, здесь это альтернатива, которая отлично подходит для меня:

 $AssemblyPath = "C:SomePathSomeLIB.dll"
$bytes = [System.IO.File]::ReadAllBytes($AssemblyPath)
[System.Reflection.Assembly]::Load($bytes)