none
Автоматизированное удаление компьютеров из группы защиты RRS feed

  • Вопрос

  • Здравствуйте.

    Есть DPM 2012, используется для защиты файловых ресурсов на компьютерах пользователей (200+ шт).

    С недавнего времени появилась необходимость переименовать большинство компьютеров, соответственно в DPM-е необходимо удалить старые хосты из Protection Group, удалить старые записи о клиентах и добавить клиенты заново.

    Задачу по установке DPM агента, приаттачивание к серверу DPM и добавление в Protection Group удалось автоматизировать, а вот задачу по удалению уже неиспользуемых хостов из группы защиты и вообще из DPM автоматизировать пока не удается.

    Тут на TechNet уже мелькал подобный скрипт

    param([string] $PSName)
    
    $PGNAME = "usersbackup"
    $DPMServer = "dpm1.domain.ru"
    
    $pg = Get-ProtectionGroup -DPMServerName $DPMServer | Where-Object {$_.FriendlyName.ToUpper() -eq $PGNAME.ToUpper()}
    $Modpg = Get-ModifiableProtectionGroup -ProtectionGroup $pg
    $ds = Get-DataSource -ComputerNames $PSName -DPMServerName $DPMServer
    Remove-ChildDatasource -ProtectionGroup $Modpg -ChildDataSource $ds
    Set-ProtectionGroup -ProtectionGroup $Modpg
    
    Remove-ProductionServer.ps1 -DPMServerName $DPMServer -PSName $PSName

    проблема в том, что он удаляет только существующие хосты, с хостами, которых уже нет выдает ошибку (хост aa, к примеру)

    WARNING: Some entries could not be added for protection. Please see the file
    C:\Users\administrator\AppData\Local\Temp\2\InvalidClients--1862252730.txt for details.
    Remove-DPMChildDatasource : Cannot validate argument on parameter 'ChildDatasource'. The argument is null. Supply a non
    -null argument and try the command again.
    At C:\script\test\remove-host.ps1:12 char:65
    + Remove-ChildDatasource -ProtectionGroup $Modpg -ChildDataSource $ds
    +                                                                 ~~~
        + CategoryInfo          : InvalidData: (:) [Remove-DPMChildDatasource], ParameterBindingValidationException
        + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Internal.EnterpriseStorage.Dls.UI.Cmdlet.Prot
       ectionCmdLets.RemoveProtectableObject
    


    содержимое InvalidClients--1862252730.txt

    Following machines were not found in AD:
    
    aa
    
    Following machines with incompatible operating system are excluded:

    подскажите, пожалуйста, решение проблемы. И как вообще правильно поступать, если защищаемый хост переименовывается?


    26 марта 2013 г. 12:43

Ответы

  • Сам спросил - сам отвечаю.

    Код правда не оптимизирован и нет защиты от неправильных имен хостов (в таком случае он выполняется просто немного дольше)

    Add-PSSnapIn "Microsoft.DataProtectionManager.PowerShell" -ErrorAction SilentlyContinue
    
    $dpmserver = dpm1.domain.ru
    
    #в файл hosts4remove.txt записываем FQDN всех хостов, которые надо удалить из PG и на которых надо удалить клиента
    $List= Get-Content "C:\script\removehost\hosts4remove.txt"
    foreach ($host4deletion in $List) 
    {
        #получаем список групп защит
        $pgList = Get-ProtectionGroup $dpmserver
        
        #в моем случае группа защиты одна - usersbackup - имеет индекc 1, т.е. $pgList[1]
    
        #получаем список объектов защиты из группы защиты usersbackup
        $dslist = get-datasource($pglist[1])
    
        #поиск индекса элемента с именем $host4deletion в массиве объектов защиты
        $indx = 0..($dslist.Count -1) | where {$dslist.computer[$_] -eq $host4deletion}
    
        #удаление хоста из группы защиты
        $mpg = Get-ModifiableProtectionGroup $pgList[1]
        write-host ("Remove data source " + $dslist[$indx].computer)
        Remove-ChildDataSource -ProtectionGroup $mpg -ChildDataSource $dslist[$indx]
        Set-ProtectionGroup $mpg
        write-host ("Removing $host4deletion from PG complete") -ForeGroundColor Green
    
        #удаление агента из консоли DPM
        Remove-ProductionServer.ps1 $dpmserver "host4deletion
        write-host ("Removing dpm agent from $host4deletion complete") -ForeGroundColor Green
    }
    <# пара полезных команд
    
    #выводим все точки восстановления нашего элемента
    
    $rplist=get-recoverypoint $dslist[$indx]
    foreach($rp in $rplist){
    write-host $rp.representedpointintime
    }
    
    #список объектов защиты, у которых количество RecoveryPoints меньше 3х
    #$dslist |where {[int]$_.TotalRecoveryPoints -lt 3} |ft -Wrap -AutoSize ProductionServerName
    
    #>

    12 декабря 2013 г. 5:36
  • "И как вообще правильно поступать, если защищаемый хост переименовывается?"

    Проверено на практике

    1) Задания (архивируемые ресурсы) сервера, которого хотите переименовать, переводятся на закладке "Protection" выполняем "Stop protection of member" ОБЯЗАТЕЛЬНО с "Retain  proteced data". Т.е. удаляем задание, НО оставляем ресурсы.

    2) Удаляем агента с защищаемого сервера через консоль DPM.

    3) Меняем имя сервера.

    4) Ставим агент DPM на сервер.

    5) Создаем (или добавляем в уже имеющееся) задание ресурсы с переименованого сервера.


    Have a nice day !!!

    31 января 2014 г. 7:44
    Модератор

Все ответы

  • Сам спросил - сам отвечаю.

    Код правда не оптимизирован и нет защиты от неправильных имен хостов (в таком случае он выполняется просто немного дольше)

    Add-PSSnapIn "Microsoft.DataProtectionManager.PowerShell" -ErrorAction SilentlyContinue
    
    $dpmserver = dpm1.domain.ru
    
    #в файл hosts4remove.txt записываем FQDN всех хостов, которые надо удалить из PG и на которых надо удалить клиента
    $List= Get-Content "C:\script\removehost\hosts4remove.txt"
    foreach ($host4deletion in $List) 
    {
        #получаем список групп защит
        $pgList = Get-ProtectionGroup $dpmserver
        
        #в моем случае группа защиты одна - usersbackup - имеет индекc 1, т.е. $pgList[1]
    
        #получаем список объектов защиты из группы защиты usersbackup
        $dslist = get-datasource($pglist[1])
    
        #поиск индекса элемента с именем $host4deletion в массиве объектов защиты
        $indx = 0..($dslist.Count -1) | where {$dslist.computer[$_] -eq $host4deletion}
    
        #удаление хоста из группы защиты
        $mpg = Get-ModifiableProtectionGroup $pgList[1]
        write-host ("Remove data source " + $dslist[$indx].computer)
        Remove-ChildDataSource -ProtectionGroup $mpg -ChildDataSource $dslist[$indx]
        Set-ProtectionGroup $mpg
        write-host ("Removing $host4deletion from PG complete") -ForeGroundColor Green
    
        #удаление агента из консоли DPM
        Remove-ProductionServer.ps1 $dpmserver "host4deletion
        write-host ("Removing dpm agent from $host4deletion complete") -ForeGroundColor Green
    }
    <# пара полезных команд
    
    #выводим все точки восстановления нашего элемента
    
    $rplist=get-recoverypoint $dslist[$indx]
    foreach($rp in $rplist){
    write-host $rp.representedpointintime
    }
    
    #список объектов защиты, у которых количество RecoveryPoints меньше 3х
    #$dslist |where {[int]$_.TotalRecoveryPoints -lt 3} |ft -Wrap -AutoSize ProductionServerName
    
    #>

    12 декабря 2013 г. 5:36
  • "И как вообще правильно поступать, если защищаемый хост переименовывается?"

    Проверено на практике

    1) Задания (архивируемые ресурсы) сервера, которого хотите переименовать, переводятся на закладке "Protection" выполняем "Stop protection of member" ОБЯЗАТЕЛЬНО с "Retain  proteced data". Т.е. удаляем задание, НО оставляем ресурсы.

    2) Удаляем агента с защищаемого сервера через консоль DPM.

    3) Меняем имя сервера.

    4) Ставим агент DPM на сервер.

    5) Создаем (или добавляем в уже имеющееся) задание ресурсы с переименованого сервера.


    Have a nice day !!!

    31 января 2014 г. 7:44
    Модератор