Удаление папки SSIS в каталоге SSISDB с помощью Powershell

Я пытаюсь написать скрипт Powershell для повторного развертывания проекта в SSIS, и, не удаляя каталог, я просто хочу удалить папку, содержащую проект.

FolderToDrop в SSISDB

Ниже приведен код, который вызывает Drop() на FolderToDrop:

$integrationServices = New-Object $Namespace".IntegrationServices" $sqlConnection
$catalog = $integrationServices.Catalogs["SSISDB"]
if ($catalog.Folders.Contains("FolderToDrop")) {
  $catalog.Folders["FolderToDrop"].Drop() 
}

Исключение, которое выдается:

Exception calling "Drop" with "0" argument(s): "Operation 'Drop' on object 'CatalogFolder[@Name='FolderToDrop']' failed during execution."
At C:\Projects\Scripts\Deploy.ps1:36 char:29
+     $catalog.Folders["FolderToDrop"].Drop <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

Любые идеи относительно того, что мне не хватает при попытке удалить эту папку?

3 ответа

Решение

Может показаться, что вам нужно удалить среды и проекты из папки, прежде чем удалять ее.

$folder = $catalog.Folders[$FolderName]

if($folder.Environments.Contains($EnvironmentName)) {
    $folder.Environments[$EnvironmentName].Drop()
}

if($folder.Projects.Contains($ProjectName)) {
    $folder.Projects[$ProjectName].Drop()
}

$folder.Drop()

Если вы хотите удалить все папки без указания имени среды / проекта, вы можете использовать:

function CatalogFolderDrop($catalog, $folderName)
{
    while ($catalog.Folders[$folderName].Environments.Count -ne "0")
    {
        $env = $catalog.Folders[$folderName].Environments | Select-Object -First 1
        $catalog.Folders[$folderName].Environments[$env.Name].Drop();
    }
    while ($catalog.Folders[$folderName].Projects.Count -ne "0")
    {
        $prj = $catalog.Folders[$folderName].Projects | Select-Object -First 1
        $catalog.Folders[$folderName].Projects[$prj.Name].Drop();
    }
    $catalog.Folders[$folderName].Drop();
}
    private void CatalogFolderDrop(String fdr) 
    {
        while (mtIntegrationServices.Catalogs["SSISDB"].Folders[fdr].Environments.Count > 0)
        {
            mtIntegrationServices.Catalogs["SSISDB"].Folders[fdr].Environments.ElementAt(0).Drop();
        }
        while (mtIntegrationServices.Catalogs["SSISDB"].Folders[fdr].Projects.Count > 0)
        {
            mtIntegrationServices.Catalogs["SSISDB"].Folders[fdr].Projects.ElementAt(0).Drop();
        }
        mtIntegrationServices.Catalogs["SSISDB"].Folders[fdr].Drop();
    }
Другие вопросы по тегам