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