Azure Automation Powershell Runbook无提示无法使用LoadAssembly

时间:2017-04-06 21:05:15

标签: powershell azure azure-automation runbook

我是Powershell Runbook的新手,请原谅我,如果我错过了一些明显的东西。我试图从我的脚本中记录Application Insights请求,但是甚至无法加载DLL,尽管我已经看到其他代码执行非常相似的操作。请注意,这是Powershell Runbook,而不是Powershell Workflow Runbook。

这是我的代码:

int jpgfile;
if((jpgfile = open("/tmp/myimage.jpeg", O_WRONLY | O_CREAT, 0660)) < 0){
    perror("open");
    exit(1);
}
write(jpgfile, buffer_start, bufferinfo.length);
close(jpgfile);

这是我在测试窗格中运行它时得到的输出:

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"

它似乎达到了LoadAssembly然后缩小,在放弃之前运行脚本三次。我有什么想法,我做错了什么? DLL显然存在于该位置,我没有得到任何错误输出来帮助我调试。谢谢!

1 个答案:

答案 0 :(得分:3)

看起来您对LoadFrom的调用产生了大量输出。如果您以交互方式运行代码并且只需更改它,就可以看到这一点:[System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-String -Width 500000000,它实际上会生成OutOfMemoryException。或者,如果您修改Runbook,如下所示:[System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-Null,您的作业将会运行。现在,这大量输出正在崩溃运行时。 (这可能是Runbook执行引擎中的一个错误。

但是,不要这样做! LoadFromLoadPartial等...这些在PowerShell 3中已弃用。

好消息是有一种不推荐的 PowerShelly 方法可以做你想要的。只需使用Add-Type -Path $assemblyPath代替[System.Reflection.Assembly]::LoadFrom($assemblyPath)

作为一个仅供参考,每当您看到您的工作被暂停并且显示消息时,&#34;工作操作&#39;激活&#39;无法运行,因为进程意外停止。工作行动尝试了3次。&#34; - 这意味着您完全崩溃了运行时和整个工作环境。 :)我们尝试3次以防万一我们做错了加载你的脚本或构建环境,但是经过3次我们认为它是一个糟糕的脚本。