VMware: Configure new vSphere 4 host with PowerCLI

2

I’ve created a PowerCLI script that can be used to configure a vSphere 4 host with a custom configuration. And you can select in the menu to configure the host (option 1) + you can select (option 2) to add the host into a cluster on a vCenter Server. I’ll update this post with new configurations/versions, I’m still a PowerCLI beginner so.. please comment if you have any tips or suggestions.

Menu:

1. Configure new vSphere host:

– Connect vSphere host;
– Enter maintenance;
– Set the hostname and domain name;
– Configure DNS settings;
– Configure NTP Server;
– Configure Support User;
– Enable the software iSCSI initiator;
– Delete the default VM Network;
– Configure vSwitch0 – Management / vMotion (incl. failover en load balancing);
– Configure vSwitch1 – Network;
– Configure vSwitch2 – iSCSI (incl.VMkernels + failover en load balancing);
– Configure iSCSI target address;
– Exit Maintenance Mode

2. Configure new vSphere host to vCenter Server

– Connect vCenter server;
– Add vSphere Host to vCenter server;
– Re-Balance Cluster

0. Quit

The script: [updated: 07/07/2011 – v.1.5]

#====================================================================#
#   SCRIPT:        Configure_new_ESXi_Host_Menu.ps1                  #
#   FUNCTION:      Configure fresh installed host                    #
#   CREATED:       05/07/2011                                        #
#   MODIFIED:      07/07/2011                                        #
#   VERSION:       v.1.5                                             #
#====================================================================#
#   CHANGELOG:                                                       #
#                                                                    #
#    v.1.5                                                           #
#	 - Added answer field to configure host;                         #
#	 - Added start menu: config host and add to vCenter server       #
#	 - Hide config output, show's only when failure;                 #
#                                                                    #
#====================================================================#
# START MENU                                                         #
#====================================================================#
do {

Write-Host "Please make your choise:" -foregroundcolor yellow
Write-Host " 1. Configure new vSphere host"
Write-Host " 2. Configure new vSphere host to vCenter Server"
Write-Host " 0. Quit"
Write-Host " "
$response = Read-Host "Select 0-2"
Write-Host " "

switch ($response)
{
1 {
#====================================================================#
#   HOST = CUSTOM DEFINITIONS                                        #
#====================================================================#
$ESX_host = read-host "Select ESXi host by DNS to connect"
$newhostname = read-host "Select hostname to configure"
$newdomainname = read-host "Select domain name to configure"
$root_user = "root"
$root_password = read-Host "Select root password to connect"
$new_user = read-host "Select extra username to configure"
$new_user_password = read-Host "Select extra password to configure"
$dns01 = read-host "Select Primary DNS to configure"
$dns02 = read-host "Select Secundary DNS to configure"
$VMK01 = read-host "Select iSCSI VMkernel01 to configure"
$VMK02 = read-host "Select iSCSI VMkernel02 to configure"
$iSCSIsub = read-host "Select iSCSI Subnet Mask to configure"
$iSCSItarget = read-host "Select iSCSI target to configure"
$vMotiontcp = read-host "Select vMotion VMkernel to configure"
$vMotionsub = read-host "Select vMotion Subnet Mask to configure"
$NTPServer01 = "0.pool.ntp.org"
$NTPServer02 = "1.pool.ntp.org"
Write-Host "vSphere Host-configuration will begin..." -foregroundcolor Green
#====================================================================#
Write-Host "Connect to the target ESXi Host" -foregroundcolor green
#====================================================================#
Connect-VIServer "$ESX_host" -User "$root_user" -Password "$root_password"
Sleep 10
#--------------------------------------------------------------------#
Write-Host "Enter Maintenance mode" -foregroundcolor green | out-null
#--------------------------------------------------------------------#
Get-VMHost | Set-VMHost -State maintenance | out-null
#--------------------------------------------------------------------#
#
#
#====================================================================#
# ***CONFIGURE HOST SETTINGS***                                      #
#====================================================================#
Write-Host "Set the hostname and domain name" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHostNetwork | Set-VMHostNetwork -DomainName $newdomainname -HostName $newhostname | out-null
Sleep 10
#--------------------------------------------------------------------#
Write-Host "Configure DNS settings" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHostNetwork | Set-VMHostNetwork -DnsAddress $dns01 | out-null
#--------------------------------------------------------------------#
Write-Host "Configure NTP Server" -foregroundcolor green
#--------------------------------------------------------------------#
Add-VmHostNtpServer -NtpServer "$NTPServer01" , "$NTPServer02" | out-null
#--------------------------------------------------------------------#
Write-Host "Configure Support User" -foregroundcolor green
#--------------------------------------------------------------------#
New-VMHostAccount -Id "$new_user" -password "$new_user_password" -Description "Tech Support" -AssignGroups root -GrantShellAccess | out-null
#--------------------------------------------------------------------#
#
#
#====================================================================#
# ***CONFIGURE NETWORK***                                            #
#====================================================================#
Write-Host "Delete the default VM Network" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VirtualPortGroup -Name "VM Network" | Remove-VirtualPortGroup -Confirm:$false | out-null
#--------------------------------------------------------------------#
Write-Host "Configure vSwitch0 - Management / vMotion" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VirtualSwitch -Name vSwitch0 | Set-VirtualSwitch -Nic vmnic0,vmnic1 -Confirm:$false | out-null
New-VMHostNetworkAdapter -PortGroup vMotion -VirtualSwitch vSwitch0 -IP "$vMotiontcp" -SubnetMask "$vMotionsub" -vMotionEnabled:$true -Confirm:$false | out-null
get-virtualportgroup -name vMotion | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic1 | out-null
get-virtualportgroup -name vMotion | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic0 | out-null
get-virtualportgroup -name "Management Network" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic0 | out-null
get-virtualportgroup -name "Management Network" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic1 | out-null
#--------------------------------------------------------------------#
Write-Host "Configure vSwitch1 - Network" -foregroundcolor green
#--------------------------------------------------------------------#
New-VirtualSwitch -Name vSwitch1 -Nic vmnic2,vmnic3 -Confirm:$false | out-null
Get-VirtualSwitch -Name vSwitch1 |Set-VirtualSwitch -NumPorts "256" -Confirm:$false | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "VLAN-100-Production" -VLANID 100 | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "VLAN-200-Management" -VLANID 200 | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "VLAN-300-DMZ" -VLANID 300 | out-null
#--------------------------------------------------------------------#
Write-Host "Configure vSwitch2 - iSCSI" -foregroundcolor green
#--------------------------------------------------------------------#
New-VirtualSwitch -Name vSwitch2 -Nic vmnic4,vmnic5 | out-null
New-VMHostNetworkAdapter -PortGroup "iSCSI01" -VirtualSwitch vSwitch2 -IP "$VMK01" -SubnetMask "$iSCSIsub" | out-null
New-VMHostNetworkAdapter -PortGroup "iSCSI02" -VirtualSwitch vSwitch2 -IP "$VMK02" -SubnetMask "$iSCSIsub" | out-null
get-virtualportgroup -name "iSCSI01" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic4 | out-null
get-virtualportgroup -name "iSCSI01" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic5 | out-null
get-virtualportgroup -name "iSCSI02" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic5 | out-null
get-virtualportgroup -name "iSCSI02" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic4 | out-null
#--------------------------------------------------------------------#
#
#
#====================================================================#
# ***CONFIGURE STORAGE***                                            #
#====================================================================#
Write-Host "Configure iSCSI target address" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHost | Get-VMHostHba -Type iScsi | New-IScsiHbaTarget -Address "$iSCSItarget" | out-null
#--------------------------------------------------------------------#
Write-Host "Configure iSCSI initiator" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHostStorage | Set-VMHostStorage -SoftwareIScsiEnabled $True | out-null
#--------------------------------------------------------------------#
#
#
#====================================================================#
# ***FINISHING CONFIGURATION***                                      #
#====================================================================#
Write-Host "Exit Maintenance Mode" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHost | Set-VMHost -State connected | out-null
#--------------------------------------------------------------------#
#
#
Write-Host "vSphere Host-configuration has finished.." -foregroundcolor yellow
break;
}
2 {
#====================================================================#
#   vCenter - CUSTOM DEFINITIONS                                     #
#====================================================================#
$vCenterServer = read-host "Select vCenter server to connect"
$vCenterAdministrator = read-host "Select vCenter Administrator"
$vCenterPassword = read-host "Select vCenter Administrator password"
$cluster = read-host "Select Cluster to add host"
Write-Host "vSphere Host will be added in vCenter server..." -foregroundcolor Green
#====================================================================#
Write-Host "Connect to the target vCenter server" -foregroundcolor green
#====================================================================#
Connect-VIServer "$vCenterServer" -User "$vCenterAdministrator" -Password "$vCenterPassword"
#====================================================================#
Add-VMHost $ESX_host -Force -Location (Get-Cluster "$cluster") -User root -Password "$root_password" | out-null
#====================================================================#
#
#
#====================================================================#
# ***FINISHING CONFIGURATION***                                      #
#====================================================================#
Write-Host "Tell DRS to re-balance VMs including the new host" -foregroundcolor green
#====================================================================#
Get-DrsRecommendation -Cluster (Get-Cluster "$cluster") -Refresh | out-null
#====================================================================#
#
#
Write-Host "Host is added to vCenter Server.." -foregroundcolor yellow
break;
}
}

}
while ($response -ne "0")

image

About Author

2 thoughts on “VMware: Configure new vSphere 4 host with PowerCLI

  1. Pingback: Gerjon

Leave a Reply

Your email address will not be published. Required fields are marked *