In a previous video we showed you how to get started with PowerCLI 5.0.1 and specifically the vCloud Director (vCD) cmdlets, we show you how to gain a list of cmdlets which were added to PowerCLI 5.0.1 for managing vCD and how to use some of these cmdlets to gather data from your vCD infrastructure.
I received some comments from people saying this was great information and they could use this to write some scripts which would allow them to pull data from the vCD infrastructure, but how could they interact with vCD ? At the moment the web interface gives them access to not only view the cloud data but also interact with it, stop/start vApp’s and VM’s, create new Organization’s, ProvidervDC’s, OrgvDC’s and much much more.
You may not know but this functionality is actually available in the PowerCLI 5.0.1 cmdlets. When listing the cmdlets you will see that most start with “Get-“ which means they are mainly designed to retrieve the data. People who have looked a little further or perhaps have slightly more PowerCLI knowledge will have noticed the cmdlet Get-CIView.
The Get-CIView cmdlet allows us to reach into the full SDK for vCloud Director and pull back the full .Net object, this basically means that we get access to perform anything in vCloud Director that you would normally do via the web interface.
Another way to retrieve the .Net View representation of a PowerCLI object is to refer to its .ExtensionData property.
The .ExtensionData property is an “on-demand” property which gives us the same results as calling the Get-CIView cmdlet.
To see a simple example of how we might use this .Extensiondata property to interact with vCD and Start/Stop a vApp take a look at the below video example:
From this simple example we can then create PowerShell advanced functions to make this easier for us in the future as can be seen below, this will give us 2 functions which will allow us to easily stop and start vApps in the cloud using PowerCLI.
function Stop-CIVApp {
<#
.SYNOPSIS
Powers Off a vApp.
.DESCRIPTION
Powers Off a vApp and all VMs within it.
.PARAMETER CIVApp
The Name or object or collection of objects of vApps which to shutdown.
.PARAMETER Force
Attempt to power off the VMs. Failures in undeploying the VM or associated networks are ignored.
All references to the vApp and its VMs are removed from the database
.EXAMPLE
PS C:\> Get-CIVApp | Stop-CIVApp
.EXAMPLE
PS C:\> Get-CIVApp “MyvApp” | Stop-CIVApp
.EXAMPLE
PS C:\> Stop-CIVApp -CIVApp “MyvApp”
.EXAMPLE
PS C:\> Stop-CIVApp -CIVApp “MyvAPP” -Force
#>
[CmdletBinding(
SupportsShouldProcess=$true,
ConfirmImpact=”High”
)]
param(
[parameter(Mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)]
$CIVApp,
[Switch]$Force
)
Process {
if ($pscmdlet.ShouldProcess($CIVAPP)) {
If ($Force){
$CIVApp | Foreach {
$_.ExtensionData.Undeploy(“force”)
}
} Else {
$CIVApp | Foreach {
$_.ExtensionData.Undeploy(“powerOff”)
}
}
}
}
}
function Start-CIVApp {
<#
.SYNOPSIS
Powers On a vApp.
.DESCRIPTION
Powers On a vApp and all VMs within it.
.PARAMETER CIVApp
The Name or object or collection of objects of vApps which to start.
.EXAMPLE
PS C:\> Get-CIVApp | Start-CIVApp
.EXAMPLE
PS C:\> Get-CIVApp “MyvApp” | Start-CIVApp
.EXAMPLE
PS C:\> Start-CIVApp -CIVApp
#>
[cmdletbinding()]
param(
[parameter(ValueFromPipeline=$true)]
$CIVApp
)
Process {
$CIVApp | Foreach {
$_.ExtensionData.PowerOn()
}
}
}