Пока у меня копится материал для публикаций, отправлю небольшой скрипт написанный на PowerShell’e. С его помощью я могу собирать базовые данные по виртуальным машинам с vCenter в csv файл. Все строчки кода имеют свой комментарий объясняющий «что, зачем и почему», если надо будет что-то подправить.
Что именно собирается:
— ipv4 адреса
— диски
— папка, в которой находится ВМ (не родительская, а именно та папка, в которой она находится). Условно, у вас вм находится по пути SOME-APP / DB / DB-vm-01, исходят отсюда, скрипт запишет в качестве папки данной ВМ DB
— хост, на котором развернута ВМ
— ОС которую вы указывали при установке, как совместимую (GuestOS)
— выделенные RAM, CPU
— имя ВМ
Данное добро протестировано и работает на версии vCenter 8.0.2
# Подключение к vCenter Server
Connect-VIServer -Server example.com -User username123 -Password password123
# Массив для хранения данных
$data = @()
# Проход по каждой виртуальной машине
foreach ($vm in (Get-VM)) {
# Получение IPv4-адресов виртуальной машины, если доступны
$ipv4Addresses = $vm.Guest.IPAddress | Where-Object { $_ -match '\d+\.\d+\.\d+\.\d+' }
# Объединение IPv4 адресов в одну строку через запятую
$ipAddress = $ipv4Addresses -join ', '
# Если IPv4 адрес не определен, установим значение на "N/A"
if (-not $ipAddress) {
$ipAddress = "N/A"
}
# Получение информации о дисках, подключенных к виртуальной машине
$hardDisks = Get-HardDisk -VM $vm
# Получение пути к папке, где находится виртуальная машина
$folderPath = $vm.Folder | ForEach-Object { $_.Name }
# Объединение имен папок в одну строку через "\"
$folderPath = $folderPath -join '\'
# Получение хоста, на котором запущена виртуальная машина
$vmHost = $vm.VMHost.Name
# Если хост не определен, установим значение на "N/A"
if (-not $vmHost) {
$vmHost = "N/A"
}
# Получение информации об установленной операционной системе
$os = $vm.Guest.OSFullName
# Если информация об операционной системе не определена, установим значение на "N/A"
if (-not $os) {
$os = "N/A"
}
# Инициализация переменной для хранения номера диска
$diskNumber = 1
# Проход по каждому диску и добавление информации в массив данных
foreach ($disk in $hardDisks) {
$diskInfo = [PSCustomObject]@{
"Folder Path" = $folderPath
"VM Name" = $vm.Name
"Host" = $vmHost
"CPU" = $vm.NumCpu
"RAM" = $vm.MemoryMB
"OS" = $os
"IP Address" = $ipAddress
"Disk Number" = $diskNumber
"Disk Size (GB)" = [math]::Round($disk.CapacityGB, 2)
}
# Увеличение номера диска для следующего цикла
$diskNumber++
# Добавление объекта с информацией о диске в массив данных
$data += $diskInfo
}
}
# Отключение от vCenter Server
Disconnect-VIServer -Confirm:$false
# Экспорт данных в CSV файл
$data | Export-Csv -Path "C:\Users\USERNAME\Desktop\VirtualMachinesData.csv" -NoTypeInformation
Добавить комментарий