<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>article Cisco UCS and VMware Integration in VMware PowerCLI Documents</title>
    <link>https://communities.vmware.com/t5/VMware-PowerCLI-Documents/Cisco-UCS-and-VMware-Integration/ta-p/2793901</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This document shows examples of using Cisco UCS PowerTool and VMware PowerCLI to build from bare metal up to the VMware Hypervisor.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;These scripts not only deployed the Cisco UCS blades but also downloaded the&amp;nbsp; latest version of ESXi from the VMware website, used this to PXE boot the UCS&amp;nbsp; blades with VMware Auto Deploy and then finally applied created and utilized a&amp;nbsp; host configuration using Host Profiles.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There was very minimal pre-work performed for both UCS and VMware in the&amp;nbsp; environment being demoed in the video below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For UCS, the pre-work that was performed was racking, stacking, and cabling&amp;nbsp; the physical UCS gear and performing an initial configuration of UCS manager.&amp;nbsp;&amp;nbsp; On the storage side, a 200 GB LUN was created and zoned to a range of 18 WWPN's&amp;nbsp; as well, of course this could also have been done with PowerShell snapins from&amp;nbsp; some of the storage vendors if needed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For VMware, vSphere and Auto-Deploy software were both installed and&amp;nbsp; configured inside of a Windows 2008 R2 server that had DNS, DHCP, and TFTP&amp;nbsp; installed and configured to best practices from VMware for AutoDeploy.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From there, PowerShell utilizing the Cisco UCS PowerTool module and VMware&amp;nbsp; PowerCLI snap-ins takes over!!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Three different scripts were created to perform the following functions:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Initial Configuration&lt;/STRONG&gt; - The first scripts configures all of&amp;nbsp; the pools, policies, VLANs, VSANs, Service Profile Templates, etc. needed on the&amp;nbsp; UCS side to create new servers to be used in the cluster to be created in&amp;nbsp; VMware.&amp;nbsp; On the VMware side, this script will download the latest ESXi&amp;nbsp; hypervisor, as well as create separate AutoDeploy Hypervisor and Cluster rules&amp;nbsp; that define the hypervisor version and destination cluster for net new servers&amp;nbsp; with the Service Profile Template name provided in the OEM strings like&amp;nbsp; "oemstring=$SPT:CL2012", where CL2012 is the service profile template name.&amp;nbsp; The&amp;nbsp; script will create a new service profile from a template, associate it with a&amp;nbsp; server from a pool, monitor the progress of the association and addition of the&amp;nbsp; host into the cluster, perform initial configuration of the new host in the&amp;nbsp; cluster and create a host profile from the configuration, and create a rule for&amp;nbsp; the cluster to use the new host profile. &lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Addition of New Hypervisors&lt;/STRONG&gt; - The second script is run to&amp;nbsp; add new hypervisors to the cluster created in step one.&amp;nbsp; This script&amp;nbsp; accomplishes that by creating a new service profile from the template created in&amp;nbsp; script one, associating it, and booting it which will cause the server to boot&amp;nbsp; via AutoDeploy based on the AutoDeploy and cluster rules created from script&amp;nbsp; one, which are triggered from the service profile template name.&amp;nbsp; The script&amp;nbsp; will verify the host is added to the cluster and is fully compliant with the&amp;nbsp; host profile created in step one. &lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Rolling Hypervisor and Server Firmware Upgrade of a Cluster&lt;/STRONG&gt; - The&amp;nbsp; third script will download the newest version of a ESXi hypervisor from VMware,&amp;nbsp; create a new AutoDeploy rule utilizing it for servers that are created from the&amp;nbsp; Service Profile Template created in step one.&amp;nbsp; Once the rules are updated, the&amp;nbsp; script will loop through each hypervisor one by one in the cluster by first&amp;nbsp; setting the hypervisor in maintenance which will trigger VM evacuation, shutting&amp;nbsp; the hypervisor down, change the host firmware pack on the service profile which&amp;nbsp; upgrades the firmware on the server, powering the server on which will cause the&amp;nbsp; server to boot the updated version of ESXi via AutoDeploy and rejoin the&amp;nbsp; cluster.&amp;nbsp; &lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;These scripts are provided freely as examples of how you can use both UCS&amp;nbsp; PowerTool and VMware PowerCLI together to achieve end to end automation.&amp;nbsp; Please&amp;nbsp; feel free to modify and utilize them as examples of how you might automate UCS&amp;nbsp; and VMware in your own datacenter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;Script 1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;# Import Modules&lt;BR /&gt;if ((Get-Module |where {$_.Name -ilike "CiscoUcsPS"}).Name -ine "CiscoUcsPS")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading Module: Cisco UCS PowerTool Module"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Import-Module CiscoUcsPs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike " VMware.DeployAutomation"}).Name -ine "VMware.DeployAutomation")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.DeployAutomation"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.DeployAutomation -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "VMware.ImageBuilder"}).Name -ine "VMware.ImageBuilder")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.ImageBuilder"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.ImageBuilder -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;set-ucspowertoolconfiguration -supportmultipledefaultucs $false&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Global Variables&lt;BR /&gt;$ucs = "172.25.206.5"&lt;BR /&gt;$ucsuser = "ucs-ericwill\admin"&lt;BR /&gt;$ucspass = "Nbv12345!"&lt;BR /&gt;$ucsorg = "org-root"&lt;BR /&gt;$tenantname = "CL2012"&lt;BR /&gt;$macpoolblockfrom = "00:25:B5:ED:01:01"&lt;BR /&gt;$macpoolblockto = "00:25:B5:ED:01:09"&lt;BR /&gt;$wwpnpoolblockfrom = "20:00:00:25:B5:ED:02:01"&lt;BR /&gt;$wwpnpoolblockto = "20:00:00:25:B5:ED:02:12"&lt;BR /&gt;$private = "10"&lt;BR /&gt;$public = "206"&lt;BR /&gt;$vCenter = "172.25.206.186"&lt;BR /&gt;$vcuser = "Administrator"&lt;BR /&gt;$vcpass = "Nbv12345"&lt;BR /&gt;$WarningPreference = "SilentlyContinue"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging into UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucspasswd = ConvertTo-SecureString $ucspass -AsPlainText -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucscreds = New-Object System.Management.Automation.PSCredential ($ucsuser, $ucspasswd)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogin = Connect-Ucs -Credential $ucscreds $ucs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Deploy Rule for Hypervisor to be deploy based on SP name and another rule for cluster name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging into vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogin = Connect-VIServer $vCenter -User $vcuser -Password $vcpass | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Mac Pool&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating MAC Pool: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $macpool =&amp;nbsp; Get-UcsManagedObject -Dn $ucsorg | Add-UcsMacPool -name $tenantname -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $macpoolblock = $macpool | Add-UcsMacMemberBlock -From $macpoolblockfrom -To $macpoolblockto -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create WWPN Pool&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating WWPN Pool: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $wwpnpool = Get-UcsManagedObject -Dn $ucsorg&amp;nbsp; | Add-UcsWwnPool -Name $tenantname -Purpose "port-wwn-assignment" -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $wwpnpoolblock = $wwpnpool | Add-UcsWwnMemberBlock -From $wwpnpoolblockfrom -To $wwpnpoolblockto -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Server Pool&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Server Pool: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serverpool =&amp;nbsp; Get-UcsManagedObject -Dn $ucsorg | Add-UcsServerPool -Name $tenantname -ModifyPresent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Server Qualification Policy&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Server Qualification Policy: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serverqualpol = Get-UcsManagedObject -Dn $ucsorg | Add-UcsServerPoolQualification -Name $tenantname -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serveradaptorqual = $serverqualpol | Add-UcsAdaptorQualification -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serveradaptorcapqual = $serveradaptorqual | Add-UcsAdaptorCapQualification -Maximum "unspecified" -Model "N20-AC0002" -Type "virtualized-eth-if" -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $servercpuqual = $serverqualpol | Add-UcsCpuQualification -Model "N20-X00002" &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Server Pool Policy (for dynamic server pools based on qualification policy)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Server Pool Policy: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serverpoolpol = Get-UcsManagedObject -Dn $ucsorg | Add-UcsServerPoolPolicy -Name $tenantname -PoolDn $serverpool.dn -Qualifier $serverqualpol.Name -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Boot Policy&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Boot Policy: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $bootpol = Get-UcsManagedObject -Dn $ucsorg | Add-UcsBootPolicy -EnforceVnicName "yes" -Name $tenantname -RebootOnUpdate "no" -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $pxe = $bootpol | Add-UcsLsbootLan -ModifyPresent -Order "1" -Prot "pxe"&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $eth0 = $pxe | Add-UcsLsbootLanImagePath -BootIpPolicyName "" -ISCSIVnicName "" -ImgPolicyName "" -ImgSecPolicyName "" -ProvSrvPolicyName "" -Type "primary" -VnicName "eth0"&amp;nbsp; -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create any needed VLANs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating VLAN vlan$private"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vlanprivate = get-ucslancloud | Add-UcsVlan -Name vlan$private -Id $private -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating VLAN vlan$public"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vlanpublic = get-ucslancloud | Add-UcsVlan -Name vlan$public -Id $public -ModifyPresent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create any needed VSANs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating VSAN default"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vsan1 = Get-UcsSanCloud | Add-UcsVsan -Name default -Id 1 -ModifyPresent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Service Profile Template (using MAC, WWPN, Server Pools, VLANs, VSans, Boot Policy, etc. previously created steps) with desired power state to down&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating SP Template: $tenantname in UCS org: $ucsorg"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptemplate = Get-UcsManagedObject -Dn $ucsorg |&amp;nbsp; Add-UcsServiceProfile -BootPolicyName $tenantname -HostFwPolicyName "default" -IdentPoolName "default" -LocalDiskPolicyName "default" -MaintPolicyName "default" -Name $tenantname -PowerPolicyName "default" -StatsPolicyName "default" -Type "initial-template" &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptvnic1 = $sptemplate | Add-UcsVnic -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -Mtu 1500 -Name "eth0" -Order "1" -StatsPolicyName "default" -SwitchId "A-B"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vnic1private = $sptvnic1 | Add-UcsVnicInterface -DefaultNet "yes" -Name $vlanprivate.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptvnic2 = $sptemplate | Add-UcsVnic -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -Mtu 1500 -Name "eth1" -Order "2" -StatsPolicyName "default" -SwitchId "B-A"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vnic2public = $sptvnic2 | Add-UcsVnicInterface -DefaultNet "yes" -Name $vlanpublic.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptfc0 = $sptemplate | Add-UcsVhba -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -MaxDataFieldSize 2048 -Name "fc0" -Order "3" -PersBind "disabled" -PersBindClear "no" -StatsPolicyName "default" -SwitchId "A"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $fc0vsan = $sptfc0 | Add-UcsVhbaInterface -Name $vsan1.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptfc1 = $sptemplate | Add-UcsVhba -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -MaxDataFieldSize 2048 -Name "fc1" -Order "4" -PersBind "disabled" -PersBindClear "no" -StatsPolicyName "default" -SwitchId "B"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $fc1vsan = $sptfc1 | Add-UcsVhbaInterface -Name $vsan1.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptwwnn = $sptemplate | Add-UcsVnicFcNode -IdentPoolName "node-default"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptserverpool = $sptemplate | Add-UcsServerPoolAssignment -Name $tenantname -RestrictMigration "no"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptpowerstate = $sptemplate | Set-UcsServerPower -State "down" -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Add ESXi Image Profile from VMware.com&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Adding VMware ESXi Library from online depot"&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SoftwareDepot = Add-EsxSoftwareDepot "&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml"&gt;https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml&lt;/A&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $LatestImageProfile = Get-EsxImageProfile | Where { $_.Name -match "no-tools" } | Sort ModifiedTime -desc | select -first 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Auto-deploy rule using the Service Profile Template OEM string from UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $pattern = "oemstring=`$SPT:$($SPTemplate.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating ESXi deploy rule for '$($pattern)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DeployRule = New-DeployRule -Name "DeployESXiImage" -Item $LatestImageProfile -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AddRule = $DeployRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create vCenter Cluster&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating vCenter Cluster: $tenantname if it doesnt already exist"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (-Not (Get-Cluster $tenantname -ErrorAction SilentlyContinue)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Cluster = Get-Datacenter | Select -First 1 | New-Cluster $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } Else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Cluster = Get-Cluster $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Enabling DRS and setting mode to 'FullyAutomated' for Cluster: $($Cluster)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DRSenable = $Cluster | Set-Cluster -DrsEnabled:$true -DrsMode FullyAutomated -drsautomationlevel FullyAutomated -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating vCenter Cluster rule for '$($pattern)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DeployRule = New-DeployRule -Name "AddHostsTo$($tenantname)Cluster" -Item $Cluster -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AddRule = $DeployRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Repairing active ruleset"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RepairRules = Get-VMHost | Test-DeployRuleSetCompliance | Repair-DeployRuleSetCompliance -ErrorAction SilentlyContinue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Initial ESXi Host from SP Template in UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating new Service Profile from SP Template: $($sptemplate.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $createnewsp = $sptemplate | Add-UcsServiceProfileFromTemplate -Count 1 -DestinationOrg (Get-UcsManagedObject -Dn $ucsorg) -Prefix "esxi-host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spmacaddr = $createnewsp | Get-UcsVnic -Name eth0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Monitor UCS SP Associate for completion&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting for UCS SP: $($createnewsp.name) to complete SP association process"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Set SP Desired Power State to UP in newly created SP&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Setting Desired Power State to 'up' of Service Profile: $createnewsp"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $powerspon = $createnewsp | Set-UcsServerPower -State "up" -Force&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Wait for Hypervisor to boot from network w/ Auto-Deploy and connect to vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Waiting for Host with MAC address of $($spmacaddr.Addr) to connect to vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ($VMHost = (get-vmhost -ErrorAction SilentlyContinue | foreach { $_.NetworkInfo.PhysicalNic | where { $_.Mac -ieq $spmacaddr.Addr } } | select -expandproperty vmhost ))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If ($VMHost.State -ne "Maintenance") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Maintenance&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Config changes to host before host profile&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: COnfiguring VM Hypervisor Host: $($VMhost.name) before creating a Host Profile"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Removing defualt VM Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $VMNetwork = Get-VirtualPortGroup -Name "VM Network" -VMHost $VMHost | Remove-VirtualPortGroup -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Creating VMotion Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Vmotion = New-VMHostNetworkAdapter -VMHost $vmhost -PortGroup "VMotion" -VirtualSwitch (Get-VirtualSwitch -VMHost $vmhost -Name vSwitch0) -VMotionEnabled:$true&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Creating New Virtual Switch"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vSwitch1 = New-VirtualSwitch -VMHost $vmhost -Name "vSwitch1" -Nic (Get-VMHostNetworkAdapter -VMHost $vmhost -Name "vmnic1")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Creating New VM Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $VMNetwork = $vSwitch1 | New-VirtualPortGroup "VM Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Setting Syslog Server"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SyslogServer = Set-VMHostSysLogServer -SysLogServer $vCenter -SysLogServerPort 514 -VMHost $VMhost&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating Host Profile: $tenantname from VM Hypervisor Host: $($VMhost.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (-Not (Get-VMHostProfile $tenantname -ErrorAction SilentlyContinue) ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $HostProfile = New-VMHostProfile -Name $tenantname -Description "Automatically generated host profile for $tenantname" -ReferenceHost $VMHost&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Edit the host profile to add the static password entry&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function Copy-Property ($From, $To, $PropertyName ="*")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($p in Get-Member -In $From -MemberType Property -Name $propertyName)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; trap {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-Member -In $To -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $To.$($P.Name) = $From.$($P.Name)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $hostProfileName = $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $newAdminPswd = "VMw@re123"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec = New-Object VMware.Vim.HostProfileCompleteConfigSpec&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copy-Property -From $HostProfile.ExtensionData.Config -To $spec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol = New-Object VMware.Vim.ProfilePolicy&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.Id = "AdminPasswordPolicy"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption = New-Object VMware.Vim.PolicyOption&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Id = "FixedAdminPasswordOption"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter += New-Object VMware.Vim.KeyAnyValue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter[0].Key = "password"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter[0].Value = New-Object VMware.Vim.PasswordField&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter[0].Value.Value = $newAdminPswd&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec.ApplyProfile.Security.Policy = @($secpol)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ChangeHostProfile = $HostProfile.ExtensionData.UpdateHostProfile($spec)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Hostprofile = Get-VMHostProfile $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Add a new Deployrule to associate the host profile to the Hosts&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Adding rule to use host profile"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DeployRule = New-DeployRule -Name "$($tenantname)HostProfile" -Item $HostProfile -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AddRule = $DeployRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host vC: "Repairing active ruleset"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RepairRules = $VMHost | Test-DeployRuleSetCompliance | Repair-DeployRuleSetCompliance -ErrorAction SilentlyContinue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Assigning HostProfile to new host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Assign = $VMHost | Apply-VMHostProfile -profile $HostProfile -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Test = $VMHost | Test-VMHostProfileCompliance&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: VM Hypervisor Host: $($VMHost.Name) Ready to use, removing Maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Connected&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging out of UCS: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogout = Disconnect-Ucs &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging out of vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogout = Disconnect-VIServer $vCenter -Confirm:$false&lt;BR /&gt;}&lt;BR /&gt;Catch&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Error occurred in script:"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host ${Error}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;BR /&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;Script 2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;# Import Modules&lt;BR /&gt;if ((Get-Module |where {$_.Name -ilike "CiscoUcsPS"}).Name -ine "CiscoUcsPS")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading Module: Cisco UCS PowerTool Module"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Import-Module CiscoUcsPs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike " VMware.DeployAutomation"}).Name -ine "VMware.DeployAutomation")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.DeployAutomation"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.DeployAutomation -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "VMware.ImageBuilder"}).Name -ine "VMware.ImageBuilder")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.ImageBuilder"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.ImageBuilder -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;set-ucspowertoolconfiguration -supportmultipledefaultucs 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Global Variables&lt;BR /&gt;$ucs = "172.25.206.5"&lt;BR /&gt;$ucsuser = "ucs-ericwill\admin"&lt;BR /&gt;$ucspass = "Nbv12345!"&lt;BR /&gt;$vCenter = "172.25.206.186"&lt;BR /&gt;$vcuser = "Administrator"&lt;BR /&gt;$vcpass = "Nbv12345"&lt;BR /&gt;$tenantname = "CL2012"&lt;BR /&gt;$ucsorg = "org-root"&lt;BR /&gt;$WarningPreference = "SilentlyContinue"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging into UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucspasswd = ConvertTo-SecureString $ucspass -AsPlainText -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucscreds = New-Object System.Management.Automation.PSCredential ($ucsuser, $ucspasswd)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogin = Connect-Ucs -Credential $ucscreds $ucs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging into vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogin = Connect-VIServer $vCenter -User $vcuser -Password $vcpass | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Initial ESXi Host&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating new Service Profile from SP Template: ${tenantname}"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptemplate = get-ucsmanagedobject -dn $ucsorg | Get-UcsServiceProfile -Type "initial-template" -Name $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $createnewsp = $sptemplate | Add-UcsServiceProfileFromTemplate -Count 1 -DestinationOrg (Get-UcsManagedObject -Dn $ucsorg) -Prefix "esxi-host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spmacaddr = $createnewsp | Get-UcsVnic -Name eth0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Monitor UCS SP Associate for completion&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting for UCS SP: $($createnewsp.name) to complete SP association process"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ( (Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Setting Desired Power State to 'up' of Service Profile: $($createnewsp.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $powerspon = $createnewsp | Set-UcsServerPower -State "up" -Force&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Waiting for VM Hypervisor Host with MAC address of $($spmacaddr.Addr) to connect to vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ($VMHost = (get-vmhost -ErrorAction SilentlyContinue | foreach { $_.NetworkInfo.PhysicalNic | where { $_.Mac -ieq $spmacaddr.Addr } } | select -expandproperty vmhost ))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Putting VM Hypervisor Host: $($VMhost.Name) into Maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If ($VMHost.State -ne "Maintenance") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Maintenance&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Checking HostProfile Compliance against new VM Hypervisor Host: $($VMhost.Name) "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Test = $VMHost | Test-VMHostProfileCompliance&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: VM Hypervisor Host: $($VMhost.Name) Ready to use, removing Maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Connected&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Disconnect from UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging out of UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogout = Disconnect-Ucs &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #disconnect from vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging out of vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogout = Disconnect-VIServer $vCenter -confirm:$false&lt;BR /&gt;}&lt;BR /&gt;Catch&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Error occurred in script:"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host ${Error}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;Script 3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;# Import Modules&lt;BR /&gt;if ((Get-Module |where {$_.Name -ilike "CiscoUcsPS"}).Name -ine "CiscoUcsPS")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading Module: Cisco UCS PowerTool Module"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Import-Module CiscoUcsPs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike " VMware.DeployAutomation"}).Name -ine "VMware.DeployAutomation")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.DeployAutomation"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.DeployAutomation -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "VMware.ImageBuilder"}).Name -ine "VMware.ImageBuilder")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.ImageBuilder"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.ImageBuilder -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;set-ucspowertoolconfiguration -supportmultipledefaultucs 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Global Variables&lt;BR /&gt;$ucs = "172.25.206.5"&lt;BR /&gt;$ucsuser = "ucs-ericwill\admin"&lt;BR /&gt;$ucspass = "Nbv12345!"&lt;BR /&gt;$ucsorg = "org-root"&lt;BR /&gt;$tenantname = "CL2012"&lt;BR /&gt;$vCenter = "172.25.206.186"&lt;BR /&gt;$vcuser = "Administrator"&lt;BR /&gt;$vcpass = "Nbv12345"&lt;BR /&gt;$NewImageProfile = "C:\VMware\ESX5.NextImageProfile.zip"&lt;BR /&gt;$ucshfpname = "2.1-0.323"&lt;BR /&gt;$WarningPreference = "SilentlyContinue"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging into UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucspasswd = ConvertTo-SecureString $ucspass -AsPlainText -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucscreds = New-Object System.Management.Automation.PSCredential ($ucsuser, $ucspasswd)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogin = Connect-Ucs -Credential $ucscreds $ucs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging into vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogin = Connect-VIServer $vCenter -User $vcuser -Password $vcpass | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Disable the current ESXi Image DeployRule" &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RemDepRule = Get-DeployRule -Name "DeployESXiImage" | Remove-DeployRule&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ESXDepot = Add-EsxSoftwareDepot "&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml"&gt;https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml&lt;/A&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #$ESXDeppt = Add-EsxSoftwareDepot $NewImageProfile&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $LatestImageProfile = Get-EsxImageProfile | sort ModifiedTime -Descending | Select -First 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $pattern = "oemstring=`$SPT:$($tenantname)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating ESXi deploy rule for '$($pattern)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $NewRule = New-DeployRule -Name "AddHostsTo$($tenantname)ClusterUpdatedImage" -Item $LatestImageProfile -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SetActive = $NewRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Repairing active ruleset"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RepairRules = Get-VMHost | Test-DeployRuleSetCompliance | Repair-DeployRuleSetCompliance -ErrorAction SilentlyContinue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foreach ($VMHost in (Get-Cluster $tenantname | Get-VMHost )) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Adding VM Hypervisor Host: $($VMHost.Name) into maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Maintenance&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Waiting for VM Hypervisor Host: $($VMHost.Name) to enter Maintenance Mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 10&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((Get-VMHost $VMHost).State -eq "Maintenance")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: VM Hypervisor Host: $($VMHost.Name) now in Maintenance Mode, shutting down Host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Shutdown = $VMHost.ExtensionData.ShutdownHost($true)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Correlating VM Hypervisor Host: $($VMHost.Name) to running UCS Service Profile (SP)"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vmMacAddr = $vmhost.NetworkInfo.PhysicalNic | where { $_.name -ieq "vmnic0" }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sp2upgrade =&amp;nbsp; Get-UcsServiceProfile | Get-UcsVnic -Name eth0 |&amp;nbsp; where { $_.addr -ieq&amp;nbsp; $vmMacAddr.Mac } | Get-UcsParent &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: VM Hypervisor Host: $($VMhost.Name) is running on UCS SP: $($sp2upgrade.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting to for UCS SP: $($sp2upgrade.name) to gracefully power down"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (get-ucsmanagedobject -dn $sp2upgrade.PnDn).OperPower -eq "off")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((get-ucsmanagedobject -dn $sp2upgrade.PnDn).OperPower -eq "off" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: UCS SP: $($sp2upgrade.name) powered down"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Setting desired power state for UCS SP: $($sp2upgrade.name) to down"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $poweron = $sp2upgrade | Set-UcsServerPower -State "down" -Force&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Changing Host Firmware pack policy for UCS SP: $($sp2upgrade.name) to '$($ucshfpname)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $updatehfp = $sp2upgrade | Set-UcsServiceProfile -HostFwPolicyName (Get-UcsFirmwareComputeHostPack -Name $ucshfpname).Name -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Acknowlodging any User Maintenance Actions for UCS SP: $($sp2upgrade.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (($sp2upgrade | Get-UcsLsmaintAck| measure).Count -ge 1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ackuserack = $sp2upgrade | get-ucslsmaintack | Set-UcsLsmaintAck -AdminState "trigger-immediate" -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting for UCS SP: $($sp2upgrade.name) to complete firmware update process for Host Firmware pack '$($ucshfpname)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((Get-UcsManagedObject -Dn $sp2upgrade.Dn).AssocState -ieq "associated")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Host Firmware Pack update process comlete.&amp;nbsp; Setting desired power state for UCS SP: $($sp2upgrade.name) to 'up'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $poweron = $sp2upgrade | Set-UcsServerPower -State "up" -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Waiting for VM Hypervisor Host: $($VMHost.Name) to connect to vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until (($VMHost = Get-VMHost $VMHost).ConnectionState -eq "Connected" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging out of UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogout = Disconnect-Ucs &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging out of vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogout = Disconnect-VIServer $vCenter -Confirm:$false&lt;BR /&gt;}&lt;BR /&gt;Catch &lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Error occurred in script:"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host ${Error}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 31 Jul 2012 19:33:57 GMT</pubDate>
    <dc:creator>alanrenouf</dc:creator>
    <dc:date>2012-07-31T19:33:57Z</dc:date>
    <item>
      <title>Cisco UCS and VMware Integration</title>
      <link>https://communities.vmware.com/t5/VMware-PowerCLI-Documents/Cisco-UCS-and-VMware-Integration/ta-p/2793901</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This document shows examples of using Cisco UCS PowerTool and VMware PowerCLI to build from bare metal up to the VMware Hypervisor.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;These scripts not only deployed the Cisco UCS blades but also downloaded the&amp;nbsp; latest version of ESXi from the VMware website, used this to PXE boot the UCS&amp;nbsp; blades with VMware Auto Deploy and then finally applied created and utilized a&amp;nbsp; host configuration using Host Profiles.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;There was very minimal pre-work performed for both UCS and VMware in the&amp;nbsp; environment being demoed in the video below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For UCS, the pre-work that was performed was racking, stacking, and cabling&amp;nbsp; the physical UCS gear and performing an initial configuration of UCS manager.&amp;nbsp;&amp;nbsp; On the storage side, a 200 GB LUN was created and zoned to a range of 18 WWPN's&amp;nbsp; as well, of course this could also have been done with PowerShell snapins from&amp;nbsp; some of the storage vendors if needed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For VMware, vSphere and Auto-Deploy software were both installed and&amp;nbsp; configured inside of a Windows 2008 R2 server that had DNS, DHCP, and TFTP&amp;nbsp; installed and configured to best practices from VMware for AutoDeploy.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From there, PowerShell utilizing the Cisco UCS PowerTool module and VMware&amp;nbsp; PowerCLI snap-ins takes over!!!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Three different scripts were created to perform the following functions:&lt;/P&gt;&lt;OL&gt;&lt;LI&gt;&lt;STRONG&gt;Initial Configuration&lt;/STRONG&gt; - The first scripts configures all of&amp;nbsp; the pools, policies, VLANs, VSANs, Service Profile Templates, etc. needed on the&amp;nbsp; UCS side to create new servers to be used in the cluster to be created in&amp;nbsp; VMware.&amp;nbsp; On the VMware side, this script will download the latest ESXi&amp;nbsp; hypervisor, as well as create separate AutoDeploy Hypervisor and Cluster rules&amp;nbsp; that define the hypervisor version and destination cluster for net new servers&amp;nbsp; with the Service Profile Template name provided in the OEM strings like&amp;nbsp; "oemstring=$SPT:CL2012", where CL2012 is the service profile template name.&amp;nbsp; The&amp;nbsp; script will create a new service profile from a template, associate it with a&amp;nbsp; server from a pool, monitor the progress of the association and addition of the&amp;nbsp; host into the cluster, perform initial configuration of the new host in the&amp;nbsp; cluster and create a host profile from the configuration, and create a rule for&amp;nbsp; the cluster to use the new host profile. &lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Addition of New Hypervisors&lt;/STRONG&gt; - The second script is run to&amp;nbsp; add new hypervisors to the cluster created in step one.&amp;nbsp; This script&amp;nbsp; accomplishes that by creating a new service profile from the template created in&amp;nbsp; script one, associating it, and booting it which will cause the server to boot&amp;nbsp; via AutoDeploy based on the AutoDeploy and cluster rules created from script&amp;nbsp; one, which are triggered from the service profile template name.&amp;nbsp; The script&amp;nbsp; will verify the host is added to the cluster and is fully compliant with the&amp;nbsp; host profile created in step one. &lt;/LI&gt;&lt;LI&gt;&lt;STRONG&gt;Rolling Hypervisor and Server Firmware Upgrade of a Cluster&lt;/STRONG&gt; - The&amp;nbsp; third script will download the newest version of a ESXi hypervisor from VMware,&amp;nbsp; create a new AutoDeploy rule utilizing it for servers that are created from the&amp;nbsp; Service Profile Template created in step one.&amp;nbsp; Once the rules are updated, the&amp;nbsp; script will loop through each hypervisor one by one in the cluster by first&amp;nbsp; setting the hypervisor in maintenance which will trigger VM evacuation, shutting&amp;nbsp; the hypervisor down, change the host firmware pack on the service profile which&amp;nbsp; upgrades the firmware on the server, powering the server on which will cause the&amp;nbsp; server to boot the updated version of ESXi via AutoDeploy and rejoin the&amp;nbsp; cluster.&amp;nbsp; &lt;/LI&gt;&lt;/OL&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;These scripts are provided freely as examples of how you can use both UCS&amp;nbsp; PowerTool and VMware PowerCLI together to achieve end to end automation.&amp;nbsp; Please&amp;nbsp; feel free to modify and utilize them as examples of how you might automate UCS&amp;nbsp; and VMware in your own datacenter.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;Script 1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;# Import Modules&lt;BR /&gt;if ((Get-Module |where {$_.Name -ilike "CiscoUcsPS"}).Name -ine "CiscoUcsPS")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading Module: Cisco UCS PowerTool Module"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Import-Module CiscoUcsPs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike " VMware.DeployAutomation"}).Name -ine "VMware.DeployAutomation")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.DeployAutomation"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.DeployAutomation -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "VMware.ImageBuilder"}).Name -ine "VMware.ImageBuilder")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.ImageBuilder"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.ImageBuilder -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;set-ucspowertoolconfiguration -supportmultipledefaultucs $false&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Global Variables&lt;BR /&gt;$ucs = "172.25.206.5"&lt;BR /&gt;$ucsuser = "ucs-ericwill\admin"&lt;BR /&gt;$ucspass = "Nbv12345!"&lt;BR /&gt;$ucsorg = "org-root"&lt;BR /&gt;$tenantname = "CL2012"&lt;BR /&gt;$macpoolblockfrom = "00:25:B5:ED:01:01"&lt;BR /&gt;$macpoolblockto = "00:25:B5:ED:01:09"&lt;BR /&gt;$wwpnpoolblockfrom = "20:00:00:25:B5:ED:02:01"&lt;BR /&gt;$wwpnpoolblockto = "20:00:00:25:B5:ED:02:12"&lt;BR /&gt;$private = "10"&lt;BR /&gt;$public = "206"&lt;BR /&gt;$vCenter = "172.25.206.186"&lt;BR /&gt;$vcuser = "Administrator"&lt;BR /&gt;$vcpass = "Nbv12345"&lt;BR /&gt;$WarningPreference = "SilentlyContinue"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try {&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging into UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucspasswd = ConvertTo-SecureString $ucspass -AsPlainText -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucscreds = New-Object System.Management.Automation.PSCredential ($ucsuser, $ucspasswd)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogin = Connect-Ucs -Credential $ucscreds $ucs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Deploy Rule for Hypervisor to be deploy based on SP name and another rule for cluster name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging into vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogin = Connect-VIServer $vCenter -User $vcuser -Password $vcpass | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Mac Pool&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating MAC Pool: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $macpool =&amp;nbsp; Get-UcsManagedObject -Dn $ucsorg | Add-UcsMacPool -name $tenantname -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $macpoolblock = $macpool | Add-UcsMacMemberBlock -From $macpoolblockfrom -To $macpoolblockto -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create WWPN Pool&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating WWPN Pool: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $wwpnpool = Get-UcsManagedObject -Dn $ucsorg&amp;nbsp; | Add-UcsWwnPool -Name $tenantname -Purpose "port-wwn-assignment" -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $wwpnpoolblock = $wwpnpool | Add-UcsWwnMemberBlock -From $wwpnpoolblockfrom -To $wwpnpoolblockto -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Server Pool&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Server Pool: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serverpool =&amp;nbsp; Get-UcsManagedObject -Dn $ucsorg | Add-UcsServerPool -Name $tenantname -ModifyPresent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Server Qualification Policy&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Server Qualification Policy: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serverqualpol = Get-UcsManagedObject -Dn $ucsorg | Add-UcsServerPoolQualification -Name $tenantname -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serveradaptorqual = $serverqualpol | Add-UcsAdaptorQualification -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serveradaptorcapqual = $serveradaptorqual | Add-UcsAdaptorCapQualification -Maximum "unspecified" -Model "N20-AC0002" -Type "virtualized-eth-if" -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $servercpuqual = $serverqualpol | Add-UcsCpuQualification -Model "N20-X00002" &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Server Pool Policy (for dynamic server pools based on qualification policy)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Server Pool Policy: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $serverpoolpol = Get-UcsManagedObject -Dn $ucsorg | Add-UcsServerPoolPolicy -Name $tenantname -PoolDn $serverpool.dn -Qualifier $serverqualpol.Name -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Boot Policy&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating Boot Policy: $tenantname"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $bootpol = Get-UcsManagedObject -Dn $ucsorg | Add-UcsBootPolicy -EnforceVnicName "yes" -Name $tenantname -RebootOnUpdate "no" -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $pxe = $bootpol | Add-UcsLsbootLan -ModifyPresent -Order "1" -Prot "pxe"&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $eth0 = $pxe | Add-UcsLsbootLanImagePath -BootIpPolicyName "" -ISCSIVnicName "" -ImgPolicyName "" -ImgSecPolicyName "" -ProvSrvPolicyName "" -Type "primary" -VnicName "eth0"&amp;nbsp; -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create any needed VLANs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating VLAN vlan$private"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vlanprivate = get-ucslancloud | Add-UcsVlan -Name vlan$private -Id $private -ModifyPresent&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating VLAN vlan$public"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vlanpublic = get-ucslancloud | Add-UcsVlan -Name vlan$public -Id $public -ModifyPresent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create any needed VSANs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating VSAN default"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vsan1 = Get-UcsSanCloud | Add-UcsVsan -Name default -Id 1 -ModifyPresent&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Service Profile Template (using MAC, WWPN, Server Pools, VLANs, VSans, Boot Policy, etc. previously created steps) with desired power state to down&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating SP Template: $tenantname in UCS org: $ucsorg"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $startucstransaction = Start-UcsTransaction&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptemplate = Get-UcsManagedObject -Dn $ucsorg |&amp;nbsp; Add-UcsServiceProfile -BootPolicyName $tenantname -HostFwPolicyName "default" -IdentPoolName "default" -LocalDiskPolicyName "default" -MaintPolicyName "default" -Name $tenantname -PowerPolicyName "default" -StatsPolicyName "default" -Type "initial-template" &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptvnic1 = $sptemplate | Add-UcsVnic -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -Mtu 1500 -Name "eth0" -Order "1" -StatsPolicyName "default" -SwitchId "A-B"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vnic1private = $sptvnic1 | Add-UcsVnicInterface -DefaultNet "yes" -Name $vlanprivate.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptvnic2 = $sptemplate | Add-UcsVnic -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -Mtu 1500 -Name "eth1" -Order "2" -StatsPolicyName "default" -SwitchId "B-A"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vnic2public = $sptvnic2 | Add-UcsVnicInterface -DefaultNet "yes" -Name $vlanpublic.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptfc0 = $sptemplate | Add-UcsVhba -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -MaxDataFieldSize 2048 -Name "fc0" -Order "3" -PersBind "disabled" -PersBindClear "no" -StatsPolicyName "default" -SwitchId "A"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $fc0vsan = $sptfc0 | Add-UcsVhbaInterface -Name $vsan1.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptfc1 = $sptemplate | Add-UcsVhba -AdaptorProfileName "VMWare" -AdminVcon "any" -IdentPoolName $tenantname -MaxDataFieldSize 2048 -Name "fc1" -Order "4" -PersBind "disabled" -PersBindClear "no" -StatsPolicyName "default" -SwitchId "B"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $fc1vsan = $sptfc1 | Add-UcsVhbaInterface -Name $vsan1.Name&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptwwnn = $sptemplate | Add-UcsVnicFcNode -IdentPoolName "node-default"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptserverpool = $sptemplate | Add-UcsServerPoolAssignment -Name $tenantname -RestrictMigration "no"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptpowerstate = $sptemplate | Set-UcsServerPower -State "down" -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $completeucstransaction = Complete-UcsTransaction&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Add ESXi Image Profile from VMware.com&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Adding VMware ESXi Library from online depot"&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SoftwareDepot = Add-EsxSoftwareDepot "&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml"&gt;https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml&lt;/A&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $LatestImageProfile = Get-EsxImageProfile | Where { $_.Name -match "no-tools" } | Sort ModifiedTime -desc | select -first 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Auto-deploy rule using the Service Profile Template OEM string from UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $pattern = "oemstring=`$SPT:$($SPTemplate.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating ESXi deploy rule for '$($pattern)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DeployRule = New-DeployRule -Name "DeployESXiImage" -Item $LatestImageProfile -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AddRule = $DeployRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create vCenter Cluster&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating vCenter Cluster: $tenantname if it doesnt already exist"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (-Not (Get-Cluster $tenantname -ErrorAction SilentlyContinue)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Cluster = Get-Datacenter | Select -First 1 | New-Cluster $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } Else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Cluster = Get-Cluster $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Enabling DRS and setting mode to 'FullyAutomated' for Cluster: $($Cluster)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DRSenable = $Cluster | Set-Cluster -DrsEnabled:$true -DrsMode FullyAutomated -drsautomationlevel FullyAutomated -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating vCenter Cluster rule for '$($pattern)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DeployRule = New-DeployRule -Name "AddHostsTo$($tenantname)Cluster" -Item $Cluster -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AddRule = $DeployRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Repairing active ruleset"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RepairRules = Get-VMHost | Test-DeployRuleSetCompliance | Repair-DeployRuleSetCompliance -ErrorAction SilentlyContinue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Initial ESXi Host from SP Template in UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating new Service Profile from SP Template: $($sptemplate.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $createnewsp = $sptemplate | Add-UcsServiceProfileFromTemplate -Count 1 -DestinationOrg (Get-UcsManagedObject -Dn $ucsorg) -Prefix "esxi-host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spmacaddr = $createnewsp | Get-UcsVnic -Name eth0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Monitor UCS SP Associate for completion&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting for UCS SP: $($createnewsp.name) to complete SP association process"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Set SP Desired Power State to UP in newly created SP&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Setting Desired Power State to 'up' of Service Profile: $createnewsp"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $powerspon = $createnewsp | Set-UcsServerPower -State "up" -Force&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Wait for Hypervisor to boot from network w/ Auto-Deploy and connect to vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Waiting for Host with MAC address of $($spmacaddr.Addr) to connect to vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ($VMHost = (get-vmhost -ErrorAction SilentlyContinue | foreach { $_.NetworkInfo.PhysicalNic | where { $_.Mac -ieq $spmacaddr.Addr } } | select -expandproperty vmhost ))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If ($VMHost.State -ne "Maintenance") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Maintenance&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Config changes to host before host profile&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: COnfiguring VM Hypervisor Host: $($VMhost.name) before creating a Host Profile"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Removing defualt VM Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $VMNetwork = Get-VirtualPortGroup -Name "VM Network" -VMHost $VMHost | Remove-VirtualPortGroup -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Creating VMotion Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Vmotion = New-VMHostNetworkAdapter -VMHost $vmhost -PortGroup "VMotion" -VirtualSwitch (Get-VirtualSwitch -VMHost $vmhost -Name vSwitch0) -VMotionEnabled:$true&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Creating New Virtual Switch"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vSwitch1 = New-VirtualSwitch -VMHost $vmhost -Name "vSwitch1" -Nic (Get-VMHostNetworkAdapter -VMHost $vmhost -Name "vmnic1")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Creating New VM Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $VMNetwork = $vSwitch1 | New-VirtualPortGroup "VM Network"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Setting Syslog Server"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SyslogServer = Set-VMHostSysLogServer -SysLogServer $vCenter -SysLogServerPort 514 -VMHost $VMhost&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating Host Profile: $tenantname from VM Hypervisor Host: $($VMhost.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If (-Not (Get-VMHostProfile $tenantname -ErrorAction SilentlyContinue) ) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $HostProfile = New-VMHostProfile -Name $tenantname -Description "Automatically generated host profile for $tenantname" -ReferenceHost $VMHost&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Edit the host profile to add the static password entry&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; function Copy-Property ($From, $To, $PropertyName ="*")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach ($p in Get-Member -In $From -MemberType Property -Name $propertyName)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp; trap {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-Member -In $To -MemberType NoteProperty -Name $p.Name -Value $From.$($p.Name) -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $To.$($P.Name) = $From.$($P.Name)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $hostProfileName = $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $newAdminPswd = "VMw@re123"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec = New-Object VMware.Vim.HostProfileCompleteConfigSpec&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Copy-Property -From $HostProfile.ExtensionData.Config -To $spec&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol = New-Object VMware.Vim.ProfilePolicy&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.Id = "AdminPasswordPolicy"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption = New-Object VMware.Vim.PolicyOption&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Id = "FixedAdminPasswordOption"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter += New-Object VMware.Vim.KeyAnyValue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter[0].Key = "password"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter[0].Value = New-Object VMware.Vim.PasswordField&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $secpol.PolicyOption.Parameter[0].Value.Value = $newAdminPswd&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spec.ApplyProfile.Security.Policy = @($secpol)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ChangeHostProfile = $HostProfile.ExtensionData.UpdateHostProfile($spec)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Hostprofile = Get-VMHostProfile $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Add a new Deployrule to associate the host profile to the Hosts&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Adding rule to use host profile"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $DeployRule = New-DeployRule -Name "$($tenantname)HostProfile" -Item $HostProfile -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $AddRule = $DeployRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host vC: "Repairing active ruleset"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RepairRules = $VMHost | Test-DeployRuleSetCompliance | Repair-DeployRuleSetCompliance -ErrorAction SilentlyContinue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Assigning HostProfile to new host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Assign = $VMHost | Apply-VMHostProfile -profile $HostProfile -Confirm:$false&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Test = $VMHost | Test-VMHostProfileCompliance&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: VM Hypervisor Host: $($VMHost.Name) Ready to use, removing Maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Connected&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging out of UCS: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogout = Disconnect-Ucs &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging out of vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogout = Disconnect-VIServer $vCenter -Confirm:$false&lt;BR /&gt;}&lt;BR /&gt;Catch&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Error occurred in script:"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host ${Error}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;BR /&gt;}&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;Script 2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;# Import Modules&lt;BR /&gt;if ((Get-Module |where {$_.Name -ilike "CiscoUcsPS"}).Name -ine "CiscoUcsPS")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading Module: Cisco UCS PowerTool Module"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Import-Module CiscoUcsPs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike " VMware.DeployAutomation"}).Name -ine "VMware.DeployAutomation")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.DeployAutomation"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.DeployAutomation -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "VMware.ImageBuilder"}).Name -ine "VMware.ImageBuilder")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.ImageBuilder"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.ImageBuilder -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;set-ucspowertoolconfiguration -supportmultipledefaultucs 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Global Variables&lt;BR /&gt;$ucs = "172.25.206.5"&lt;BR /&gt;$ucsuser = "ucs-ericwill\admin"&lt;BR /&gt;$ucspass = "Nbv12345!"&lt;BR /&gt;$vCenter = "172.25.206.186"&lt;BR /&gt;$vcuser = "Administrator"&lt;BR /&gt;$vcpass = "Nbv12345"&lt;BR /&gt;$tenantname = "CL2012"&lt;BR /&gt;$ucsorg = "org-root"&lt;BR /&gt;$WarningPreference = "SilentlyContinue"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Try&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging into UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucspasswd = ConvertTo-SecureString $ucspass -AsPlainText -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucscreds = New-Object System.Management.Automation.PSCredential ($ucsuser, $ucspasswd)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogin = Connect-Ucs -Credential $ucscreds $ucs&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging into vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogin = Connect-VIServer $vCenter -User $vcuser -Password $vcpass | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Create Initial ESXi Host&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Creating new Service Profile from SP Template: ${tenantname}"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sptemplate = get-ucsmanagedobject -dn $ucsorg | Get-UcsServiceProfile -Type "initial-template" -Name $tenantname&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $createnewsp = $sptemplate | Add-UcsServiceProfileFromTemplate -Count 1 -DestinationOrg (Get-UcsManagedObject -Dn $ucsorg) -Prefix "esxi-host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $spmacaddr = $createnewsp | Get-UcsVnic -Name eth0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Monitor UCS SP Associate for completion&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting for UCS SP: $($createnewsp.name) to complete SP association process"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ( (Get-UcsManagedObject -Dn $createnewsp.Dn).AssocState -ieq "associated" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Setting Desired Power State to 'up' of Service Profile: $($createnewsp.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $powerspon = $createnewsp | Set-UcsServerPower -State "up" -Force&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Waiting for VM Hypervisor Host with MAC address of $($spmacaddr.Addr) to connect to vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ($VMHost = (get-vmhost -ErrorAction SilentlyContinue | foreach { $_.NetworkInfo.PhysicalNic | where { $_.Mac -ieq $spmacaddr.Addr } } | select -expandproperty vmhost ))&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Putting VM Hypervisor Host: $($VMhost.Name) into Maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If ($VMHost.State -ne "Maintenance") {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Maintenance&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Checking HostProfile Compliance against new VM Hypervisor Host: $($VMhost.Name) "&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Test = $VMHost | Test-VMHostProfileCompliance&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: VM Hypervisor Host: $($VMhost.Name) Ready to use, removing Maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Connected&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #Disconnect from UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging out of UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogout = Disconnect-Ucs &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #disconnect from vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging out of vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogout = Disconnect-VIServer $vCenter -confirm:$false&lt;BR /&gt;}&lt;BR /&gt;Catch&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Error occurred in script:"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host ${Error}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 12pt;"&gt;&lt;STRONG&gt;Script 3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;# Import Modules&lt;BR /&gt;if ((Get-Module |where {$_.Name -ilike "CiscoUcsPS"}).Name -ine "CiscoUcsPS")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading Module: Cisco UCS PowerTool Module"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Import-Module CiscoUcsPs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "Vmware*Core"}).Name -ine "VMware.VimAutomation.Core")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VimAutomation Core"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike " VMware.DeployAutomation"}).Name -ine "VMware.DeployAutomation")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.DeployAutomation"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.DeployAutomation -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;if ((Get-PSSnapin | where {$_.Name -ilike "VMware.ImageBuilder"}).Name -ine "VMware.ImageBuilder")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Loading PS Snap-in: VMware VMware.ImageBuilder"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Add-PSSnapin VMware.ImageBuilder -ErrorAction SilentlyContinue&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;set-ucspowertoolconfiguration -supportmultipledefaultucs 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;# Global Variables&lt;BR /&gt;$ucs = "172.25.206.5"&lt;BR /&gt;$ucsuser = "ucs-ericwill\admin"&lt;BR /&gt;$ucspass = "Nbv12345!"&lt;BR /&gt;$ucsorg = "org-root"&lt;BR /&gt;$tenantname = "CL2012"&lt;BR /&gt;$vCenter = "172.25.206.186"&lt;BR /&gt;$vcuser = "Administrator"&lt;BR /&gt;$vcpass = "Nbv12345"&lt;BR /&gt;$NewImageProfile = "C:\VMware\ESX5.NextImageProfile.zip"&lt;BR /&gt;$ucshfpname = "2.1-0.323"&lt;BR /&gt;$WarningPreference = "SilentlyContinue"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;try {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Login to UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging into UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucspasswd = ConvertTo-SecureString $ucspass -AsPlainText -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucscreds = New-Object System.Management.Automation.PSCredential ($ucsuser, $ucspasswd)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogin = Connect-Ucs -Credential $ucscreds $ucs&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging into vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogin = Connect-VIServer $vCenter -User $vcuser -Password $vcpass | Out-Null&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Disable the current ESXi Image DeployRule" &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RemDepRule = Get-DeployRule -Name "DeployESXiImage" | Remove-DeployRule&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ESXDepot = Add-EsxSoftwareDepot "&lt;/SPAN&gt;&lt;A class="jive-link-external-small" href="https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml"&gt;https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml&lt;/A&gt;&lt;SPAN&gt;"&lt;/SPAN&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; #$ESXDeppt = Add-EsxSoftwareDepot $NewImageProfile&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $LatestImageProfile = Get-EsxImageProfile | sort ModifiedTime -Descending | Select -First 1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $pattern = "oemstring=`$SPT:$($tenantname)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Creating ESXi deploy rule for '$($pattern)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $NewRule = New-DeployRule -Name "AddHostsTo$($tenantname)ClusterUpdatedImage" -Item $LatestImageProfile -Pattern $pattern&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $SetActive = $NewRule | Add-DeployRule&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Repairing active ruleset"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $RepairRules = Get-VMHost | Test-DeployRuleSetCompliance | Repair-DeployRuleSetCompliance -ErrorAction SilentlyContinue&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Foreach ($VMHost in (Get-Cluster $tenantname | Get-VMHost )) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Adding VM Hypervisor Host: $($VMHost.Name) into maintenance mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Maint = $VMHost | Set-VMHost -State Maintenance&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Waiting for VM Hypervisor Host: $($VMHost.Name) to enter Maintenance Mode"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 10&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((Get-VMHost $VMHost).State -eq "Maintenance")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: VM Hypervisor Host: $($VMHost.Name) now in Maintenance Mode, shutting down Host"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $Shutdown = $VMHost.ExtensionData.ShutdownHost($true)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Correlating VM Hypervisor Host: $($VMHost.Name) to running UCS Service Profile (SP)"&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vmMacAddr = $vmhost.NetworkInfo.PhysicalNic | where { $_.name -ieq "vmnic0" }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $sp2upgrade =&amp;nbsp; Get-UcsServiceProfile | Get-UcsVnic -Name eth0 |&amp;nbsp; where { $_.addr -ieq&amp;nbsp; $vmMacAddr.Mac } | Get-UcsParent &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: VM Hypervisor Host: $($VMhost.Name) is running on UCS SP: $($sp2upgrade.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting to for UCS SP: $($sp2upgrade.name) to gracefully power down"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (get-ucsmanagedobject -dn $sp2upgrade.PnDn).OperPower -eq "off")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((get-ucsmanagedobject -dn $sp2upgrade.PnDn).OperPower -eq "off" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: UCS SP: $($sp2upgrade.name) powered down"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Setting desired power state for UCS SP: $($sp2upgrade.name) to down"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $poweron = $sp2upgrade | Set-UcsServerPower -State "down" -Force&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Changing Host Firmware pack policy for UCS SP: $($sp2upgrade.name) to '$($ucshfpname)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $updatehfp = $sp2upgrade | Set-UcsServiceProfile -HostFwPolicyName (Get-UcsFirmwareComputeHostPack -Name $ucshfpname).Name -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Acknowlodging any User Maintenance Actions for UCS SP: $($sp2upgrade.name)"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (($sp2upgrade | Get-UcsLsmaintAck| measure).Count -ge 1)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ackuserack = $sp2upgrade | get-ucslsmaintack | Set-UcsLsmaintAck -AdminState "trigger-immediate" -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Waiting for UCS SP: $($sp2upgrade.name) to complete firmware update process for Host Firmware pack '$($ucshfpname)'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until ((Get-UcsManagedObject -Dn $sp2upgrade.Dn).AssocState -ieq "associated")&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Host Firmware Pack update process comlete.&amp;nbsp; Setting desired power state for UCS SP: $($sp2upgrade.name) to 'up'"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $poweron = $sp2upgrade | Set-UcsServerPower -State "up" -Force&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write "vC: Waiting for VM Hypervisor Host: $($VMHost.Name) to connect to vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sleep 40&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } until (($VMHost = Get-VMHost $VMHost).ConnectionState -eq "Connected" )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of UCS&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "UCS: Logging out of UCS Domain: $ucs"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $ucslogout = Disconnect-Ucs &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Logout of vCenter&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "vC: Logging out of vCenter: $vCenter"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $vcenterlogout = Disconnect-VIServer $vCenter -Confirm:$false&lt;BR /&gt;}&lt;BR /&gt;Catch &lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host "Error occurred in script:"&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Write-Host ${Error}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exit&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 31 Jul 2012 19:33:57 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/VMware-PowerCLI-Documents/Cisco-UCS-and-VMware-Integration/ta-p/2793901</guid>
      <dc:creator>alanrenouf</dc:creator>
      <dc:date>2012-07-31T19:33:57Z</dc:date>
    </item>
  </channel>
</rss>

