Как удалить ADFPipeline, имеющий ссылки принудительно - PullRequest
0 голосов
/ 25 октября 2019

Я на самом деле немного автоматизации для моего АПД. Как часть этого, я пытаюсь удалить все конвейеры ADF V2. Проблема в том, что у моих конвейеров много ссылок с разными конвейерами.

$ADFPipeline = Get-AzDataFactoryV2Pipeline -DataFactoryName $(datafactory-name) -ResourceGroupName $(rg)



$ADFPipeline | ForEach-Object { Remove-AzDataFactoryV2Pipeline -ResourceGroupName $(rg) -DataFactoryName $(datafactory-name) -Name  $_.name -Force }

И большую часть времени я получаю сообщение об ошибке типа

Невозможно удалить документ, так как на него ссылается "blabla"

Я понимаю ошибку, что он говорит некоторые ссылки и не может быть удален. Однако, когда я попытался удалить то же самое на портале Azure, независимо от ссылки, я смог удалить. Поэтому я хочу найти способ, чтобы можно было сказать, что Powershell, даже если у него есть ссылка, принудительно удаляет его

Любые другие материалы очень ценятся!

1 Ответ

1 голос
/ 31 октября 2019

Здравствуйте и спасибо за вопрос. Согласно документу Remove-AzDataFactoryV2Pipeline doc , флаг -Force просто пропускает запрос подтверждения. На самом деле он не «принудительно» удаляет данные, несмотря на ошибки.

Поскольку вы уже выполняете автоматизацию, я мог бы предложить использовать сообщение об ошибке для рекурсивной попытки удаления ссылающегося конвейера. $error[0] получает самую последнюю ошибку.

(псевдокод)

try_recurse_delete( pipeline_name )
    do_delete(pipeline_name)
    if not $error[0].contains("referenced by " + pipeline_name)
        then return true
    else
        try_recurse_delete( get_refrencer_name($error[0]) )

Учитывая, что зависимости конвейера могут быть отношением "многие ко многим", последующие конвейеры в вашем цикле for-each могутуже будут удалены рекурсией. Вам придется адаптировать свой код, чтобы он реагировал на ошибки типа «конвейер не найден».

...