Скрипт на PowerShell для сбора информации с vSphere

от автора

в ,

Пока у меня копится материал для публикаций, отправлю небольшой скрипт написанный на 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

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *