Использовать функцию из dll powershell cmdlet

Можно ли добавить DLL, которая реализует командлет PowerShell, в проект C# и вызывать его функции, как вы это обычно делаете с классами? Проблема в том, что у командлета нет подходящих функций для вызова. Она имеет invoke и другие вещи вместо этого.

Насколько я понимаю, другой способ сделать это использовать System.Management.Automation Пространство имен. Но я боюсь, что это приведет к снижению производительности, если я буду запускать эту функцию 7000 раз подряд.

Если быть точным, у меня есть такие комлеты Remove-NAVApplicationObjectLanguage для MS Dynamics Nav, которые обрабатывают файлы и 7000 файлов для обработки. Я хочу обернуть его в библиотеку и вызвать его с помощью дополнительной обработки удобным для меня способом.

1 ответ

Microsoft предоставила статью " Перерыв на кофе" в блоге : используйте надстройку PowerShell Runner, чтобы запустить свои командлеты Dynamics NAV PowerShell из Dynamics NAV.

Если вам нравится использовать это в C#, вы можете использовать тот же Microsoft.Dynamics.Nav.PowerShellRunner.dll. Он находится в папке надстроек уровня обслуживания C:\Program Files\Microsoft Dynamics NAV\100\Service\Add-ins\PowerShellRunner.

Пример C#:

PowerShellRunner PowerShellRunner = PowerShellRunner.CreateInSandbox();
PowerShellRunner.WriteEventOnError = true;

PowerShellRunner.ImportModule(@"C:\Program Files(x86)\Microsoft Dynamics NAV\100\RoleTailored Client\Microsoft.Dynamics.Nav.Apps.Tools.dll");

PowerShellRunner.AddCommand("Remove-NAVApplicationObjectLanguage");
string[] sources = new string[] { "TAB9.TXT", "TAB14.TXT" };
PowerShellRunner.AddParameter("Source", sources);
PowerShellRunner.AddParameter("Destination", @".\RESULT");

PowerShellRunner.WriteEventOnError = true;

PowerShellRunner.BeginInvoke();
Другие вопросы по тегам