【问题标题】:Can custom console application be executed in Azure (PowerShell) Runbook?可以在 Azure (PowerShell) Runbook 中执行自定义控制台应用程序吗?
【发布时间】:2019-12-25 17:53:13
【问题描述】:

我可以在 Azure Runbook(PowerShell 或任何其他)中使用我自己/自定义的控制台应用程序吗?

当我尝试运行自己的控制台应用程序时(在retrieving it from Azure Storage 之后),它失败了。


当我尝试简单地执行它时:

.\myapp.exe

我明白了:

程序“myapp.exe”运行失败:操作被用户取消


当我使用System.Diagnostics.Process:

$process = New-Object System.Diagnostics.Process
$process.StartInfo.FileName = $path
$process.StartInfo.UseShellExecute = $False
$process.Start()

我得到一个更有意义的错误:

使用“0”参数调用“开始”的异常:“此程序被组策略阻止。有关详细信息,请联系 您的系统管理员”


Azure 自动化中是否有任何设置(我可以切换)以允许执行自定义应用程序?还是在受限的 Runbook 环境中根本不可能?

【问题讨论】:

    标签: azure powershell azure-automation azure-runbook


    【解决方案1】:

    感谢您与我们联系!不幸的是,目前不支持您在 Azure 自动化运行手册中运行 .exe 的要求。是的,您可以使用 Azure Web 作业。另一位客户最近提出了类似的问题,并通过利用 Azure Web 作业解决了他们的问题。为了澄清,您可以参考this MSDN 线程。希望对您有所帮助。

    干杯!

    【讨论】:

    • 感谢您的回答。是的,我知道我可以使用 WebJob。就是 RunBook 更轻量级(并且不需要网站)。
    【解决方案2】:

    很遗憾,Azure Automation Runbook 暂时不支持。Here is a feedback Automation PG 团队回复,没有更新。

    【讨论】:

    • 嗨@Martin,如果我的回答有帮助,请标记我:) 希望你有美好的一天!
    • 感谢您的回答。让我们看看是否有人提供了更好的答案,或者至少有官方和最新的来源。
    【解决方案3】:

    你可以

    1. 在应用服务上将控制台应用作为 Azure WebJob 运行,并通过 SCM 端点远程调用它,或者,
    2. 将控制台应用程序编译为 PowerShell cmdlet

      using System.Management.Automation; 
      
      namespace MyApp
      {
        [Cmdlet(VerbsCommunications.Send, "RunApplication")]
        public class RunApplicationCommand : Cmdlet
        {
          protected override void ProcessRecord()
          {
            // App Code goes here
          }
        }
      }
      
      • 将编译后的 DLL 附加到 PowerShell 模块
      • 使用模块将 PowerShell 模块部署到自动化帐户 > 导入
      • 从运行手册调用 cmdlet

    【讨论】:

    • 你所说的“将控制台应用程序编译为 PowerShell cmdlet”是什么意思 – 实际上你似乎建议我在 PowerShell 中重写我的控制台应用程序,对吧?
    • 不,我没有,我给了你代码示例。只需将您的应用程序代码复制粘贴到此示例中即可。在 Visual Studio 中编译它,它将返回可以作为 powershell 模块附加的 .DLL 文件。这意味着您仍然拥有使用 C# 编写的控制台应用程序,可以直接从 Azure 自动化服务上的 powershell 调用。
    • 对不起,我没有注意到它是 C# 代码。 -- 无论如何,我的应用程序不是 C#,甚至不是 .NET。 -- 无论如何这是一个有用的答案(但对我来说不是)。
    • 请注意,您可以在 Runbook 的 PowerShell 中使用常规的 .NET(C# 或任何其他)程序集。所以实际上,没有必要将 .NET 代码转换为 cmdlet。
    • 这意味着你应该选择选项 1。所以将这个 .exe 作为 webjob 运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2022-01-20
    相关资源
    最近更新 更多