Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Поиск виртуальной машины на Hyper-V через Powershell

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет. Собственно есть следующая задача:
есть несколько нод Hyper-v. На них развернуты, грубо говоря, по 10 VM.
Как с помощью Powershell получить имя ноды hyper-V, если задать имя VM изначально? Не могу найти переход между командлетами Get-VM и Get-VMHost.

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 14:30 27-07-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dendodor
https://techcommunity.microsoft.com/t5/itops-talk-blog/find-the-hostname-of-a-hyper-v-vm/ba-p/2074171

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 05:08 29-07-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я знаю, как найти через реестр. А если гостевая на linux, например?
надо именно через обращение к гипервизору. У меня не получается срастить Get-VM и Get-VMHost.

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 11:04 29-07-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dendodor

Цитата:
надо именно через обращение к гипервизору.

вам придется по всем нодам пройтись и собрать список гостевых.
у вас кластер или просто список?
 

Код:
$clusterNodes = Get-ClusterNode;
ForEach($item in $clusterNodes) {Get-VM -ComputerName $item.Name}


Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 11:23 29-07-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немножко не то. По этому запросу выдаются все виртуалки, которые находятся в кластере.
1) не все VM в кластере (перечень всех гипервизоров могу просто вытянуть из нужной OU в AD)
2) мне надо по заданному имени гостевой VM найти имя гипервизора, где она находится.

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 15:40 01-08-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dendodor

Цитата:
Немножко не то.

то, я же не знаю как вы список машин получите
 

Цитата:
мне надо по заданному имени гостевой VM найти имя гипервизора, где она находится

опрашиваете каждую, получая список VM, что бегает на ней, сопоставляя название с нужной вам.
больше вам подскажут в Автоматизация администрирования. Часть 3
 
что то типа Get-VM -ComputerName $item.Name | findstr -i "название_VM"

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 22:35 01-08-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Задача немного изменилась:
решил просто формировать массив всех виртуалок с нужными свойствами и выводить все это в json.
Примерно вот так:
 Get-VM | Select ComputerName,VMName,ProcessorCount,@{Name="MemoryAssigned,GB"; Expression={$_.MemoryAssigned/1GB}},Path | ConvertTo-Json
 
Теперь хочу в этот же массив выводить и ipaddress, но:
1) выводится он запросом:  
Get-VM | Select -ExpandProperty NetworkAdapters | Select VMName, IPAddresses
2) выводит и ipv4, и ipv6 (а нужен только ipv4)
 
Вопрос: как склеить эти два запроса в один, и избавиться от ipv6?

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 17:58 02-08-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dendodor

Цитата:
Вопрос: как склеить эти два запроса в один, и избавиться от ipv6?

вам бы в тему выше, где обсуждаются возможности Powershell
 

Всего записей: 15112 | Зарегистр. 20-09-2014 | Отправлено: 01:55 03-08-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я туда тоже написал - но тишина

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 08:59 03-08-2022
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dendodor
Цитата:
как склеить эти два запроса в один, и избавиться от ipv6?

при условии, что IPv4 всегда первый в массиве:
Код:
Get-VM | Select ComputerName,VMName,ProcessorCount,@{Name="MemoryAssigned,GB"; Expression={$_.MemoryAssigned/1GB}},Path,@{n='IP';E={$_.NetworkAdapters.IPAddresses[0]}}

 
если не всегда, то выбирать:
Код:
Get-VM | Select ComputerName,VMName,ProcessorCount,@{Name="MemoryAssigned,GB"; Expression={$_.MemoryAssigned/1GB}},Path,@{n='IPAddresses';E={$_.NetworkAdapters.IPAddresses | ? {$_ -Match 'некая регулярка соответствующая только IPv4'}}}

 


Mavrikii
Цитата:
вам бы в тему выше

dendodor
Цитата:
я туда тоже написал

вы бы ссылку давали, а то не понятно о какой теме речь

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 18:26 03-08-2022 | Исправлено: iNNOKENTIY21, 18:29 03-08-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Изменил подход в корне. Получилось следующее:

Код:
 
$VMHosts=Get-Content c:\_Install\scripts\VMHosts.txt
$Data = @()
 
$VMs = ($VMHosts | foreach-object {(Invoke-Command -ComputerName $_ -ScriptBlock {Get-VM | Select Name}) | select name})
 
foreach($VM in $VMs)
{
    $VMInfo = Get-VM -Name $VM
    $VMNetwork = $VMInfo | Get-VMNetworkAdapter
 
    $VMCustom = New-Object System.Object
    $VMCustom | Add-Member -Type NoteProperty -Name VMHostName -Value $VMInfo.ComputerName
    $VMCustom | Add-Member -Type NoteProperty -Name VMName -Value $VMInfo.VMName
    $VMCustom | Add-Member -Type NoteProperty -Name ProcessorCount -Value $VMInfo.ProcessorCount
    $VMCustom | Add-Member -Type NoteProperty -Name Memory -Value ($VMInfo.MemoryAssigned / 1gb)
    $VMCustom | Add-Member -Type NoteProperty -Name IPAddress -Value $VMNetwork.IPAddresses[0]
 
    $Data += $VMCustom
}  
 
$Data | ConvertTo-Json > C:\_Install\out.txt
 

 
Но теперь вопрос вот здесь:

Код:
 
$VMs = ($VMHosts | foreach-object {(Invoke-Command -ComputerName $_ -ScriptBlock {Get-VM | Select Name}) | select name})

 
Как правильно передать имена всех VM с гипервизоров?

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 13:16 04-08-2022 | Исправлено: dendodor, 13:21 04-08-2022
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
$VMHosts | ForEach-Object -Process {
    Invoke-Command -ComputerName $_ -ScriptBlock {
        (Get-VM).Name} } | ForEach-Object -Process {
            Get-VM -Name $_ | Select ComputerName, VMName, ProcessorCount, @{
                N="MemoryAssigned,GB"
                E={$_.MemoryAssigned/1GB}
            }, Path, @{
                N='IP'
                E={$_.NetworkAdapters.IPAddresses[0]}}
            } | ConvertTo-Json

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 15:35 04-08-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ошибку бьет. Возможно из-за того, что вывод всех VM с пробелами. И мне надо именно последним способом.

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 16:02 04-08-2022
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
имена всех VM


Код:
$VMs = Invoke-Command -ComputerName $VMHosts -ScriptBlock {
    (Get-VM).Name
 
    # $VMInfo = Get-VM
    # $VMNetwork = $VMInfo | Get-VMNetworkAdapter
 
}
 
$VMs

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 18:15 04-08-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
$VMs = Get-VM -ComputerName Server
   $VMs.HardDrives | ForEach {
    $GetVhd = Get-VHD -Path $_.Path
    [pscustomobject]@{
                DiskSizeGB = ($GetVhd.Size / 1GB)
         
    } | ft -autosize
}
 

этот код выводит размеры дисков всех VM правильно.
А как суммировать по VM диски? Мне нужен суммарный объем по всем дискам каждой VM.
Чет не вдуплю, как применить Measure-Object

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 01:06 05-08-2022 | Исправлено: dendodor, 01:07 05-08-2022
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dendodor
Цитата:
как применить Measure-Object


Код:
(1..5 | measure -Sum).sum




Код:
$VMs = Get-VM -ComputerName Server
$VMs.HardDrives | ForEach {
    $GetVhd = Get-VHD -Path $_.Path
    [pscustomobject]@{
        DiskSizeGB = ($GetVhd.Size / 1GB)
    }
} | measure -Sum -Property DiskSizeGB




Код:
$VMVHDs  = $VMs.HardDrives | % { Get-VHD -Path $_.Path }
$SizeSum = ($VMVHDs | measure -Sum -Property Size).Sum/1gb


Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 09:01 05-08-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Немножко не то. Мне нужна агрегация в разрезе ВМ, т.е. по каждой ВМ. А это идет полностью агрегация на Hyper-v

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 09:25 05-08-2022
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dendodor
Цитата:
Немножко не то. Мне нужна агрегация в разрезе ВМ, т.е. по каждой ВМ

тогда цикла по ним, ВМ и не хватает…
 

Код:

$VMs = Get-VM -ComputerName Server
 
$VMs | ForEach-Object -Process {
    [pscustomobject] @{
        VMName = $_.Name
        VMVHDSizeSum = ($_.HardDrives | Get-VHD | Measure-Object -Sum -Property 'Size').Sum / 1GB
    }
}

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 10:05 05-08-2022
dendodor



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ооооо. Огонь. Работает. СПАСИБИЩЕ!!

Всего записей: 158 | Зарегистр. 27-11-2008 | Отправлено: 10:35 05-08-2022
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Поиск виртуальной машины на Hyper-V через Powershell


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru