After a VMware ESXi host reinstall reconnecting your host is not as easy as changing the state of the host by using the Set-VMHost -State command in VMware PowerCLI. The reason is that your host has gotten a new certificate. So to do this scripted you need to retrieve the SSL thumbprint and specify that during the reconnect.
Continue reading Reconnect ESXi host after reinstallTag: Script
Enable IPv6 using PowerCLI
This is a PowerCLI script to enable IPv6 on VMware ESXi hosts in you vCenter.
This problem is that disabling IPv6 in newer versions of ESXi can sometimes result in PSOD, so even if you are not using IPv6 in your environment, you should keep it enabled. https://kb.vmware.com/s/article/2150794
Import-Module VMware.PowerCLI
Connect-VIServer <Insert vCenter name>
$VMHost = Get-VMHost <insert hostname>
$esxcli = Get-EsxCli -VMHost $VMhost -V2
$argument = $esxcli.system.module.parameters.set.CreateArgs()
$argument.module = "tcpip4"
$argument.parameterstring = "ipv6=1"
$esxcli.system.module.parameters.set.Invoke($argument)
Write-Host "IPv6 Enabled for host: $($VMHost)"
Write-Host "You need to put the host in maintenance mode and reboot for changes to take effect."
Hope this helps you. Keep in mind that use of this script is entirely your responsibility, and you should always understand what a script does before you run it.
To detect which host that has IPv6 disabled check this post: https://vm.knutsson.it/?p=1193
Check if IPv6 is disabled
This is a PowerCLI script to list VMware ESXi host that has IPv6 disabled in you vCenter.
This problem is that disabling IPv6 in newer versions of ESXi can sometimes result in PSOD, so even if you are not using IPv6 in your environment, you should keep it enabled. https://kb.vmware.com/s/article/2150794
Import-Module VMware.PowerCLI
Connect-VIServer <Insert vCenter server FQDN>
$VMHosts = Get-VMHost | Sort-Object
foreach ($VMHost in $VMHosts) {
if ($VMHost.ConnectionState -ne "Connected" ) {
$status = "Unknown. Host Status: $($VMHost.Connectionstate)"
Write-host("$($VMHost): $($status)")
} else {
$value = ($VMHost | Get-VMHostModule tcpip4).Options
if ($value -match "ipv6=1") {
$status = "Enabled"
#Write-host("$($VMHost): $($status)")
} elseif ($value -match "ipv6=0") {
$status = 'Disabled'
Write-host("$($VMHost): $($status)")
} else {
$status = "Unknown"
Write-host("$($VMHost): $($status) - $($value)")
}
}
}
Hope this helps you. Keep in mind that use of this script is entirely your responsibility, and you should always understand what a script does before you run it.
To enable IPv6 on hosts using PowerCLI check this post: https://vm.knutsson.it/?p=1198
PowerCLI: Get ESXi Hosts Version and Uptime
This is a quick and easy script to get all hosts from a vCenter sorted by Cluster and Host name. You will get the Cluster, Hostname, Version, Build and Uptime in days.
Connect-VIServer <vCenter FQDN>
$clusters = Get-Cluster | Sort-Object
$objects = @()
foreach ($cluster in $clusters) {
Write-Host "Gathering from cluster: $($cluster.Name)"
$vmhosts = $cluster | Get-VMHost | Sort-Object
foreach ($vmhost in $vmhosts) {
$object = New-Object -TypeName PSObject
$object | Add-Member -MemberType NoteProperty -Name "Cluster" -Value $cluster
$object | Add-Member -MemberType NoteProperty -Name "Host" -Value $vmhost
$object | Add-Member -MemberType NoteProperty -Name "Version" -Value $vmhost.Version
$object | Add-Member -MemberType NoteProperty -Name "Build" -Value $vmhost.Build
$object | Add-Member -MemberType NoteProperty -Name "Uptime (Days)" -Value (New-TimeSpan -Start $vmhost.ExtensionData.Summary.Runtime.BootTime -End (Get-Date) | Select-Object -ExpandProperty Days)
$objects += $object
}
}
$objects | ft -AutoSize
Powershell: Find largest VM disk
Sometimes you need to find the largest virtual disk. Lets say if you are sizing LUNs for datastores.
Here is a script that help you do that.
Requirement are powershell and the VMware.PowerCLI module.
Use it at your own risk.
Import-Module VMware.PowerCLI
Connect-VIServer <vCenter Name>
Function Get-LargestDisk {
param(
$Datastores=$null
)
$largest = 0
if ($Datastores -eq $null) {
Write-Host "Searching through all VMs."
$vms = Get-VM
} else {
Write-Host "Searching through VMs on datastores: $Datastores"
$vms = $Datastores | Get-VM
}
foreach ($vm in $vms) {
$hdds = $vm | Get-HardDisk
foreach ($hdd in $hdds) {
$size = $hdd.CapacityGB
if ($size -gt $largest) {
Write-Host "Found a larger VM: $vm Size: $size GB"
$largestVm = $vm
$largest = [math]::Round($size)
}
}
}
Write-Host "Largest Disk: $largest GB Largest VM: $largestVm"
}
Get-LargestDisk -Datastore (Get-Datastore V7000*)
PS Script Find Machine or VM by Mac or IP
This powershell script is created for VMware PowerCLI. Its purpose is to find a VM by IP or MAC address. This is often useful when digging through NSX logs.
Continue reading PS Script Find Machine or VM by Mac or IPCross SSO and vCenter VMotion using PowerCLI
http://cloudmaniac.net/using-powercli-to-vmotion-vm-between-different-sso-domains-vcenters/
Roman Decker wrote an article about how to move virtual machine between vCenters that are not part of the same SSO domain, using PowerCLI.
I felt like it needed some adjustments to be more dynamic and interactive, so many of the hard coded bits I decided to make the script ask for at runtime.
Continue reading Cross SSO and vCenter VMotion using PowerCLI
VMware vCSA 6.5 Scheduled Backup
The new vCenter 6.5 Server Appliance comes with a backup function, but it is not possible to schedule the backup out of the box.
But there are several ways that you can do this yourself. Continue reading VMware vCSA 6.5 Scheduled Backup