作为Azure Data Factory的一部分,我如何解压缩和执行批处理服务



Azure数据工厂可以执行自定义活动作为批处服务作业。这些作业可以从在执行之前复制的存储帐户中的.exe(和相关依赖关系(运行。

可以使用的存储帐户中的文件有一个限制:

ResourceFiles的总大小不能超过32768个字符

该解决方案似乎是将存储帐户中的文件汇总为命令的一部分。这篇文章建议在Azure Data Factory中运行批处理服务命令:

unzip.exe [myzipfilename]&&myexename.exe [cmdlineargs]

在Windows 10机器上本地运行此功能正常。将其设置为批处理服务自定义活动上的命令参数(使用云服务Windows Server 2019 OS Image App池(会导致:

注意:文件名不匹配:&&

感觉就像是我缺少的基本内容,但我已经尝试了各种排列,无法使其工作。

分享可能发生的可能性很少,我同意缺少一些小的东西,如果您想分享您正在尝试的确切命令行,请随时分享。

几个可能导致这种行为的想法:

  • 请尝试从批处理角度来尝试您的命令行,例如: cmd /c "Unzip.exe [myZipFilename] && MyExeName.exe [cmdLineArgs]"

  • 确保您的文件存在,即一种可能性是:最终命令试图使用&&的空字符串,即cmd /c "unzip.exe "empty" && ...

希望上述两个修复之一,或者随时添加更多细节ET。al。

,如果不完全了解ADF在Windows批处理服务节点上运行自定义活动命令的上下文,我更改了我的设置,以避免期望Unzip.exe存在(在运行时似乎并非没有在cmd /c "Unzip.exe"下,而不是仅以Unzip.exe作为命令(。

现在,我的存储帐户内容备份自定义活动:

  • operutable.zip(我的.NET核心控制台应用程序发布了针对所有依赖性的Windows(
  • unzip.exe(取自我当地机器上的git bash(
    • 包括msys-2.0.dll和msys-bz2-1.dll依赖关系

ADF中的命令是:

cmd /c "Unzip.exe executable-with-deps.zip && executable.exe"

我遇到了相同的问题,并用简短的powershell脚本解决了它,该脚本提取我的zip并启动我的程序。通用脚本看起来像(称为unzipandrun.ps1(:

[CmdletBinding()]
param (    
    [Parameter(Mandatory = $true)][String]$zipFile,    
    [Parameter(Mandatory = $true)][String]$executable,    
    [Parameter(Mandatory = $true)][String]$prm
)
#######
# Unzip
#######
Add-Type -AssemblyName System.IO.Compression.FileSystem
function Unzip
{
    param([string]$zipfile, [string]$outpath)
    [System.IO.Compression.ZipFile]::ExtractToDirectory($zipfile, $outpath)
}
"Start Unzip $zipFile" | Write-Host
Unzip $zipFile $pwd
###########
# Start exe
###########
"Start $executable $prm" | Write-Host
$cmd = "& $executable $prm"
Invoke-Expression $cmd

因此,如果我想在Azure批处理上使用参数/t 123启动myApp.exe,我将开始:

PowerShell -NoProfile -ExecutionPolicy Bypass -Command "unzipandrun.ps1 '/t 123'"

另一个选项,它不需要与zip文件一起复制其他文件:

cmd /c "tar -xf MyExe.zip & MyExe.exe"

tar -xf MyExe.zip & MyExe.exe给出了一个错误,但是cmd /c "tar -xf MyExe.zip & MyExe.exe"在Windows 10

上正常工作

相关内容

  • 没有找到相关文章

最新更新