Модуль Runbook Powershell для службы автоматизации Azure автоматически не выполняет LoadAssembly

Я новичок в Powershell Runbook, так что простите меня, если я упустил что-то очевидное. Я пытаюсь зарегистрировать запрос Application Insights из своего сценария, но даже не могу загрузить DLL, хотя я видел другой код, который делает что-то очень похожее. ОБРАТИТЕ ВНИМАНИЕ, что это модуль Runbook Powershell, а не модуль Runbook рабочего процесса Powershell.

Вот мой код:

Write-Output "Starting"
$assemblyPath = "C:\Modules\Global\Azure\Compute\Microsoft.ApplicationInsights.dll"
dir $assemblyPath

Write-Output "1"        
[System.Reflection.Assembly]::LoadFrom($assemblyPath)
Write-Output "2"

И вот результат, который я получаю при запуске на панели тестирования:

Starting

    Directory: C:\Modules\Global\Azure\Compute
Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
------        1/11/2016   1:59 PM         152824 Microsoft.ApplicationInsights.dll                                      
1
Starting

    Directory: C:\Modules\Global\Azure\Compute
Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
------        1/11/2016   1:59 PM         152824 Microsoft.ApplicationInsights.dll                                      
1
Starting

    Directory: C:\Modules\Global\Azure\Compute
Mode                LastWriteTime         Length Name                                                                   
----                -------------         ------ ----                                                                   
------        1/11/2016   1:59 PM         152824 Microsoft.ApplicationInsights.dll                                      
1

Кажется, он дошел до LoadAssembly, а затем вылетел, запустив скрипт три раза, прежде чем сдаться. Есть идеи, что я делаю не так? Очевидно, что DLL существует в этом месте, и я не получаю никаких сообщений об ошибках, которые помогли бы мне отладить. Спасибо!


person UnionP    schedule 06.04.2017    source источник
comment
@BenH, спасибо за ответ, я действительно видел этот пост, и я должен был упомянуть, что я тоже пробовал этот путь, но сборки там даже не было: dir: Cannot find path 'C: \ Modules \ Azure \ Microsoft.ApplicationInsights.dll ', потому что он не существует.   -  person UnionP    schedule 07.04.2017
comment
Мне удалось обойти мою проблему, переключившись на Powershell Runbook и заключив все мои вызовы .NET в блоки InlineScript. Не самый элегантный, но работает. Все равно хотелось бы услышать, есть ли способ заставить это работать, не делая этого.   -  person UnionP    schedule 07.04.2017
comment
ну попробовать сделать try-catch и вывести ошибку?   -  person 4c74356b41    schedule 07.04.2017
comment
@ 4c74356b41 К сожалению, это не помогает. Если я получаю исключение, например FileNotFound, если я передаю неверный путь к LoadAssembly, он отображает его, это выглядит как нечто совершенно другое.   -  person UnionP    schedule 07.04.2017


Ответы (1)


Похоже, ваш вызов LoadFrom генерирует большой объем вывода. Вы можете увидеть это, если запустите свой код в интерактивном режиме и просто измените его следующим образом: [System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-String -Width 500000000, он фактически сгенерирует OutOfMemoryException. В качестве альтернативы, если вы измените свой модуль Runbook следующим образом: [System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-Null, ваше задание будет выполнено. Прямо сейчас такой большой объем вывода приводит к сбою среды выполнения. (Вероятно, это ошибка в механизме выполнения Runbook.)

Однако не делайте этого! LoadFrom, LoadPartial и т. д. они устарели в PowerShell 3.

Хорошо, что существует нерекомендуемый способ PowerShelly делать то, что вы хотите. Просто используйте Add-Type -Path $assemblyPath вместо [System.Reflection.Assembly]::LoadFrom($assemblyPath).

К вашему сведению, всякий раз, когда вы видите, что ваше задание приостановлено и появляется сообщение: «Действие задания« Активировать »не может быть выполнено, потому что процесс неожиданно остановлен. Действие задания было выполнено 3 раза». - это означает, что вы полностью разрушили среду выполнения и всю рабочую среду. :) Мы пробуем 3 раза на случай, если что-то мы сделали неправильно, загрузив ваш скрипт или построив среду, но после 3 раз мы решаем, что это плохой скрипт.

person Mike    schedule 12.04.2017
comment
Хорошо, я буду, это сработало, спасибо за советы @Mike! - person UnionP; 13.04.2017