VMware: Configure new vSphere 6 host with PowerCLI
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 ModeMenu option: 2 – Configure new vSphere host to vCenter Server
— Connect vCenter server
— Add vSphere Host to vCenter server
— Re-balance ClusterMenu 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 v3Storage
— 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:
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”)
Thanks a lot Jacque!!