Hi anyone
Can add some details on the script to get Provisioned & Free Space?
Credit to Sreejesh Damodaran
PowerCLI script to list VMFS,RDM and Free LUNs in a cluster | Ping4info
#
# .SYNOPSIS
# PowerCLI Script for collecting the details of storage connected to a cluster.
# .DESCRIPTION
# This PowerCLI scritpt will help to identify how the disks/LUNs connected to the host are presented(RDM,VMFS or None).
# .VERSION
# v1.1
# .NOTES
# File Name : Get-DiskDetails.ps1
# Author : Sreejesh Damodaran
# Requires : PowerCLI 5.1 Release 2 or above, vCenter 5.1 or above, Powershell 3.0 or above
# .LINK
# This script posted in: http://www.pingforinfo.com
# .EXAMPLE
# Get-DiskDetails.ps1
#
#####################################
# VMware VirtualCenter server name, #
#Cluster Name and output file(csv) #
#####################################
Connect-VIServer "vCenter Name or IP"
$outputFile = "Output csv file, eg : c:\DiskRep.csv"
$cltName = "Cluster Name "
new-variable -Name clusterName -Scope global -Value $cltName -Force
new-variable -Name LUNDetails -Scope global -Value @() -Force
new-variable -Name LUNDetTemp -Scope global -Value @() -Force
new-variable -Name LUNDetFinal -Scope global -Value @() -Force
####################################################
#Function to creeate objects and insert into array.#
####################################################
function insert-obj(){
[CmdletBinding()]
param(
[PSObject]$esxHost,
[PSObject]$vmName,
[PSObject]$dsName,
[PSObject]$cnName,
[PSObject]$rnName,
[PSObject]$Type,
[PSObject]$CapacityGB,
[PSObject]$ArrayName
)
$object = New-Object -TypeName PSObject
$object | Add-Member -Name 'Cluster' -MemberType Noteproperty -Value $global:clusterName
$object | Add-Member -Name 'Host' -MemberType Noteproperty -Value $esxHost
$object | Add-Member -Name 'DatastoreName' -MemberType Noteproperty -Value $dsName
$object | Add-Member -Name 'VMName' -MemberType Noteproperty -Value $vmName
$object | Add-Member -Name 'CanonicalNames' -MemberType Noteproperty -Value $cnName
$object | Add-Member -Name 'LUN' -MemberType Noteproperty -Value $rnName.Substring($rnName.LastIndexof(“L”)+1)
$object | Add-Member -Name 'Type' -MemberType Noteproperty -Value $Type
$object | Add-Member -Name 'CapacityGB' -MemberType Noteproperty -Value $CapacityGB
if ($ArrayName -eq "LUNDetails"){
$global:LUNDetails += $object
}
elseif($ArrayName -eq "LUNDetTemp"){
$global:LUNDetTemp += $object
}
}
######################################
#Collect the hostnames in the cluster#
######################################
$Hosts = Get-Cluster $clusterName | Get-VMHost | select -ExpandProperty Name
#############################################
#Collecting datastore, RDM and LUN Details.#
#############################################
foreach($vmHost in $Hosts) {
Write-Host "Collecting Datastore details from host $vmHost ...."
get-vmhost -Name $vmHost | Get-Datastore | % {
$naaid = $_.ExtensionData.Info.Vmfs.Extent | select -ExpandProperty DiskName
$RuntimeName = Get-ScsiLun -vmhost $vmHost -CanonicalName $naaid | Select -ExpandProperty RuntimeName
insert-obj -esxHost $vmHost -dsName $_.Name -cnName $naaid -rnName $RuntimeName -Type $_.Type -CapacityGB $_.CapacityGB -ArrayName LUNDetails
}
Write-Host "Collecting RDM Disk details from host $vmHost ...."
get-vmhost -Name $vmHost | Get-VM | Get-HardDisk -DiskType "RawPhysical","RawVirtual" | % {
$naaid = $_.SCSICanonicalName
$RuntimeName = Get-ScsiLun -vmhost $vmHost -CanonicalName $naaid | Select -ExpandProperty RuntimeName
insert-obj -esxHost $vmHost -vmName $_.Parent -cnName $naaid -rnName $RuntimeName -Type RDM -CapacityGB $_.CapacityGB -ArrayName LUNDetails
}
Write-Host "Collecting Free SCSI LUN(Non-RDM/VMFS) details from host $vmHost ...."
(get-view (get-vmhost -name $vmHost | Get-View ).ConfigManager.DatastoreSystem).QueryAvailableDisksForVmfs($null) | %{
$naaid = $_.CanonicalName
$DiskTemp = Get-ScsiLun -vmhost $vmHost -CanonicalName $naaid
insert-obj -esxHost $vmHost -cnName $naaid -rnName $DiskTemp.RuntimeName -Type FREE -CapacityGB $DiskTemp.CapacityGB -ArrayName LUNDetails
}
Write-Host "Collecting details of Unallocated LUNs from host $vmHost ...."
Get-ScsiLun -VmHost $vmHost | %{
$naaid = $_.CanonicalName
$naaidTemp = $LUNDetails | select -ExpandProperty CanonicalNames
If ($naaidTemp -notcontains $naaid){
insert-obj -esxHost $vmHost -cnName $naaid -rnName $_.RuntimeName -Type UNKNOWN -CapacityGB $_.CapacityGB -ArrayName LUNDetTemp
}
}
$global:LUNDetails += $global:LUNDetTemp
$global:LUNDetFinal += $global:LUNDetails
$global:LUNDetails.Clear()
$global:LUNDetTemp.Clear()
}
############################
#Export output to CSV file #
############################
$global:LUNDetFinal | Sort-Object Host,{[int]$_.LUN} |
select Cluster,Host,CanonicalNames,Type,LUN,DatastoreName,VMName,CapacityGB | Export-Csv -NoTypeInformation $outputFile
$global:LUNDetFinal.Clear()
Hi,
I didn't read all your script sorry .
I'll just copy/paste a bit of one of my functions that you can adapt to your needs.
$DS = get-datastore "whatever"
$CapacityGB = [Math]::Round(($DS.extensiondata.summary.capacity / 1GB),2)
$FreeGB = [Math]::Round(($DS.extensiondata.summary.FreeSpace / 1GB),2)
$UsedGB = [Math]::Round((($DS.extensiondata.summary.capacity / 1GB) - ($DS.extensiondata.summary.FreeSpace / 1GB)),2)
$ProvisionedGB = [Math]::Round((($DS.extensiondata.summary.capacity / 1GB) - ($DS.extensiondata.summary.FreeSpace / 1GB) + ($DS.extensiondata.summary.Uncommitted / 1GB)),2)
$ProvisionedPercent = $ProvisionedGB / $CapacityGB
This script takes lot of time to complete and if I want to run it on the whole vcenter not on a cluster. Can someone please help.