VMware: Configure new vSphere 6 host with PowerCLI

3

Last week I upgraded my original Configure vSphere 4 PowerCLI script I created in 2011 . When you run the script with PowerShell ICE or PowerCLI you have two options: 1. Configure a new vSphere 6 host. 2. Add the new configured host to vCenter Server. I’m still not a PowerCLI Pro so.. please comment if you have any tips or suggestions.

Benefits:

— When you use this script, the script is your vSphere configuration documentation
— You don’t need a license for Host Profiles or revert temporary to Evaluation Mode
— Fresh (new) host configuration takes ~10 minutes
— vSphere Host configuration standardization
— Easy add variables during deployment
— Easy GUI menu

 

Function:

Menu option: 1 – Configure new vSphere host

— Connect to the target ESXi Host
— Enter Maintenance mode
— Set Hostname and Domain name
— Configure DNS settings
— Configure NTP settings
— Configuring Simple Network Management Protocol (SNMP)
— Delete the default VM Network
— Configure vSwitch0 – Management / vMotion
— Configure vSwitch1 – Production Network
— Configure vSwitch2 – iSCSI
— Configure vSwitch3 – iSCSI
— Install Software iSCSI Initiator
— Configure iSCSI target address
— Configure iSCSI initiator name
— Enable iSCSI Initiator
— Rescan on all HBAs and Rescan for VMFS volumes
— Exit Maintenance Mode

Menu option: 2 – Configure new vSphere host to vCenter Server

— Connect vCenter server
— Add vSphere Host to vCenter server
— Re-balance Cluster

Menu option: 0 – Quit

 


Script upgraded for hardware setup:

Host

— Type: Dell PowerEdge R630
— Network: 6x 10 GB
— Storage: flash (2×8 GB)
— Memory: 256 GB
— CPU:  2x E5-2660 v3

Storage

— Dell Compellent SC4020 (iSCSI)

Network

— DellForce 10


Script:

#====================================================================#
#   SCRIPT:        VMP_Configure_new_vSphere6_Host_with_Menu.ps1     #
#   FUNCTION:      Configure fresh installed host                    #
#   CREATED:       05/07/2011                                        #
#   MODIFIED:      17/08/2015                                        #
#   OWNER:         S.Daems / VMpros.nl                               #
#   VERSION:       v.1.7                                             #
#====================================================================#
#   CHANGELOG:                                                       #
#                                                                    #
#   v.1.7                                                            #
#                                                                    #
#    - Script upgraded to vSphere 6.0                                #
#    -- Updated obsolete commands (vSphere 6 proof)                  #
#    - Install and configure 10GB iSCSI storage network              #
#    -- Configure iSCSI initiator                                    #
#    -- Configure iSCSI initator IQN name                            #
#    - Updated and configure SMNP                                    #
#    - Updated DNS settings                                          #
#    - Updated Custom Definitions field                              #
#    - Updated Network Configuration parameters                      #
#                                                                    #
#   USAGE:                                                           #
#                                                                    #
#    - Edit script in Windows PowerShell ISE / Notepad ++            #
#    - Add static values in "Custom Definitions" section             #
#    - Run script with Windows PowerShell ISE or PowerCLI 6.0        #                                                                    #
#    - Answer dynamic values during script                           #                                                                 #
#    - Enjoy!                                                        #
#                                                                    #
#                                                                    #
#   NOTE:                                                            #
#                                                                    #
#    - Run this script only on a empty vSphere 6 host                #
#    - Check if the correct pNIC's are configured for NIC Teaming    #
#    - This script is written with VMware vSphere PowerCLI 6.0       #
#                                                                    #
#                                                                    #
#====================================================================#
#   MENU                                                             #
#====================================================================#
do {
 
Write-Host "Please make your choice:" -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"
$New_hostname = read-host "Select hostname to configure"
$New_domainname = "VMpros.lan"
$Root_user = "root"
$Root_password = "VMpros#2015!"
$DNS01 = "10.32.17.5"
$DNS02 = "10.32.17.6"
$VMK01 = read-host "Select iSCSI VMkernel 01 IP-address to configure"
$VMK02 = read-host "Select iSCSI VMkernel 02 IP-address to configure"
$VLAN01_label = "VMP-VLAN200"
$VLAN02_label = "VMP-VLAN300"
$VLAN03_label = "VMP-VLAN400"
$VLAN04_label = "VMP-VLAN500"
$VLAN05_label = "VMP-VLAN600"
$VLAN06_label = "VMP-VLAN700"
$VLAN01_id = "200"
$VLAN02_id = "300"
$VLAN03_id = "400"
$VLAN04_id = "500"
$VLAN05_id = "600"
$VLAN06_id = "700"
$iSCSI_sub = "255.255.255.0"
$iSCSI_target_A = "172.45.21.40"
$iSCSI_target_B = "172.45.22.40"
$vMotion_ip = read-host "Select vMotion VMkernel IP-address to configure"
$vMotion_sub = "255.255.255.0"
$NTP01 = "0.nl.pool.ntp.org"
$NTP02 = "1.nl.pool.ntp.org"
$MTU = "9000"
#
#
#
#====================================================================#
# ***LOAD PLUGINS***                                                 #
#====================================================================#
Add-PSSnapin vmware.vimautomation.core
#====================================================================#
#
#
#
#====================================================================#
Write-Host "-- vSphere Host-configuration starting..." -foregroundcolor yellow
#====================================================================#
Write-Host "-- Connect to the target ESXi Host" -foregroundcolor green
#====================================================================#
Set-PowerCLIConfiguration -invalidCertificateAction "ignore" -confirm:$false | out-null
Connect-VIServer "$ESX_host" -User "$Root_user" -Password "$Root_password" | out-null
Start-Sleep -Seconds 10
#--------------------------------------------------------------------#
Write-Host "-- Enter Maintenance mode" -foregroundcolor green | out-null
#--------------------------------------------------------------------#
Get-VMHost | Set-VMHost -State maintenance | out-null
#--------------------------------------------------------------------#
#
#
#
#====================================================================#
# ***CONFIGURE HOST SETTINGS***                                      #
#====================================================================#
Write-Host "-- Set Hostname and Domain name" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHostNetwork | Set-VMHostNetwork -DomainName $New_domainname -HostName $New_hostname | out-null
Start-Sleep -Seconds 10
#--------------------------------------------------------------------#
Write-Host "-- Configure DNS settings" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHostNetwork | Set-VMHostNetwork -DnsAddress "$DNS01" , "$DNS02" -SearchDomain "$New_domainname" | out-null
#--------------------------------------------------------------------#
Write-Host "-- Configure NTP settings" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHost | Add-VmHostNtpServer -NtpServer "$NTP01" , "$NTP02" | out-null
Get-VMHost | Get-VMHostFirewallException | where {$_.Name -eq "NTP client"} | Set-VMHostFirewallException -Enabled:$true | out-null
Get-VMHost | Get-VmHostService | Where-Object {$_.key -eq "ntpd"} | Start-VMHostService | out-null
Get-VMhost | Get-VmHostService | Where-Object {$_.key -eq "ntpd"} | Set-VMHostService -policy "automatic" | out-null
#--------------------------------------------------------------------#
Write-Host "-- Configuring Simple Network Management Protocol (SNMP)" -foregroundcolor green
#--------------------------------------------------------------------#
Get-VMHostSNMP | Set-VMhostSnmp -ReadOnlyCommunity 'public' | out-null
Get-VMHostSnmp | Set-VMHostSnmp -Enabled:$true | out-null
#--------------------------------------------------------------------#
#
#
#
#====================================================================#
# ***CONFIGURE NETWORK SWITCHES***                                   #
#====================================================================#
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,vmnic7 -Confirm:$false | out-null
New-VMHostNetworkAdapter -PortGroup vMotion -VirtualSwitch vSwitch0 -IP "$vMotion_ip" -SubnetMask "$vMotion_sub" -vMotionEnabled:$true -Confirm:$false | out-null
Get-virtualportgroup -name vMotion | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic7 | out-null
Get-virtualportgroup -name vMotion | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic0 | out-null
Get-virtualportgroup -name "Management Network" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic7 | out-null
Get-virtualportgroup -name "Management Network" | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic0 | out-null
#--------------------------------------------------------------------#
Write-Host "-- Configure vSwitch1 - Production Network" -foregroundcolor green
#--------------------------------------------------------------------#
New-VirtualSwitch -Name vSwitch1 -Nic vmnic4,vmnic6 -Confirm:$false | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "$VLAN01_label" -VLANID "$VLAN01_id" | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "$VLAN02_label" -VLANID "$VLAN02_id" | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "$VLAN03_label" -VLANID "$VLAN03_id" | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "$VLAN04_label" -VLANID "$VLAN04_id" | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "$VLAN05_label" -VLANID "$VLAN05_id" | out-null
Get-VirtualSwitch -Name vSwitch1 | New-VirtualPortGroup -Name "$VLAN06_label" -VLANID "$VLAN06_id" | out-null
#--------------------------------------------------------------------#
Write-Host "-- Configure vSwitch2 - iSCSI" -foregroundcolor green
#--------------------------------------------------------------------#
New-VirtualSwitch -Name vSwitch2 -Nic vmnic5 -MTU $MTU | out-null
New-VMHostNetworkAdapter -PortGroup "iSCSI01" -VirtualSwitch vSwitch2 -IP $VMK01 -SubnetMask "$iSCSI_sub" -MTU "$MTU" | out-null
#--------------------------------------------------------------------#
Write-Host "-- Configure vSwitch3 - iSCSI" -foregroundcolor green
#--------------------------------------------------------------------#
New-VirtualSwitch -Name vSwitch3 -Nic vmnic1 -MTU $MTU | out-null
New-VMHostNetworkAdapter -PortGroup "iSCSI02" -VirtualSwitch vSwitch3 -IP $VMK02 -SubnetMask "$iSCSI_sub" -MTU "$MTU" | out-null
#------------------------------------------------------------------
#
#
#
#=====================================================================#
# ***CONFIGURE STORAGE***                                             #
#=====================================================================#
Write-Host "-- Install Software iSCSI Initiator" -foregroundcolor green
#---------------------------------------------------------------------#
Get-VMHostStorage $ESX_host | Set-VMHostStorage -SoftwareIScsiEnabled $false | out-null
Start-Sleep -Seconds 15 
#---------------------------------------------------------------------#
Write-Host "-- Configure iSCSI target address" -foregroundcolor green
#---------------------------------------------------------------------#
$iSCSI_HBA = Get-VMHost | Get-VMHostHba | Where {$_.Type -eq "Iscsi"} | Where {$_.Model -eq "iSCSI Software Adapter"}
Get-VMHostHba "$iSCSI_HBA" | New-IScsiHbaTarget -Address "$iSCSI_target_A" | out-null
Get-VMHostHba "$iSCSI_HBA" | New-IScsiHbaTarget -Address "$iSCSI_target_B" | out-null
#---------------------------------------------------------------------#
Write-Host "-- Configure iSCSI initiator name" -foregroundcolor green
#---------------------------------------------------------------------#
Get-VMHost | Get-VMHostHba | Where {$_.Type -eq "Iscsi"} | Where {$_.Model -eq "iSCSI Software Adapter"} | Set-VMHostHba -IScsiName "iqn.1998-01.com.vmware$ESX_host" | out-null
#---------------------------------------------------------------------#
Write-Host "-- Enable iSCSI Initiator" -foregroundcolor green
#---------------------------------------------------------------------#
Get-VMHostStorage $ESX_host | Set-VMHostStorage -SoftwareIScsiEnabled $True | out-null
#---------------------------------------------------------------------#
Write-Host "-- Rescan on all HBAs and Rescan for VMFS volumes" -foregroundcolor green
#---------------------------------------------------------------------#
Get-VMHostStorage -VMHost $ESX_host -RescanAllHba | out-null
Get-VMHostStorage -VMHost $ESX_host -RescanVmfs | 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                                     #
#====================================================================#
$vCenter_server = read-host "Select vCenter server to connect"
$vCenter_administrator = read-host "Select vCenter Administrator"
$vCenter_password = read-host "Select vCenter Administrator password"
$vCenter_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 "$vCenter_server" -User "$vCenter_administrator" -Password "$vCenter_password"
#====================================================================#
Add-VMHost $ESX_host -Force -Location (Get-Cluster "$vCenter_cluster") -User root -Password "$Root_password" | out-null
#====================================================================#
#
#
#
#====================================================================#
# ***FINISHING CONFIGURATION***                                      #
#====================================================================#
Write-Host "Re-balance VMs in cluster using DRS" -foregroundcolor green
#====================================================================#
Get-DrsRecommendation -Cluster (Get-Cluster "$vCenter_cluster") -Refresh | out-null
#====================================================================#
#
#
#
Write-Host "Host is added to vCenter Server.." -foregroundcolor yellow
break;
}
}
 
}
while ($response -ne "0")

 

 

Script output:

image

 

 

About Author

3 thoughts on “VMware: Configure new vSphere 6 host with PowerCLI

  1. Very good script. I use this for new ESXi installation.
    I add iSCSI tunning :

    $esxcli = Get-VMHost | Get-EsxCli
    $esxcli.system.module.parameters.set($false,”iscsi_vmk”,”iscsivmk_LunQDepth=255″)
    $esxcli.iscsi.adapter.param.set($iSCSI_HBA.device,$false,’LoginTimeout’,’60’)
    $esxcli.iscsi.adapter.param.set($iSCSI_HBA.device,$false,’NoopOutTimeout’,’30’)
    $esxcli.storage.nmp.satp.set($null,”VMW_PSP_RR”,”VMW_SATP_DEFAULT_AA”)
    $esxcli.storage.nmp.satp.rule.add($null,$null,”iSCSI Devices”,$null,$null,$null,”Compellent Vol”,$null,”VMW_PSP_RR”,”iops=3″,”VMW_SATP_DEFAULT_AA”,$null,$null,”COMPELNT”)

Leave a Reply

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