Удаление папки SSIS в каталоге SSISDB с помощью Powershell
Я пытаюсь написать скрипт Powershell для повторного развертывания проекта в SSIS, и, не удаляя каталог, я просто хочу удалить папку, содержащую проект.
Ниже приведен код, который вызывает 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();
}