2017-04-06 2 views
0

Je suis nouveau sur Powershell Runbook, alors pardonnez-moi si quelque chose me manque. J'essaie d'enregistrer une requête Application Insights à partir de mon script, mais je n'arrive même pas à charger la DLL, même si j'ai vu d'autres codes qui font quelque chose de très similaire. Notez qu'il s'agit d'un Runbook Powershell et non d'un Runbook Powershell Workflow.Le runbook Azure Automation Powershell échoue silencieusement à LoadAssembly

Voici mon code:

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" 

Et voici la sortie que je reçois lors de l'exécution dans le volet Test:

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 

Il semble aller aussi loin que le LoadAssembly et chie sur, exécuter le script trois fois avant d'abandonner. Des idées de ce que je fais mal? La DLL existe clairement à cet emplacement et je ne reçois aucune sortie d'erreur pour m'aider à déboguer. Merci!

+0

@BenH merci pour la réponse, j'ai effectivement vu ce poste, et j'aurais dû mentionner que j'ai essayé ce chemin aussi, mais l'assembly n'existait même pas là: dir: Impossible de trouver le chemin 'C : \ Modules \ Azure \ Microsoft.ApplicationInsights.dll ', car il n'existe pas. – UnionP

+0

J'ai pu contourner mon problème en basculant vers un Runbook Powershell et en incluant tous mes appels .NET dans les blocs InlineScript. Pas le plus élégant, mais ça marche. Serais toujours heureux d'entendre s'il y a un moyen de faire fonctionner cela sans avoir à faire cela – UnionP

+0

bien, essayez de faire try-catch et la sortie d'erreur? – 4c74356b41

Répondre

2

Il semble que votre appel à LoadFrom génère une quantité massive de sortie. Vous pouvez le voir si vous exécutez votre code interactivement et juste le changer comme ceci: [System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-String -Width 500000000, il va effectivement générer un OutOfMemoryException. Alternativement, si vous modifiez votre runbook comme ceci: [System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-Null, votre travail sera exécuté. À l'heure actuelle, cette grande quantité de sortie bloque l'exécution. (Ceci est probablement un bug dans le moteur d'exécution du Runbook)

Cependant, ne faites pas ça!LoadFrom, LoadPartial, etc ... ce sont déconseillés dans PowerShell 3.

La bonne chose est qu'il ya une façon de le faire PowerShelly non dépréciée ce que vous voulez. Il suffit d'utiliser Add-Type -Path $assemblyPath au lieu de [System.Reflection.Assembly]::LoadFrom($assemblyPath). En tant que FYI, chaque fois que vous voyez votre travail suspendu et le message "Impossible d'exécuter l'action" Activer ", car le processus s'est arrêté de manière inattendue L'action de travail a été tentée 3 fois." - Cela signifie que vous avez complètement écrasé le temps d'exécution et l'ensemble de votre environnement de travail. :) Nous essayons 3 fois juste au cas où nous aurions mal fait de charger votre script ou de créer l'environnement, mais après 3 fois nous pensons que c'est un mauvais script.

+0

Eh bien, je vais être, cela a fonctionné, merci pour les conseils @Mike! – UnionP