Powercli to create report with VM Tag, Category, Tools version and VM HW Version

Recently one of the community members had a requirement to generate report with the following details in .csv format.

– VM Name
– VMware Tools Version
– VM Hardware Version
– Category Names as columns and Tag names as values.

The following PowerCLI script will help to achieve this.


<# .SYNOPSIS Create .csv report with Virtual Machine Tag, Category, VMware tools version and VM Hardware details. .NOTES Author: Sreejesh Damodaran Site: www.pingforinfo.com .EXAMPLE PS> get-vmtagandcatefory.ps1

#>

# Connect to the vCenter
Connect-VIServer vCenter1 -user user1 -Password "password"

#Create vmInfo object
$vmInfo = @()
$vmInfoTemp = New-Object "PSCustomObject"
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name VMName -Value ""
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name ToolsVersion -Value ""
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name HWVersion -Value ""
$vmCategories = Get-TagCategory
$vmCategories | %{$vmInfoTemp | Add-Member -MemberType NoteProperty -Name $_.Name -Value "" }
$vmInfo += $vmInfoTemp

get-vm | %{
$vmInfoTemp = New-Object "PSCustomObject"
$toolsVersion = Get-VMGuest $_ | select -ExpandProperty ToolsVersion
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name VMName -Value $_.Name
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name ToolsVersion -Value $toolsVersion
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name HWVersion -Value $_.Version
$vmtags = ""
$vmtags = Get-TagAssignment -Entity $_
if($vmtags){
$vmCategories | %{
$tempVMtag = ""
$tempCategroy = $_.Name
$tempVMtag = $vmtags | Where-Object {$_.tag.category.name -match $tempCategroy}
if($tempVMtag)
{
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name $tempCategroy -Value $tempVMtag.tag.name
}else {
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name $tempCategroy -Value ""
}
}
}else{
$vmCategories | %{
$vmInfoTemp | Add-Member -MemberType NoteProperty -Name $_.name -Value ""
}
}
$vmInfo += $vmInfoTemp
}

$vmInfo | select * -Skip 1 | Export-Csv c:\temp\tags.csv -NoTypeInformation -UseCulture

CSV Output:

PowerCLI to deploy VMs in VMware vCloud and connect to network

vCloud PowerCLI

This PowerCLI script will help you to deploy VMs in VMware Private vCloud and connect to network.

 
 
#############################
# Deploy VMs in  vCloud     #
#############################
# Change Log
# 1.0 This script will Create vApp and deploy VMs from the selected TemplateVM.
 
################
# INITIALIZING #
################
 
### DECLARING VARIABLES ###
 
$vCloud_Server = "vCloud Server" # vCloud Server FQDN
$vCloud_Org    =    "Org Name"   # Org Name
$orgNetwork = "orgNwName"        # Target OrgNetworkName for the VM.
$templateVM = "TemplateVMName    # Template VM Name.
$vmCount = 2                     # No of VMs required.
$vmIndex = 4                     # VM starting index.
$vAppNamePrefix =  "RHEL-vApp"   # Prefix string in the vApp Name.
$VMNamePrefix = "RHEL-VM"        # Prefix string in the VM Name.
 
### Connect to the vCloud Server ###
Connect-CIServer $vCloud_Server
 
### Deploying VMs ###
$vmCount = $vmIndex + $vmCount
 
for($i=$vmIndex; $i -le $vmCount; $i++)
{
$vAppName = $vAppNamePrefix+"$i"
$VMName = $VMNamePrefix+"$i"
 
### Creating new vApp ###
New-CIVApp -Name $vAppName -OrgVdc $vCloud_Org
 
### Deploy the VM from template inside the newly created vApp###
New-CIVM -Name "$VMName" -VMTemplate $templateVM -VApp $vAppName -ComputerName "$VMName"
 
### Creating new vApp Network ###
New-CIVAppNetwork -VApp $vAppName -Direct -ParentOrgNetwork $orgNetwork
 
$vAppNetwork = get-civapp $vAppName | Get-CIVAppNetwork $orgNetwork
$cldVMs = get-civapp $vAppName | get-civm
 
### Connecting the vNIC to the network ###
### Please change the allocation model if required###
foreach ($cldvm in $cldVMs) {
    $cldvm | Get-CINetworkAdapter | Set-CINetworkAdapter -vappnetwork $vAppNetwork -IPaddressAllocationMode Pool -Connected $True
}
### Powering on the vApp ###
get-CIVApp -Name $vAppName | Start-CIVApp
}
 
Disconnect-CIServer $vCloud_Server -Force -Confirm:$false