Azure Automation Powershell runbook 静默无法加载程序集
Azure Automation Powershell runbook silently fails to LoadAssembly
我是 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 的程度,然后就崩溃了,运行 脚本重复了三次才放弃。任何想法我做错了什么? DLL 显然存在于那个位置,我没有得到任何错误输出来帮助我调试。谢谢!
您对 LoadFrom
的调用似乎生成了大量输出。如果您以交互方式 运行 您的代码并像这样更改它,您可以看到这一点:[System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-String -Width 500000000
,它实际上会生成一个 OutOfMemoryException
。或者,如果您像这样修改您的 运行 书籍:[System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-Null
,您的工作将 运行。现在,如此大量的输出正在使 运行 时间崩溃。 (这可能是 运行图书执行引擎中的错误。)
但是,不要那样做! LoadFrom
、LoadPartial
等...这些在 PowerShell 3 中已弃用。
好处是有一个未被弃用的 PowerShelly 方法来做你想做的事。只需使用 Add-Type -Path $assemblyPath
而不是 [System.Reflection.Assembly]::LoadFrom($assemblyPath)
.
仅供参考,每当您看到您的工作暂停和消息时,"The job action 'Activate' cannot be run, because the process stopped unexpectedly. The job action was attempted 3 times." - 这意味着您已经完全破坏了 运行 时间和整个工作环境。 :) 我们尝试了 3 次,以防我们在加载脚本或构建环境时出错,但 3 次后我们认为这是一个错误的脚本。
我是 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 的程度,然后就崩溃了,运行 脚本重复了三次才放弃。任何想法我做错了什么? DLL 显然存在于那个位置,我没有得到任何错误输出来帮助我调试。谢谢!
您对 LoadFrom
的调用似乎生成了大量输出。如果您以交互方式 运行 您的代码并像这样更改它,您可以看到这一点:[System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-String -Width 500000000
,它实际上会生成一个 OutOfMemoryException
。或者,如果您像这样修改您的 运行 书籍:[System.Reflection.Assembly]::LoadFrom($assemblyPath) | Out-Null
,您的工作将 运行。现在,如此大量的输出正在使 运行 时间崩溃。 (这可能是 运行图书执行引擎中的错误。)
但是,不要那样做! LoadFrom
、LoadPartial
等...这些在 PowerShell 3 中已弃用。
好处是有一个未被弃用的 PowerShelly 方法来做你想做的事。只需使用 Add-Type -Path $assemblyPath
而不是 [System.Reflection.Assembly]::LoadFrom($assemblyPath)
.
仅供参考,每当您看到您的工作暂停和消息时,"The job action 'Activate' cannot be run, because the process stopped unexpectedly. The job action was attempted 3 times." - 这意味着您已经完全破坏了 运行 时间和整个工作环境。 :) 我们尝试了 3 次,以防我们在加载脚本或构建环境时出错,但 3 次后我们认为这是一个错误的脚本。