PowerCLI

Szybkie komendy ułatwiające prace administratora vSphere.

Github dla większych skryptów https://github.com/sebastiangrugel/PowerCLI

Przydatne linki:

Wylistowanie dostępnych interfejsów oraz fizycznych kart sieciowych (vmkernel + vmnic):


Get-VMHostNetworkAdapter -vmhost esxihost.local

Dodanie kolejnego interfejsu (vmkernela do vMotion) w ESXi:


New-VMHostNetworkAdapter -VMHost "esxihost.local" -PortGroup "PORTGROUPNAME" -VirtualSwitch "vDS-NAME" -IP 192.XXX.XXX.XXX -SubnetMask 255.XXX.XXX.XXX -VMotionEnabled:$true

Usunięcie konkretnego interfejsu (vmkernela) na ESXie:


Get-VMHostNetworkAdapter -vmhost esxihost.local -name vmk1 | Remove-VMHostNetworkAdapter

Sprawdzenie IPv6 czy jest włączony na ESXi hostach czy nie.


Get-VMHost esxihost.local| Get-VMHostNetwork | Select VMHost,IPv6Enabled

Wyłączanie IPv6 na hostach o okreslonej nazwie:


Get-VMHostNetwork esxihostname* | Set-VMHostNetwork -IPv6Enabled:$false

Po zmianie wymagany jest dla widocznego efektu reboot hosta.

Zarządzanie stanami ESXi hosta:


Set-VMHost esxihost.local -State "Maintenance"
Set-VMHost esxihost.local -State "Connected"
Set-VMHost esxihost.local -State "Disconnected"


Usuwanie niepotrzebnego “netstack” vmotion z hosta:


$vmhost = Get-VMHost -Name esxihost.local
$esxcli = Get-EsxCli -VMhost $vmhost -V2
#Listuje
$esxcli.network.ip.netstack.list.invoke()
#Usuwa
$esxcli.network.ip.netstack.remove.invoke(@{netstack = "vmotion"})

Wylistowanie informacji o hostach w vCenter ( w jakim klastrze są, jaki mają HW, jaką wersje ESXi):

Get-VMHost  | select parent,name,Manufacturer,Model,ProcessorType,version  | Export-Csv D:\Temp\prod_esx2.csv

Konwersja wyniku komendy na HTML (przykład):


$vms | ConvertTo-Html |out-file 'C:\output.html'

Użycie Get-View(przykład):


$vm = Get-Vm|get-view
$vm.Config
$vm.Config.Version

Wlączenie maszyny lub wylączenie maszyny na specyficznym hoście do którego się zalogowaliśmy:


$credESX = get-credential root
$esx = Connect-VIserver -Server 10.1.1.111 -Credential $credESX

Start-VM -Server $esx -VM $vm -Confirm
Stop-VM -server $esx  -VM $vm -kill

Tworzenie maszyny(przypadek gdzie mamy tylko 1 datastore):

$credVC = get-credential administrator@vsphere.local
$vc = Connect-VIServer -Server 10.101.1.120 -Credential $credVC

$name = "SuperBIGvm"
$datastore = get-datastore -server $vc
New-Vm -Name "SuperBIGvm"  -Datastore $datastore -Version v13  -NumCpu 2 -DiskGB 10 -MemoryGB 2

Aktualizacja VMware Tools bez restartu:

Get-VMGuest -VM $vm | Update-Tools -NoReboot 

Tworzenie pliku z logowaniem postępu skryptu (przykład):

$date = get-date
$reportTXT = 'C:\Report.txt'

#Reporting start of script
$log = "Started update and linked clone create script on $date"
$log |Out-File $reportTXT -Append

#report to log file
$Name = $Vms.name
$log = "Selected the following VM's for action"
$log |out-file $reportTXT -Append
$Name |out-file $reportTXT -Append

$log = "Created VM called $name"
$log |Out-File $reportTXT -Append 

$log = "Started all machines:"
$log|out-file $reportTXT -Append

start-process $reportTXT

Jak zainstalowac lub zaktualizować PowerCLI poprzez Powershell Gallery

# Sprawdzenie zainstalowanych modułów
Get-module -Verbose VMware* -ListAvailable

# Sprawdzenie wersji na serwerze
Find-Module -Name VMware.PowerCLI

# Instalacja powercli
Install-Module -Verbose -Name VMware.PowerCLI –Scope CurrentUser

# Update do nowej wersji
Update-Module -Verbose -Name VMware.Powercli

#-Verbose oczywiscie nie jest wymagane ale obrazuje co się dzieje w danym momencie.

Jak podłączyć sieć do maszyny wirtualnej (checkbox). Działa na włączonej maszynie:

Get-VM -Name NAZWAMASZYNY | Get-NetworkAdapter | Set-NetworkAdapter -Connected:$false -Confirm:$false
Get-VM -Name NAZWAMASZYNY | Get-NetworkAdapter | Set-NetworkAdapter -Connected:$true -Confirm:$false

Wykonanie prostego klona konkretnej maszyny wirtualnej:

New-VM -Name ORYGINALNAMASZYNA -VM NOWAMASZYNA -Datastore NAZWADATASOTRA -vmhost NAZWAHOSTA -DiskStorageFormat thin

Przeszukuje całe vCenter w poszukiwaniu VMki z zamontowanymi VMware Toolsami i próbuje je odmontować:

get-view -viewtype virtualmachine -property ‘name’ -Filter @{‘Runtime.ToolsInstallerMounted’=’True’} | foreach{$_.UnmountToolsInstaller()}

Listuje zamontowane VMware Toolsy na klastrze wskazując nazwe VMki i hosta:

Get-Cluster *gold* | Get-VM | Get-CDDrive | where{$_.IsoPath -match "vmware/isoimages"} | %{$_.parent } | select name,vmhost

Listuje zamontowane VMware Toolsy na klastrze wskazując nazwe VMki i hosta. Następnie odmontowywuje je:

Get-Cluster *gold* | Get-VM | Get-CDDrive | where{$_.IsoPath -match "vmware/isoimages"} | Set-CDDrive -NoMedia -Confirm:$false

Kopia zapasowa konfiguracji ESXi (przykład):

Connect-VIServer -Server $esxihost -user $esxihostuser -password $esxihostpasswd
Get-VMHostFirmware -VMHost $esxihost -BackupConfiguration -DestinationPath D:\

Włączenie i wyłączenie SSH na wszystkich hostach w klastrze:

#Włączenie SSH
Get-Cluster CLUSTERNAME | Get-VMHost | Get-VMHostService |Where key -Match tsm-ssh | where Running -Match false | Start-VMHostService -Confirm:$false

#Wyłączenie SSH
Get-Cluster CLUSTERNAME | Get-VMHost | Get-VMHostService |Where key -Match tsm-ssh | where Running -Match true | Stop-VMHostService -Confirm:$false

Włączenie SSH na 1 hoście

#Włączenie SSH
Get-VMHost esxi.akademiadatacenter.pl | Get-VMHostService | Where key -Match tsm-ssh | where Running -Match false | start-VMHostService -Confirm:$false

Zarządzanie snapshotami:

# Tworzenie snapshotów na grupie maszyn z koncówkami 1 2 oraz 3
get-vm VMNAME_[123] | new-Snapshot -name Before_Update_XXXX -Description "Date_01012020_created_by_SG"
# Kasowanie wszystkich snapshotów z grupy maszyn z końcówkami 1 2 oraz 3 
get-vm VMNAME_[123] | Get-Snapshot -Name before* | Remove-Snapshot 

Zarządzanie snapshotami – test SNAPSHOOT by Karol Z. – tworzy 50 snapszotów następnie je usuwa 🙂

for ( $i=1 ; $i -le  50  ; $i++) {get-vm kz-db[12]* | New-Snapshot -Description kz -Name kztest$i -Quiesce -Memory  ; Start-Sleep -Seconds 5 ;get-vm kz-db[12]*| get-snapshot -name kztest$i | remove-Snapshot -Confirm:$false } 

Listowanie maszyn na konkretnym ESXi + resource poola + folder (w vCenter)

Get-VMHost esxi.akademiadatacenter.pl | get-vm   | select id, name , ResourcePool , {$_.folder.parent.parent }

Listowanie eventów w vCenter mających w treści słowo “restarted”. CEL: identyfikacja maszyn, które zrestartowały się po awarii ESXi.

Get-VIEvent -MaxSamples 2000 -Start (Get-Date).AddDays(-1) -Type Warning  | Where {$_.FullFormattedMessage -match "restarted"} |select CreatedTime,ObjectName,FullFormattedMessage| sort CreatedTime -Descendin

Wyszukiwanie wpisów w eventach w vCenter

foreach ($vmm in  get-vm  *  ) {$vmm |Get-VIEvent -Start 2020.03.23  -MaxSamples 1000 | ? FullFormattedMessage -Match Ethernet0 | select {$vmm.Name} , CreatedTime,FullFormattedMessage  } 

Znajduje wszystkie maszyny z podczepionymi ISO

Get-Cluster *gold* | Get-VM | Get-CDDrive  | ? {$_.isopath} | %{$_.parent }

Przenosi wszystkie maszyny które maja w konfiguracji ISO na jednego hosta (mozna go w ostatecznosci zrobic na koncu)

Get-Cluster *gold* | Get-VM | Get-CDDrive  | ? {$_.isopath} | %{$_.parent } | Move-VM -Destination esxi.akademiafatacenter.pl

 

Informacje o nowych artykułach, świecie wirtualizacji i "cloud computingu" prosto na Twojego maila:

Dodam Cię do listy mailowej, z której możesz wypisać się w dowolnym momencie (jeden klik.) | Polityka Prywatności