Azure Data Factory可以将自定义活动作为批处理服务作业执行。这些作业可以从存储帐户中的.exe(及相关的依赖项)运行,并在执行之前复制到整个帐户。
存储帐户中可以使用的文件受到限制:
resourceFiles的总大小不能超过32768个字符
解决方案似乎是将文件压缩到存储帐户中,并作为命令的一部分解压缩。 This post建议在Azure数据工厂中以以下方式运行批处理服务命令:
Unzip.exe [myZipFilename] && MyExeName.exe [cmdLineArgs]
在Windows 10计算机上本地运行此程序效果很好。在批处理服务自定义活动(使用Cloud Services Windows Server 2019 OS映像应用程序池)上将此设置为Command参数会导致:
警告:文件名不匹配:&&
感觉上好像缺少一些基本的东西,但是我尝试了各种排列,但无法使其正常工作。
答案 0 :(得分:3)
分享几乎没有什么可能发生的可能性,我同意缺少一些小东西,如果您想共享所尝试的确切命令行,则可以随意共享。
很少有可能导致这种行为的想法:
请从cmd /c "Unzip.exe [myZipFilename] && MyExeName.exe [cmdLineArgs]"
确保您的文件存在,即一种可能性是:最后,该命令尝试使用&&
即cmd /c "unzip.exe "empty" && ...
希望上述2个修复程序之一,或者随时添加更多细节等。
答案 1 :(得分:2)
在不了解ADF在Windows批处理服务节点上运行自定义活动命令的上下文的情况下,我更改了设置以避免期望Unzip.exe存在(在cmd /c "Unzip.exe"
下运行时似乎不存在)仅以Unzip.exe
作为命令)。
现在支持自定义活动的存储帐户内容包括:
那么ADF中的命令是:
cmd /c "Unzip.exe executable-with-deps.zip && executable.exe"
答案 2 :(得分:0)
我遇到了同样的问题,并用一个简短的 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'"