Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何对Azure Data Factory V2中现有的Azure VM运行远程命令(powershell/bash)?_Azure_Powershell_Azure Data Factory 2_Azure Automation - Fatal编程技术网

如何对Azure Data Factory V2中现有的Azure VM运行远程命令(powershell/bash)?

如何对Azure Data Factory V2中现有的Azure VM运行远程命令(powershell/bash)?,azure,powershell,azure-data-factory-2,azure-automation,Azure,Powershell,Azure Data Factory 2,Azure Automation,我一直在试图找到一种方法,使用Azure Data Factory V2对我现有的一个Azure VM运行一个简单的命令 迄今为止的选择: 自定义活动/Azure批处理不允许我将现有VM添加到池中 Azure函数-我没有玩过这个,但我没有找到任何使用AZ函数的文档 Azure Cloud Shell-我尝试过使用浏览器UI,它可以工作,但是我找不到通过ADF V2实现这一点的方法 用例如下所示: 在任务调度器中有一些本地运行的任务(Azure VM),我想使用ADF来协调这些任务,因为其他任

我一直在试图找到一种方法,使用Azure Data Factory V2对我现有的一个Azure VM运行一个简单的命令

迄今为止的选择:

  • 自定义活动/Azure批处理不允许我将现有VM添加到池中
  • Azure函数-我没有玩过这个,但我没有找到任何使用AZ函数的文档
  • Azure Cloud Shell-我尝试过使用浏览器UI,它可以工作,但是我找不到通过ADF V2实现这一点的方法
用例如下所示:

在任务调度器中有一些本地运行的任务(Azure VM),我想使用ADF来协调这些任务,因为其他任务都在ADF中,这些任务通常是python应用程序,用于恢复SQL备份和/或清除某些文件夹

i、 e.
sqdb还原-r myDatabase

其中
sqldb restore
是安装本地python库后在本地识别的命令。不幸的是,python应用程序需要在VM中本地运行


有什么建议吗?谢谢。

这看起来像是Azure Automation支持的一个使用混合工作程序的用例。试着在这里阅读:

您可以使用web活动在ADFv2中使用webhooks调用Runbook


希望这有帮助

多亏了@martin esteban zurita,他的回答帮助我得到了我需要的东西,这是一个美丽而有趣的实验

重要的是要理解,Azure中的资源编排(VMs、服务、DevOps)有很多方面都用到了这种自动化,这种自动化可以通过Powershell和/或Python实现

在这种特殊情况下,我不需要修改/维护/编排任何Azure资源,我需要实际在我的一个现有VM中远程运行Bash/Powershell命令,其中我有多个Powershell/Bash命令在“任务调度器”中重复运行。 “任务调度器”给我的数据管道增加了不必要的开销,因为它无法与ADF通信

此外,Azure Automation本机仅在Azure Cloud Shell中运行Powershell/Python命令,这对于协调资源(如打开/关闭Azure VM、添加/删除其他Azure服务的权限、运行维护或清除进程等)非常有用,但我仍然无法在现有VM中本地运行命令。这就是这张照片的来源。混合工人群体

这些是完成这个用例的步骤

1。创建Azure自动化帐户

2。我现有VM中的Windows混合工作程序。在我的情况下,这很棘手,因为我的代理给了我一些错误。我最终下载了Nuget软件包并手动安装了它。

.\New-OnPremiseHybridWorker.ps1 -AutomationAccountName <NameofAutomationAccount> -AAResourceGroupName <NameofResourceGroup>
-OMSResourceGroupName <NameofOResourceGroup> -HybridGroupName <NameofHRWGroup>
-SubscriptionId <AzureSubscriptionId> -WorkspaceName <NameOfLogAnalyticsWorkspace>
4。创建一个指向混合工作程序VM的Runbook Webhook

4。在ADF中创建一个,其中将通过POST方法调用上述PowerShell runbook脚本

重要提示:当我创建webhook活动时,它在10分钟后超时(默认值),因此我在Azure Automation帐户中注意到,我实际上正在获取包含JSON结构的输入数据(WEBHOOKDATA),其中包含以下元素:

  • WebhookName
  • RequestBody(这个包含您在Body中添加的任何内容,外加一个名为callBackUri的默认元素)
我所要做的就是从Azure自动化调用
callBackUri
。这就是为什么我在PowerShell runbook代码中添加了
Invoke WebRequest-Uri$callBackUri-Method POST
。这样,ADF成功/失败,而不是超时


在我的虚拟机中安装hybrid worker时,我遇到了许多其他细节问题,但这些细节更具体到您的环境/公司。

谢谢Martin,我会尝试一下,我以前读过,但我不知道ADF V2中的Webhook,我会尝试并回复您。我只在PowerShell中使用过它,但是您应该能够创建一个runbook脚本,该脚本使用powershell调用python,为这个runbook创建一个webhook,并使用ADF调用它。不要害怕问你是否需要更多的帮助:)非常感谢,在了解了如何使用混合worker和Runbook几个小时后,我终于能够重现这个用例。我将在关于这个问题的单独回答中提供完整答案,但是你的建议值得回答。:)太棒了,索尔!
[CmdletBinding()]
Param
([object]$WebhookData) #this parameter name needs to be called WebHookData otherwise the webhook does not work as expected.
$VerbosePreference = 'continue'

#region Verify if Runbook is started from Webhook.

# If runbook was called from Webhook, WebhookData will not be null.
if ($WebHookData){

    # Collect properties of WebhookData
    $WebhookName     =     $WebHookData.WebhookName
    # $WebhookHeaders  =     $WebHookData.RequestHeader
    $WebhookBody     =     $WebHookData.RequestBody

    # Collect individual headers. Input converted from JSON.
    $Input = (ConvertFrom-Json -InputObject $WebhookBody)
    # Write-Verbose "WebhookBody: $Input"
    #Write-Output -InputObject ('Runbook started from webhook {0} by {1}.' -f $WebhookName, $From)
}
else
{
   Write-Error -Message 'Runbook was not started from Webhook' -ErrorAction stop
}
#endregion

# This is where I run the commands that were in task scheduler

$callBackUri = $Input.callBackUri

 # This is extremely important for ADF
 Invoke-WebRequest -Uri $callBackUri -Method POST