Задача. Есть много машин vm на vSphere. Нужно что бы машины vm сами попадали в задание по бэкапу. Так как 3 разных домена будем делать три задания и три разных учетные записи. Плюс еще отдельным заданием linux машины.
Буду назначать на VM разные tag с помощью powercli . Так же должна быть возможность исключить из бэкапа vm через vSphere
В vSphere создаём категорию Backup
в ней TAgs
После этого написал скрипт для назначение tags виртуалкам по критериям.
$vcenter = "vcsa01" Connect-VIServer $vcenter $Datacenter_name = "Moscow*" $FileContent= ` Get-Datacenter -Name $Datacenter_name | Get-Cluster | Where-Object {$_.Name -notlike 'L05' } | Get-VM ` | Select name,powerstate,guest,@{Name="Tags";Expression={(Get-TagAssignment -Entity $_).Tag.Name}} ` | Where-Object {$_.Name -like "*Roga.ru" -and $_.powerstate -match "on" -and $_.Tags -notcontains "Roga Windows Backup" -and $_.guest -like "*windows*" -and $_.Tags -notcontains "Exclude BackupVM"} foreach($VMinFile in $FileContent) { Get-VM $VMinFile.name | New-TagAssignment -Tag "Roga Windows Backup" } $kopytovm= ` Get-Datacenter -Name $Datacenter_name | Get-Cluster | Where-Object {$_.Name -notlike 'CL05' } | Get-VM ` | Select name,powerstate,guest,@{Name="Tags";Expression={(Get-TagAssignment -Entity $_).Tag.Name}} ` | Where-Object {$_.Name -like "*kopyto.ru" -and $_.powerstate -match "on" -and $_.Tags -notcontains "kopyto Windows Backup" -and $_.guest -like "*windows*" -and $_.Tags -notcontains "Exclude BackupVM"} foreach($kopytovms in $kopytovm) { Get-VM $kopytovms.name | New-TagAssignment -Tag "kopyto Windows Backup" } $teexvm= ` Get-Datacenter -Name $Datacenter_name | Get-Cluster | Where-Object {$_.Name -notlike 'CL05' } | Get-VM ` | Select name,powerstate,guest,@{Name="Tags";Expression={(Get-TagAssignment -Entity $_).Tag.Name}} ` | Where-Object {$_.Name -like "*hvost.ru" -and $_.powerstate -match "on" -and $_.Tags -notcontains "hvost Windows Backup" -and $_.guest -like "*windows*" -and $_.Tags -notcontains "Exclude BackupVM"} foreach($teexvms in $teexvm) { Get-VM $teexvms.name | New-TagAssignment -Tag "hvost Windows Backup" } $linuxxvm= ` Get-Datacenter -Name $Datacenter_name | Get-Cluster | Where-Object {$_.Name -notlike 'CL05' } | Get-VM ` | Select name,powerstate,guest,@{Name="Tags";Expression={(Get-TagAssignment -Entity $_).Tag.Name}} ` | Where-Object { $_.powerstate -match "on" -and $_.Tags -notcontains "Linux Backup" -and $_.guest -like "*Linux*" -and $_.Tags -notcontains "Exclude BackupVM"} foreach($linuxxvms in $linuxxvm) { Get-VM $linuxxvms.name | New-TagAssignment -Tag "Linux Backup" } #Disconnect-VIServer vcsa
В скрипте для TAg “Roga Windows” Backup фильтрует по fqdn, power on и Windows . Так как у нас множественно доменов все вирт идёт с fqdn.
В tag Linux Backup фильтрует по Linux и power . Так же прописано исключение если указан tag Exclude BackupVM
Бонус. скрипт который переименовывает windows виртуалки так как они называются в dns
$vmms=Get-Datacenter -Name 'Moscow DataSpace' | Get-Cluster | Where-Object {$_.Name -notlike 'vSAN-CL05-Horizon' } | Get-VM | where {$_.powerstate -match "on" -and $_.Guest -like '*windows*' } ` | Select Name,@{N="DNS";E={$_.Guest.HostName}}| where {$_.DNS -like '*beeper.ru*' -and $_.Name -notlike '*kopyto.ru*'} Write-Host #╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗# $Host.UI.RawUI.WindowTitle = "Старое название" #╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝# $vmms #╔════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╗# $Host.UI.RawUI.WindowTitle = "Новое" #╚════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╝# #Раскоментить когда все проверишь. <# Foreach ($vmm in $vmms) { $old=$vmm.name $new=$vmm.DNS Get-VM -Name $old | Set-vm -name $new -confirm:$false } #> # Запустить если в переменой пусто #Clear-Variable -Name "vmms"
Так же нужен скрипт исключения . Если установить tag Exclude BackupVM на vm то все остальные tag будут сняты с этой машины и в задании veeam она пропадёт.
$VMs=` Get-Datacenter -Name $Datacenter_name | Get-Cluster | Where-Object {$_.Name -notlike 'CL05' } | Get-VM ` | Select name,powerstate,guest,@{Name="Tags";Expression={(Get-TagAssignment -Entity $_).Tag.Name}} ` | Where-Object {$_.Tags -contains "Exclude BackupVM" -and $_.Tags -like "*Backup" } $VMs if ($VMs -eq $null -or $VMs.Count -eq 0) { return } else { $VMs= get-vm -name $VMs.name foreach ($VM in $VMs) { $VM | Get-TagAssignment -tag "Roga Windows Backup" | Remove-TagAssignment -Confirm:$false $VM | Get-TagAssignment -tag "kopyto Windows Backup" | Remove-TagAssignment -Confirm:$false $VM | Get-TagAssignment -tag "hvost Windows Backup" | Remove-TagAssignment -Confirm:$false $VM | Get-TagAssignment -tag "Linux Backup" | Remove-TagAssignment -Confirm:$false } }
После скриптов делаем задание в task scheduler
Добавляем прав для уз от которой будет запускаться task
Start Menu > Administrative Tools > Local Security Policy >
Local Policies > User Rights Assignment > Log On As Batch Job
После сделал батик для запуска ps1
echo off cd D:\Programs\Vmware tag powershell -ExecutionPolicy ByPass -file "%~dp0\tag.ps1"
в tag1.ps1 оба скрипта по добавлению tag и исключение из бэкап.
В Task
Раз в день в 21-00
Задание в veeam
Все остальное в задании по желанию.
Similar Posts:
- Как сделать отчет vm с тегами(tags) и записями блокнота(Note) с помощью Vmware powercli в одну строку.
- Как найти кому принадлежат несвязанные объекты vSAN Virtual Objects Unknown object type через powershell powercli
- Как мониторить количество пользователей 1c web клиент.
- Как мониторить 1с кластер по пользователям с помощью grafana.
- Как создать контакты exchange почты из домена организации с помощью powershell.