是否可以通过Powershell或API通过仅管道名称来检查Azure数据工厂管道运行的当前状态?
我已经看到您可以使用Get-AzDataFactoryV2PipelineRun,但这需要您拥有pipelinerunid。
我的目标是构建一个脚本,该脚本将首先检查管道运行是否正在运行以及是否触发它。我想避免脚本触发管道运行,以便同时运行多个管道运行。
答案 0 :(得分:1)
我已经使用PowerShell完成了此工作,尽管我确定有更好的方法,但这是我想出的解决方案。
基本上,它获取从一周前到今天的所有管道运行ID,并对其进行迭代,并且如果发现一个“ InProgress”,它将不会执行任何操作。如果没有管道运行ID处于该状态,则执行它。
您显然需要事先进行身份验证才能运行此程序:
$before = get-date
$after = (get-date).AddDays(-7)
$runIds = Get-AzDataFactoryV2PipelineRun -DataFactoryName $DataFactoryName -ResourceGroupName $ResourceGroupName -LastUpdatedAfter $after -LastUpdatedBefore
$before
$shouldRun = 1
$runIds | ForEach-Object {
## Check for all statuses
if($_.Status -eq "InProgress"){
$shouldRun = 0
}
}
if($shouldRun){
## Logic to run pipeline, this is just an example.
Invoke-AzDataFactoryV2Pipeline -PipelineName $PipelineName -ResourceGroupName $ResourceGroupName -DataFactoryName $DataFactoryName
}
答案 1 :(得分:1)
使用.Net Core SDK
ServiceClientCredentials cred = new TokenCredentials(accessToken);
using (var client = new DataFactoryManagementClient(cred) { SubscriptionId = subscriptionId })
{
RunQueryFilter filter1 = new RunQueryFilter("PipelineName", "Equals", new List<string> { "ActualPipelineName" });
RunQueryFilter filter2 = new RunQueryFilter("Status", "Equals", new List<string> { "Queued" });
DateTime before = DateTime.UtcNow;
DateTime after = before.AddHours(-4);
RunFilterParameters param = new RunFilterParameters(after, before, null, new List<RunQueryFilter> { filter1, filter2 }, null);
PipelineRunsQueryResponse pipelineResponse = client.PipelineRuns.QueryByFactory(resourceGroupName, azureDataFactoryName, param);
int? QueuedPipelines = pipelineResponse?.Value?.Count;
}
在过滤器1中,可以使用“ In”运算符查询多个PipelineName。
在filter2中,您可以使用ADF的任何有效状态(成功,进行中,已排队等)
使用REST API也可以实现同样的目的。
PS-如果管道数量超过100(对于该特定状态),则可能需要使用Continuation令牌。