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