0

我是 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 显然存在于该位置,并且我没有得到任何错误输出来帮助我进行调试。谢谢!

4

1 回答 1

3

看起来您的调用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 次后我们认为这是一个错误的脚本。

于 2017-04-12T22:49:05.103 回答