Использовать функцию из 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();