是否可以通过Powershell或API仅使用管道名称检查Azure数据工厂管道的当前状态?
我已经看到您可以使用Get-AzDataFactoryV2PipelineRun,但这需要您拥有pipelinerunid。
我的目标是构建一个脚本,首先检查管道运行是否正在运行,如果没有触发它。我想避免脚本触发管道运行,这样就会有多个管道运行同时运行。
我已经用PowerShell完成了这项工作,尽管我确信有更好的方法,但这是我提出的解决方案。
它基本上会获取一周前到今天的所有管道运行ID,对每个ID进行迭代,如果找到一个"正在进行"的ID,它将不会做任何事情。如果没有管道运行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
}
使用.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来实现。
p.S-如果管道数超过100(针对特定状态(,则可能需要使用Continuation令牌。