【问题标题】:Azure Automation Powershell runbook silently fails to LoadAssemblyAzure 自动化 Powershell Runbook 以静默方式无法 LoadAssembly
【发布时间】:2017-09-02 02:34:47
【问题描述】:

我是 Powershell Runbook 的新手,如果我遗漏了一些明显的东西,请原谅我。我正在尝试从我的脚本中记录一个 Application Insights 请求,但我什至无法加载 DLL,尽管我已经看到了其他类似的代码。请注意,这是 Powershell Runbook,而不是 Powershell Workflow Runbook。

这是我的代码:

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,然后就废话了,在放弃之前运行了 3 次脚本。任何想法我做错了什么? DLL 显然存在于该位置,并且我没有收到任何错误输出来帮助我进行调试。谢谢!

【问题讨论】:

  • @BenH 感谢您的回复,我实际上看过那篇文章,我应该提到我也尝试过该路径,但该程序集甚至不存在:dir:找不到路径 'C:\Modules\Azure\Microsoft.ApplicationInsights.dll' 因为它不存在。
  • 我能够通过切换到 Powershell Runbook 并将我的所有 .NET 调用包含在 InlineScript 块中来解决我的问题。不是最优雅的,但它有效。仍然很想听听是否有办法让这个工作而不必这样做
  • 好吧,试试 try-catch 并输出错误?
  • @4c74356b41 不幸的是,这无济于事。如果我确实遇到异常,例如 FileNotFound 如果我将错误的路径传递给 LoadAssembly,它会显示它,这似乎完全是另外一回事

标签: powershell azure azure-automation runbook


【解决方案1】:

看起来您对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)

作为仅供参考,每当您看到作业暂停和消息“无法运行作业操作‘激活’,因为进程意外停止。作业操作已尝试 3 次。” - 这意味着您已经完全破坏了运行时和整个工作环境。 :) 我们尝试了 3 次,以防万一加载您的脚本或构建环境时我们做错了什么,但 3 次后我们认为这是一个错误的脚本。

【讨论】:

  • 好吧,我会的,这很有效,感谢@Mike 的提示!
猜你喜欢
  • 1970-01-01
  • 2014-08-08
  • 2020-11-20
  • 2022-11-11
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 2020-07-24
相关资源
最近更新 更多