Лучший отвечающий
Автоматизированное удаление компьютеров из группы защиты

Вопрос
-
Здравствуйте.
Есть 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:
подскажите, пожалуйста, решение проблемы. И как вообще правильно поступать, если защищаемый хост переименовывается?
- Изменено Arty Romanenko 26 марта 2013 г. 12:44
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 #>
- Предложено в качестве ответа EugeneLeitanMVP, Moderator 31 января 2014 г. 7:31
- Помечено в качестве ответа EugeneLeitanMVP, Moderator 21 марта 2014 г. 5:14
12 декабря 2013 г. 5:36 -
"И как вообще правильно поступать, если защищаемый хост переименовывается?"
Проверено на практике
1) Задания (архивируемые ресурсы) сервера, которого хотите переименовать, переводятся на закладке "Protection" выполняем "Stop protection of member" ОБЯЗАТЕЛЬНО с "Retain proteced data". Т.е. удаляем задание, НО оставляем ресурсы.
2) Удаляем агента с защищаемого сервера через консоль DPM.
3) Меняем имя сервера.
4) Ставим агент DPM на сервер.
5) Создаем (или добавляем в уже имеющееся) задание ресурсы с переименованого сервера.
Have a nice day !!!
- Предложено в качестве ответа EugeneLeitanMVP, Moderator 31 января 2014 г. 7:44
- Отменено предложение в качестве ответа EugeneLeitanMVP, Moderator 5 марта 2014 г. 6:31
- Помечено в качестве ответа EugeneLeitanMVP, Moderator 21 марта 2014 г. 5:14
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 #>
- Предложено в качестве ответа EugeneLeitanMVP, Moderator 31 января 2014 г. 7:31
- Помечено в качестве ответа EugeneLeitanMVP, Moderator 21 марта 2014 г. 5:14
12 декабря 2013 г. 5:36 -
"И как вообще правильно поступать, если защищаемый хост переименовывается?"
Проверено на практике
1) Задания (архивируемые ресурсы) сервера, которого хотите переименовать, переводятся на закладке "Protection" выполняем "Stop protection of member" ОБЯЗАТЕЛЬНО с "Retain proteced data". Т.е. удаляем задание, НО оставляем ресурсы.
2) Удаляем агента с защищаемого сервера через консоль DPM.
3) Меняем имя сервера.
4) Ставим агент DPM на сервер.
5) Создаем (или добавляем в уже имеющееся) задание ресурсы с переименованого сервера.
Have a nice day !!!
- Предложено в качестве ответа EugeneLeitanMVP, Moderator 31 января 2014 г. 7:44
- Отменено предложение в качестве ответа EugeneLeitanMVP, Moderator 5 марта 2014 г. 6:31
- Помечено в качестве ответа EugeneLeitanMVP, Moderator 21 марта 2014 г. 5:14
31 января 2014 г. 7:44Модератор