A következő címkéjű bejegyzések mutatása: PowerShell. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: PowerShell. Összes bejegyzés megjelenítése

2017. december 10., vasárnap

vDocumentation - PowerCLI modul

Kb. három hónapja hallottam erről először, de miután megnéztem, úgy gondoltam, hogy nem olyan nagy durranás, hogy erről írni kelljen akár röviden is. De mivel ezt is elvileg a "közösség" fejleszti, ezért várhatóan sokat fog fejlődni az elkövetkezendő időben. Ezt vetíti előre az is, hogy már azóta is sokat változott, bővült a modul. Illetve mivel az idei VMworld-ön ennek külön előadást szenteltek, ezért is várható hogy a tartalom, funkcionalitás még jelentősen bővülni fog.
Tulajdonképen arra való, hogy egy egységes dokumentációs lehetőséget biztosítson az adminisztrátorok számára, egyelőre a hostok vonatkozásában.

Persze erre ott van az rvtools, de abba kód szinten nem tudunk belenézni, esetleg módosítani.

A terjesztés már úgy van megoldva mint a komplett PowerCLI csomag, azaz a Powershell Gallery-n keresztül.
Lekérdezhetjük,

Find-Module -name vDoc*

majd telepíthetjük a modult a szokásos módon:

Install-Module -Name vDocumentation  

Telepítés után ha megnézzük, hogy milyen új parancsok kerültek be a PowerShell rendszerünkben, akkor ezt kapjuk:

Get-Command -Module vDocumentation|select name,version 

Name              Version
----              -------
Get-ESXInventory  2.1.0  
Get-ESXIODevice   2.1.0  
Get-ESXNetworking 2.1.0  
Get-ESXPatching   2.1.0  
Get-ESXStorage    2.1.0  

A nevek alapján már mindenki következtetni tud a tartalomra.

Ami fontos kényelmi szolgáltatás, hogy az eredményeket közvetlenül Excel file-ba is megkaphatjuk még úgy is, ha nincs telepített Excel a gépünkön (ami persze manapság már elég ritkán fordul elő). Ehhez természetesen egy újabb modul szükséges, nevezetesen az ImportExcel modul, amit szintén a most már szokásos módon telepíthetünk, frissíthetünk.
Megjegyzendő az is, hogy host, cluster és datacenter szinten is futtathatjuk a scriptet, ilyenkor Excel-t megadva mint formátumot, hostonként egy sort kapunk.

Mint az elején már említettem, ettől sokkal összetettebb scriptek is vannak hasonló célra (a vCheck is idetartozik), de mint mindenből, ebből is lehet tanulni. Nem csak azt, hogy hogyan tudunk bizonyos értékeket lekérdezni, hanem azt is, hogy hogyan kell modul-t írni, és ez ami miatt én is elkezdtem ismerkedni vele.

2017. november 3., péntek

PowerCLI upgrade

Mióta a PowerCLI fejlesztői áttértek a modul alapú terjesztésre, azóta már két frissítés is kijött. És pontosan ez az egyik legnagyobb előnye a rendszernek. Nem kell várni, amíg összejön egy olyan "csomag", amiért már érdemes új telepítő készletet készíteni, hanem ha az egyik modulban történik valami komolyabb javítás/új parancs létrehozás, akkor egyszerűn ráhúzhatjuk az új verziót a gépünkre.
Ha nem akarjuk nézegetni, hogy mikor jön ki módosítás, akkor akár egy scriptet is írhatunk, ami mondjuk hetente egyszer leellenőrzi a powershellgallery oldalon, hogy van-e valami változás, és ha igen, akkor telepíti is azt.

Ahhoz hogy tűzfal mögül is rendben is működjön az update, előbb a következő pár sor futtatásával ezt lehetővé kell tenni a PowerShell-ben is.

$webclient=New-Object System.Net.WebClient
$creds=Get-Credential

$webclient.Proxy.Credentials=$creds

Feltétel még, hogy a PowerShell-t, vagy az ISE fejlesztői környezetet admin módban indítsuk el.

Természetesen szemre is meg lehet állapítani, hogy van-e változás a telepítetthez képest, de egy pár soros scripttel biztosíthatjuk, hogy nem néztünk el valamit.

$installed=get-installedmodule VMware*|select name,version|Sort-Object name
$newest=find-module vmware*|select name,version|Sort-Object name

foreach ($module in $newest)
{
if ($module.name -notin $installed.name)
    {
    $module.name +"***New module***"
    }
else
    {
    $existing=$installed|?{$_.name -eq $module.name}
    if ($existing.version -ne $module.version)
        {
        $module.name +"***Updated Module***" + $module.version
        }
    }


A fenti pár sor összehasonlítja a telepített és a Powershell Gallery-ben megtalálható modulokat, és kilistázza ha újat vagy módosítottat talál. (Szokás szerint nem a kód szépségére törekedtem :) )

Az eredmény:

VMware.PowerCLI***Updated Module***6.5.3.6870460
VMware.VimAutomation.Cis.Core***Updated Module***6.5.3.6870462
VMware.VimAutomation.Core***Updated Module***6.5.2.6234650
VMware.VimAutomation.Nsxt***New module***

Látható, hogy egy új (Nsxt) és három frissített modul van az eredeti telepítéshez képest (mivel ezen a gépen még nem frissítettem a kezdeti állapotot)

Hasonlóan a telepítéshez, itt is elegendő a VMware.PowerCLI modult frissíteni, mert az alapján tudja, hogy mely más modul módosult, és a telepítést az alapján elvégzi.

Update-Module VMware.PowerCLI 

Ha ezek után újra lefuttatjuk a fenti scriptet, akkor nem meglepő módon nem lesz eredmény, hiszen minden új és változott modul telepítésre került.

Ha megnézzük, hogy mink is van pontosan, akkor a

get-installedmodule VMware*|select name,version

parancs megadja a listát:

Name                                Version      
----                                -------      
VMware.DeployAutomation             6.5.1.5299608
VMware.ImageBuilder                 6.5.1.5299608
VMware.PowerCLI                     6.5.3.6870460
VMware.VimAutomation.Cis.Core       6.5.3.6870462
VMware.VimAutomation.Cloud          6.5.1.5375799
VMware.VimAutomation.Common         6.5.1.5335010
VMware.VimAutomation.Core           6.5.2.6234650
VMware.VimAutomation.HA             6.0.0.5314477
VMware.VimAutomation.HorizonView    7.1.0.5307191
VMware.VimAutomation.License        6.5.1.5375648
VMware.VimAutomation.Nsxt           2.0.0.6870461
VMware.VimAutomation.PCloud         6.5.1.5376282
VMware.VimAutomation.Sdk            1.0.0.5334677
VMware.VimAutomation.Srm            6.5.1.5374694
VMware.VimAutomation.Storage        6.5.1.5374001
VMware.VimAutomation.StorageUtility 1.0          
VMware.VimAutomation.Vds            6.5.1.5374428
VMware.VimAutomation.vROps          6.5.1.5375723
VMware.VumAutomation                6.5.1.5301639


A lényeg tehát az, hogy akár a legkisebb módosítások esetében is pillanatok alatt frissíthetjük a PowerCLI környezetünket.

Az egyes verziók változását itt is követhetjük: VMware PowerCLI Change Log



2016. december 20., kedd

Virtuális gépek címkézése meglévő CMDB adatok alapján, avagy Tag kezelés PowerCLI segítségével

A hatos verzió előtt az ún. "Custom Attributes" használatával tudtunk egyedi megjegyzéseket fűzni a virtuális gépekhez. Egy időben igyekeztem használni, de a beállított értékeket nagyon nehéz volt követni, szükség esetén módosítani, stb. Így egy idő után már nem sok köze volt a valósághoz.
Az új, hatos verzióban megjelent Tag-ek sokkal rugalmasabban kezelhetőek, de ha nem gondoskodunk az értékek aktualizálásáról, akkor az sem sokat ér. Főleg ha a gépek száma már közel van az ezerhez.
Viszont ha van egy olyan nyilvántartásunk, amiben minden fontos adat megtalálható, azok aktualizálása megoldott, akkor adja magát, hogy ezeket a címkéket (vegyesen használom a következőkben a tag és címke kifejezést) onnan töltsük fel, és időnként onnan frissítsük. Erre pedig a PowerCLI tökéletes eszköz. De mielőtt ebbe belemennénk, nézzük meg röviden, milyen lehetőségeink vannak a címkék kezelésére a PowerCLI-ban, illetve mi is az a Tag?

Egyszerűen lekérdezhetjük, hogy milyen parancsok állnak a rendelkezésünkre:



Az infrastruktúra különböző elemeihez (virtuális gépek, hostok, datastore-ok, stb) különböző címkéket fűzhetünk. Pl. egy virtuális géphez hozzáfűzhetünk egy Tulajdonos és/vagy egy költséghely címkét. Ehhez a következő lépéseket kell megtenni.

  • létrehozni egy Tulajdonos nevű Tag ketegóriát
    New-TagCategory -Name "Tulajdonos" -Cardinality single -EntityType VirtualMachine 
  • kategórián belül létrehozni különböző cimkéket
    $NewTag1=New-Tag -Name "Kovács János” -Category Tulajdonos
    $NewTag2=New-Tag -Name „Nagy Béla” -Category Tulajdonos
  • ezeket hozzárendelni egy vagy több virtuális géphez.
    New-TagAssignment -Tag $NewTag1 -Entity $vm1
    New-TagAssignment -Tag $NewTag2 -Entity $vm2


A kategória esetében a "Cardinality" azt jelenti, hogy egy adott objektumhoz az adott kategóriából csak egy vagy akár több is rendelhető-e. Pl. "Produktív", "Teszt" vagy "Fejlesztői" közül pontosan egy címke adható egy géphez.

Természetesen, mint a fenti képen látható, tudunk törölni, módosítani, lekérdezni címkéket, kategóriákat, hozzárendeléseket. Ezekre részleteiben nem térnék ki, egy részük benne lesz a következő példa scriptben.

A konkrét feladat a következő. Létezik egy adatbázis, amiben a gépekről mindenféle információ napkarész állapotban elérhető. Ez egy MS SQL adatbázis. Másrészt vannak a virtuális gépeink, amik alaphelyzetben nem rendelkeznek címkékkel. Ezt csak a Web kliensben tudjuk ellenőrizni (illetve  az új HTML5 kliensben is).


Ha gondom valamelyik géppel, akkor előbb valahol máshol meg kell néznem, hogy kit is kereshetek. Viszont ezek az infók benne vannak az előbb említett adatbázisban, így ha  onnan a fenti Tags mezőket fel tudnám tölteni, akkor kényelmesebb lenne ez ilyen helyzetek kezelése.
Mivel a PowerCLI Powershell alapú, és a Powershell természetesen támogatja az SQL adatbázisok kezelését is, így egy scriptben, direktben át lehet tölteni az adatok az adatbázisból a vCenter inventory-ba.

Mielőtt bármit tennénk, létre kell hozni a szükséges címke kategóriákat. Ebben a konkrét esetben ez így néz ki,

New-TagCategory -Name "Alk.gazda" -Cardinality single -EntityType VirtualMachine
New-TagCategory -Name "Szervergazda" -Cardinality single -EntityType VirtualMachine
New-TagCategory -Name "Emails" -Cardinality single -EntityType VirtualMachine
New-TagCategory -Name "Megjegyzes1" -Cardinality single -EntityType VirtualMachine
New-TagCategory -Name "Application" -Cardinality single -EntityType VirtualMachine
New-TagCategory -Name "PatchPhase" -Cardinality single -EntityType VirtualMachine

New-TagCategory -Name "Prod.Type" -Cardinality single -EntityType VirtualMachine 

Ezután a Powershell-hez hozzá kell adni az SQL használatához szükséges modult, majd kényelmi szempontból elnavigálunk a kérdéses adatbázishoz.

Import-Module sqlps

Set-Location SQLSERVER:\SQL\SQL_szerver\Instance\Databases\CMDB_Database 

Ezután össze kell állítani egy olyan SQL lekérdezést, ami visszaadja a kívánt adatokat. Feltételezve, hogy van egy szervertip mező, ami alapján a VMware virtuális gépek szűrhetőek.

$sqltext="select rtrim(host) host,....,<további mezők> from dbo.CMDBTable where szervertip='VMware'"

Ha ez megvan, akkor a select eredményét be kell tölteni egy tömbbe. A Powershell tartalmaz saját tömb típust, de érdemesebb használni a .Net-ben definiáltat, mivel az sokkal kényelmesebben kezelhető.

$DotNetMOMInfoArray=New-Object System.Collections.ArrayList

$DotNetMOMInfoarray=invoke-sqlcmd -Query $sqltext|select host,szervergazda, Alk.gazda,Emails,megjegyzes1,patchphase,application 

SQL Select-et az Invoke-Sqlcmd -Query parancs segítségével tudunk futtatni. Az így kapott eredményhalmazból azokat a mezőket kell csak a tömbbe tenni, amikkel foglalkozni szeretnénk. A host mező tartalmazza a gépek neveit, a többi pedig olyan értékeket, amikkel címkézni fogjuk a virtuális gépeket. Azaz ebben a konkrét esetben szervergazda, alkalmazás gazda, email címek, megjegyzés1 mező, patch fázis, és alkalmazás azonosító.

Nézzük a script "törzsét" . (a címkékkel kapcsolatos műveletek egy külön eljárásban lesznek)

$vm_lista=get-vm Location Datacenter1

foreach ($vm in $vm_lista)
{

$mom_hostname=$vm.name

$HolVAn=$DotNetMOMInfoArray.Host.IndexOf($mom_hostname)

if ($HolVan -ne -1)
{
    cimke1 'Szervergazda'
    cimke1 'Emails'
    cimke1 'Alk.gazda'
    cimke1 'megjegyzes1'
    cimke1 'patchphase'
    cimke1 'application'
}


$vm_lista változóba betöltjük a szükséges géplistát, majd egyesével megnézzük, hogy az SQL lekérdezésben szerepel-e a gép. Ha igen, akkor a lentebb lévő eljárást meghívjuk a hatféle címke kategóriának megfelelően.

A legegyszerűbb az lenne, ha mindig törölnénk a meglévő címkéket, és újra létrehoznánk őket. De feltételezve, hogy ezek az értékek ritkán változnak meg, jobbnak tűnik az, ha egy kicsit bonyolultabb scriptet írunk, és csak ahhoz nyúlunk, ami megváltozik. Nézzük az eljárást.

function cimke1{

param($t_category)


    if (-not $DotNetMOMInfoArray[$HolVAn].$t_category)
    {
        $DotNetMOMInfoArray[$HolVAn].$t_category='--Nincs--' 
    }

    $ExistingTag=Get-Tag  -Category $t_category |where {$_.name -eq    $DotNetMOMInfoArray[$HolVan].$t_category}
   
  
    if ($ExistingTag)
    {
        $VMTag=Get-TagAssignment -Entity $vm -Category $t_category -ErrorAction SilentlyContinue
        if ($VMTag.Tag.Name -ne $ExistingTag.Name)
        {
             Remove-TagAssignment -TagAssignment $VMTag -Confirm:$false
             New-TagAssignment -Tag $ExistingTag -Entity $vm
        }
       
    }
    else
    {
        $NewTag=New-Tag -Name $DotNetMOMInfoArray[$HolVAn].$t_category -Category $t_category
        $VMTag=Get-TagAssignment -Entity $vm -Category $t_category -ErrorAction SilentlyContinue
        Remove-TagAssignment -TagAssignment $VMTag -ErrorAction SilentlyContinue -Confirm:$false
        New-TagAssignment -Tag $NewTag -Entity $vm

    }


    } cimke #függvény vége 

Néhány megjegyzés.

  • döntés kérdése, hogy ha egy szerver esetében egy adott címke nem létezik, akkor mi legyen. Egyáltalán ne hozzuk létre, vagy ahogy én csináltam, egy "--nincs--" szöveggel jelöljük.
  • $t_category tartalmazza, hogy melyik címke kategóriáról van szó
  • ha egy címke még nem létezik, akkor előbb létre kell hozni
  • ha egy gépnek már van címkéje, de az SQL adatbázisban megváltozott, akkor előbb törölni kell, majd újra létrehozni.

A végére pedig nézzük meg a végeredményt:


Remélhetőleg van még olyan, aki még ezeket nem ismerte és segíteni tudtam.

Végezetül mindenkinek Kellemes Ünnepeket Kívánok!!


2016. január 28., csütörtök

Egy kis PowerCLI - Get-VMHostHardware, avagy hogy határozzuk meg egy host sorozat számát

A feladat nem tűnik túlzottan bonyolultnak, Főleg ha van rá olyan PowerCLI parancs, ami egyből meg is adja  a kívánt sorozat számot.

A Get-VMHostHardware pontosan ezt csinálja.

Csakhogy ez a parancs először a PowerCLI 6.0R2-ben jelent meg 2015.szeptember 15-én, és erre előtte is szükség lett volna.
A működése egyszerű:


Nem csak a sorozatszámot, hanem egyéb fontos adatot is tartalmaz a fizikai szerverrel kapcsolatban.
Nézzük egy régebbi IBM host adatait.


A pirossal aláhúzott string határozottan nem sorozat számra emlékeztet. Ha a Web kliensben megnézzük a Hardware Status részt (ugye a hagyományos kliensben ez a 6-os vCentertől kezdve már sajnos nem elérhető), akkor láthatjuk, hogy honnan is jön ez az érték.



Biztosan megvan az oka, hogy miért van két sor az IBM szerver esetében, de még nem próbáltam megkeresni ezt az okot. Látható, hogy ott van a jó sorozatszám is, csak éppen nem azt választja a Get-VmHostHardware parancs.

De ha már szóba jött a téma, akkor nézzük meg, milyen más lehetőségünk van a PowerCLI segítségével meghatározni a serial numbert. (és persze más paramétereket is, de most konkrétan csak erről lesz szó).

Azt tudjuk, hogy az esxcli paranccsal ezt le tudjuk kérdezni.



Viszont esxcli parancsokat PowerCLI használatával is ki tudunk adni. Nézzük meg ugyanezt a szervert.


A PowerCLI azért is jobb, mert könnyen ki lehet nyerni az összes hostra vonatkoztatva is, csak egy kis ciklus kell hozzá

Van ettől egy bonyolultabb megoldás is, amikor a get-view használatával jutunk el a kívánt értékig.
Konkrétan nézzünk meg egy olyan szervert, amire a Get-VMHostHardware rossz értéket hozott ki


Látható, hogy ennek a szervnek a host mögötti .NET objektumban két darab ServiceTag mezője van, két különböző értékkel. A Get-VMHostHardware egyszerűen veszi az elsőt, és azt jeleníti meg. 

A végére még két megjegyzés
  • A Get-VMHostHardware parancs mellett megjelent egy másik hardware közeli parancs is: Get-VMHost-PciDevice
  • A fentiek mellett én azért a legszívesebben az RVTools-t használom, ha sok információt kell kigyűjtenem a környezetről. Valamikor nagyon régen már itt is volt róla szó.
Ha valamilyen más módot is ismertek, szívesen veszem ha megosztjátok, illetve ha a fentiekben hibát láttok, azt is jelezzétek.




2016. január 22., péntek

Egy kis PowerCLI - VMware infrastruktúra KPI adatok lekérdezése

Lehet hogy túlzás KPI-nek nevezni, mi mindenesetre így hívjuk. A lényeg úgyis a tartalom. Arról van szó, hogy minden hónap elején kérnek tőlem bizonyos számszerűsíthető információt a VMware infrastruktúráról.
Mivel a mondás szerint ha már valamit kétszer meg kell csinálni, akkor arra írjunk scriptet, ezért én is így tettem.
Nem nagy dolgokról van szó, de ha valaki még esetleg most ismerkedik a PowerCLI használatával, akár még hasznos dolgot is találhat benne.

Az itt található kód egy kicsit egyszerűsített változata annak amit használok, mivel nálunk több datacenter van, és az adatokat megosztva kérik. A lenti viszont egyben kezeli a vCenteren lévő összes hostot, virtuális gépet valamint datastore-t. De a Location paraméter megadásával könnyen lehet szűkíteni a lekérdezéseket egy bizonyos csoportra.

Ha csak a Datacenter1-ben lévő dolgokkal akarunk foglalkozni, akkor egyszerűen ki kell bővíteni a parancsokat. Pl. 

$Host_ALL=Get-VMHost -Location DataCenter1|?{$_.ConnectionState -ne "Maintenance"}

Megjegyzések a scriptben, bár a nagy része nem szorul magyarázatra.




#Induló értékek meghatározása (dátum, hostok,virtuális gépek, datastore-ok)
#ha szükésges, akkor különböző szűréseket beállíthatunk, pl. csak bekapcsolt gépek,
#csak olyan datastore-ok, amikben nem szerepel az "internal" szó, stb

$Date=Get-Date
$Host_ALL=Get-VMHost |?{$_.ConnectionState -ne "Maintenance"}
$VM_ALL=get-vm |?{$_.Powerstate -eq "PoweredOn"}
$DS_ALL=get-datastore  |?{$_.Name -notlike "*internal*"}

#Host mennyiségi értékek számítása (összes mamória, CPU-k száma, és a hostok száma)

$Host_Mem_osszes_ALL=($Host_ALL|Measure-Object -Property MemoryTotalGB -sum).Sum
$Host_CPU_osszes_ALL=($Host_ALL|Measure-Object -Property NumCPU -sum).Sum
$Host_darab_ALL=($Host_ALL|measure-object).Count

#Datastore szabad és full kapacitások számítása

$DS_Free_Space_ALL=($DS_ALL|Measure-Object -Property FreespaceGB -sum).Sum
$DS_Full_Space_ALL=($DS_ALL|Measure-Object -Property CapacityGB -sum).Sum

#VM mennyiségi adatok (összes vCPU,számosság, abból mennyi a Windows és nem Windows gép)

$VM_CPU_ALL=($VM_ALL|Measure-Object -Property NumCPU -sum).sum
$VM_COUNT_ALL=($VM_ALL|Measure-Object).Count
$VM_COUNT_Windows_ALL=($VM_ALL|?{$_.GuestId -like "*win*"}|Measure-Object).Count
$VM_COUNT_NonWindows_ALL=($VM_ALL|?{$_.GuestId -notlike "*win*"}|Measure-Object).Count

#Provisioned Datastore számítás. Egy kicsit trükkös, mert ezt már csak az extensiondata #felhasználásával lehet lekérdezni, mivel a Get-DataStore ezt az értéket direktben nem
#tartalmazza

$ProvisionedSpace_ALL=(Get-Datastore | ?{$_.Name -notlike "*internal*"}|
Select-Object -Property Name,
CapacityGB,FreeSpaceGB,
@{ Name = "ProvisionedSpaceGB"
   Expression = {($_.ExtensionData.Summary.Capacity - $_.Extensiondata.Summary.FreeSpace + $_.ExtensionData.Summary.Uncommitted)/1GB}
 }|Measure-Object -Property ProvisionedSpaceGB -sum).sum

#Host memória és CPU szabad kapacitások számítása
#Nem bonyolítottam túl, egyszerűen az elmúlt egy hét értékeit lekértem, és abból az összes #hostra számoltam egy átlagot. Így utólag megnézve, lehetne egyszerűsíteni a következő pár
#sort (nem kéne számolgatni a hostokat, mivel tudom mennyi van...), de ez már így marad :)

$Host_ALL_CPU_Percent=0
$Host_ALL_MEM_Percent=0
$Host_Count=0

foreach ($h in $Host_ALL) {
  $HostCpuUsage = (get-stat -entity $h.Name -stat cpu.usagemhz.average -Start ($Date).adddays(-7) -Finish ($Date)|Measure-Object -Property Value -Average).Average
  $HostMemUsage = (get-stat -entity $h.Name -stat mem.consumed.average -Start ($Date).adddays(-7) -Finish ($Date)|Measure-Object -Property Value -Average).Average
  $HostallCPU=$h.CpuTotalMhz
  $HostallMem=$h.MemoryTotalMB
  $Host_ALL_CPU_Percent=$Host_ALL_CPU_Percent+(($HostCPUUsage/$HostallCPU)*100)
  $Host_ALL_MEM_Percent=$Host_ALL_MEM_Percent+((($HostMemUsage/1024)/$HostallMem)*100)
  $Host_Count=$Host_Count+1

  }
$Host_ALL_CPU_Percent=$Host_ALL_CPU_Percent/$Host_Count
$Host_ALL_MEM_Percent=$Host_ALL_MEM_Percent/$Host_Count

#Már csak az értékek kiíratása van hátra

Write-Host "összes CPU core" $Host_CPU_osszes_ALL
Write-Host "fizikia memória mérete" $Host_Mem_osszes_ALL
Write-Host "hostok szám" $Host_darab_ALL
Write-Host "provisioned tárhely" $ProvisionedSpace_ALL
Write-Host "szabad CPU kapacitás: " (100-$Host_ALL_CPU_Percent)
Write-Host "szabad datastore kapacitás" $DS_Free_Space_ALL
Write-Host "szabad Memória kapacitás: " (100-$Host_ALL_MEM_Percent)
Write-Host "teljes datastore kapacitás" $DS_Full_Space_ALL
Write-Host "vCPU szám" $VM_CPU_ALL
Write-Host "vCPU/core" ($VM_CPU_ALL/$Host_CPU_osszes_ALL)
Write-Host "vCPU/VM" ($VM_CPU_ALL/$VM_COUNT_ALL)
Write-Host "virtuális gépek száma" $VM_COUNT_ALL
Write-Host "Virtuális gépek száma (nem Windows)" $VM_COUNT_NonWindows_ALL
Write-Host "Virtuális gépek száma (Windows)" $VM_COUNT_Windows_ALL


A lista sok minden mással kiegészíthető, de pillanatnyilag nekem ennyi információra van szükségem.