VMware vSphere PowerCLI version 4.1 Update 1 released

VMware has released PowerCLI 4.1 Update 1 build 332441. This release of vSphere PowerCLI 4.1 Update 1 introduces the following new capabilities:

    * Using the ESX CLI and ESX Top features of VMware vSphere. (experimental)
    * Working with distributed switches and distributed switch port groups.
    * Supporting SCSI controllers.
    * Querying and modifying vCenter Server alarms.
    * Managing advanced vCenter Server settings and Cluster HA advanced options.
    * Waiting for VMware Tools of the specified virtual machines to load.
    * Querying information about disk and disk partitions of hosts.
    * Formatting host disk partitions.
    * Querying the primary HA cluster nodes.
    * Zeroing out virtual machine hard disks.

In addition, the following changes were made in PowerCLI 4.1 Update 1:

    * The DeleteFromDisk parameter of the Remove-VM, Remove-Folder, Remove-HardDisk, Remove-Template, and Remove-VApp cmdlets is now renamed to DeletePermanently.
    * The Set-VMGuestRoute cmdlet was removed for usability and stability reasons. Instead of modifying a route, you can create a new route and delete the old one.

The complete PowerCLI changelog can be found here and can be downloaded from this link.

VMware ESX Post installation configuration via PowerCLI


    I made a simple example script using the VMware PowerCLI that can be used to do the post installation configuration of a VMware ESX 4 server. This script does the following things:

    • – Connect to VMware ESX server

    • – Set the SC memory to 800MB

    • – Creates vSwitch2 and add vmnic2 and vmnic3

    • – Add several PortGroups and VLANs to vSwitch2

    • – Remove default PortGroup VM Network

    • – Creates a VMkernel VMotion port with IP address, subnetmask and VLAN

    • – Add vmnic0 and vmnic1 to vSwitch0, set for the VMotion port vmnic1 active and vmnic0 standby and for the Service Console port vmnic0 active and vmnic1 standby

    • – Configure NTP servers and open the firewall

    • – Sets advanced settings Disk.UseDeviceReset to 0 and Disk.UseLUNReset  to 1

    • – Sets he Qlogic HBA queue depth and the Disk.SchedNumReqOutstandig to 64

    • – Enable VMhost Startup and stop

    Here’s the listing of the script:

    # Title: VMware ESX4 Post config #
    Filename:    esx4postconfig.sp1 # 
    Created by: Ivo Beerens #                                                      
    Date: February 2010 #                                                            
    Version: 1.0 #
    Website: www.ivobeerens.nl #                                                        
    E-mail: ivo[AT]ivobeerens.nl #                                                        

    # Variables #
    vCenter name and port #
    $vcserver = "vc01"
    $portvc = "443"
    #Service Console memory #
    $SCMemory = 800
    # default PortGroup #
    $DefaultPG = Get-VirtualPortgroup -Name VM Network
    # VMotion IP, subnetmask and VLAN
    $VMotionIP =“
    $VMotionSubnet = ““
    $VMotionVLan =
    # HBA Queue depth #
    $HBAqueudepth = 64
    # vSwitch names #
    $Switch1 =
    $Switch2 =

    Connect-VIServer $vcserver -User root -Password idontknow -port $portvc

    # Set SC memory to 800MB #
    Get-VMHost | Get-View | %{(Get-View -Id $_.ConfigManager.MemoryManager).ReconfigureServiceConsoleReservation($SCMemory*1mb)}

    # Create vSwitch1 and add vmnic2 and vmnic3 #
    New-VirtualSwitch -Name $Switch2 -Nic vmnic2,vmnic3

    # Add PortGroups and VLANs  to the vSwitch2 #
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name"VLAN999 Management" -VLANID 999
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN100 Servers" -VLANID 100
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN99 Clients Ser-D" -VLANID 99
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN98 Clients Ser-B" -VLANID 98
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN33 Secure LAN" -VLANID 33
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN32 DMZ3" -VLANID 32
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN31 DMZ1" -VLANID 31
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN30 DMZ0" -VLANID 30
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN7 VOiP" -VLANID 7
    get-vmhost | Get-VirtualSwitch -Name $Switch2 | New-VirtualPortGroup -Name
    "VLAN1 Default"

    # Remove default Port Group after default installation #
    Remove-VirtualPortGroup -VirtualPortGroup $DefaultPG -Confirm:$false

    # Creates a VMkernel port VMotion on vSwitch0 #
    New-VMHostNetworkAdapter -PortGroup “VMotion“ -VirtualSwitch $Switch1 -IP $VMotionIP -SubnetMask $VMotionSubnet -VMotionEnabled:$true

    # Set VLAN of the VMotion VMkernel #
    $VMotionPG = Get-VirtualPortgroup -Name ‘VMotion’
    Set-VirtualPortGroup -VirtualPortGroup $VMotionPG -VlanId $VMotionVLan

    # Add vmnic0 and vmnic1 to vSwitch0 #
    $vs = get-virtualswitch -name $Switch0
    Set-VirtualSwitch -VirtualSwitch $vs -Nic vmnic0,vmnic1

    # Set VMotion vmnic1 active vmnic0 standby #
    get-virtualportgroup -name VMotion | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic1
    get-virtualportgroup -name VMotion | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic0

    # Set Service Console vmnic0 active, vmnic1 standby #
    get-virtualportgroup -name ‘Service Console’ | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicActive vmnic0
    get-virtualportgroup -name ‘Service Console’ | Get-NicTeamingPolicy | Set-NicTeamingPolicy -MakeNicStandby vmnic1

    # Configures NTP, add NTP servers, starts NTP and open the firewall port #
    Add-VmHostNtpServer -NtpServer "0.vmware.pool.ntp.org"
    Add-VmHostNtpServer -NtpServer
    Add-VmHostNtpServer -NtpServer
    "NTP Client" | Set-VMHostFirewallException -enabled:$true

    # Advanced settings instellen #
    Set-VMHostAdvancedConfiguration -Name"Disk.UseDeviceReset" -Value 0
    Set-VMHostAdvancedConfiguration -Name
    "Disk.UseLunReset" -Value 1

    # Set the queuedepth for the Qlogic HBA and SchedNumReqOutstanding setting #
    Get-VMhostModule "qla2xxx" | Set-VMHostModule -Options"ql2xmaxqdepth=$HBAqueudepth"
    Set-VMHostAdvancedConfiguration -Name
    "Disk.SchedNumReqOutstanding" -Value $HBAqueudepth

    # Enable VMHostStartup #
    $VMstart = Get-VMHostStartPolicy
    Set-VMHostStartPolicy -VMHostStartPolicy $VMstart -Enabled:$true -StartDelay 60 -StopDelay 60 -StopAction GuestShutDown

    # Disconnect #
    disconnect-viserver -confirm:$false

    It’s easy to adjust the settings for your need. This shows the strength to use the PowerCLI for doing automation in VMware. If you have suggestions please let me know.