1

Тема: WSH: .NET, WINAPI из PowerShell или JScript.NET

Всем привет, хочу побеседовать об использовании возможностей PowerShell в среде WSH, но без регистрации компонентов в реестре. Пока есть два вектора решения:
1) Можно запустить скрытый процесс со скриптом PS и осуществлять обмен данными процессами
2) Можно запустить скрытый процесс со скриптом PS, создать в нем экземпляр класса ScriptControl. Передать дополнительные объекты через AddObject. Может быть добавить функции для интерпретации кода в PowerShell из JScript или VBS.

Кроме того, можно выполнять код PoSh без файла скрипта, то есть из командной строки.

Для чего это?
Использовать WinAPI, .NET в JScript или VBScript.

Одновременно, хотелось бы, не отклоняясь от цели темы, обсудить имеет ли решение право на жизнь по использованию JScript.NET. Ведь JScript.NET имеет возможность eval. Может быть вообще стоит написать интерпретатор JScript на базе JScript.NET c псевдо-хостовым объектами (жаргонизм ) WScript и WSH?

Я абсолютно понимаю, что интерфейсы разные и т.п. Тут вопрос именно в решении проблемы.

2

Re: WSH: .NET, WINAPI из PowerShell или JScript.NET

Понял, спасибо. Есть еще идея компилировать сборки средствами .NET (компиляторы поставляются вместе с фреймворком), которые могут использовать unmanaged code (то есть не использовать интерпретатор PoSh). Как Вы смотрите на использование ScriptControl и интерпретацию скриптовых языков в рамках .NET? Указатели на функции и объекты можно хранить в expando object (c#), использовать его как словарь.

3

Re: WSH: .NET, WINAPI из PowerShell или JScript.NET

JScript: гибрид WSH и NET

4

Re: WSH: .NET, WINAPI из PowerShell или JScript.NET

badik, благодарю. Может быть доведете более развернуто по теме?

5

Re: WSH: .NET, WINAPI из PowerShell или JScript.NET

в JScript.NET выражение  eval(<kod>,'unsafe') позволяет интерпретировать код NET
для примера приложил код для работы с Oracle из реальной программы
Тестовый пример (eval.js/eval.exe) при выполнении грузит lib.js и выполняет запрос  используя разные способы доступа к БД
в загружаемой функции select_a видны разные подходы работы с BLOB
1. WSH
Запуск cscript eval.js
доступ через "OracleInProcServer.XOraSession" (OO4O)

2. NET
компилируем js net_js.bat
доступ через System.Data.OracleClient (OO4O в NET не работает)
для сохранения Blob пришлось объявить в одном месте типизированные переменные для работы с битовым массивом

var tBytes:Int32  = Int32(Convert.ChangeType(objDataReader.GetBytes(i, 0, null, 0, int.MaxValue), Int32));
var outbyte:byte[] = new byte[tBytes];
Post's attachments

test.zip 5.26 kb, 20 downloads since 2015-02-27 

You don't have the permssions to download the attachments of this post.