I used to collect datastores inventory using my old script VMware Datastores inventory. It is still very handy when I want to keep it as inventory. This inventory is also good when I want to troubleshoot, but over the period of time I found still I am missing something. Now I have added some more useful information about iSCSI paths. With this information I was able to rectify and implement multiplying best practices correctly.
Alike my old script this also tells datastore configuration information per host, It starts with first esxi host, pull information about all the datastores configured on it, then second host and all the datastores on it, and so on, Below is list this script pulls information about.
VMhost name
DatastoreName - You will find it repetitive if same datastore is mounted on another host also
FreeSpaceGB - Free Space in GB
CapacityGB - Capacity in GB
FileSystemVersion - this tells what is the version of VMFS filesystem.
RuntimeName: Handy when you want to check what device datastore is mapped.
CanonicalName: I use this to match my esxi datastore and storage name. (I can ensure I am working on correct lun/datastore)
MultipathPolicy: Self explanatory.
Vendor: Esxi can detect what can be device (vendor) of datastore.
DatastoreDatacenter: Datacenter this datastore available.
VMsOnDatastore: VMs name on the this datastore but only belongs the esxi host you are fetching information
NumberofPaths: This is really handy and saved my day lots of time.
Paths: IP addresses of Paths (iscsi target storage paths)
State: Where path is active or standby?
Preferred: What storage path is preferred path?
IsWorkingPath: This somewhat similar to preferred path. but tells is the path active currently.
This is screenshot after running the script on the console.
This is screenshot after running the script on the console.
here is the script, on how to use u can check my previous articles,
#####################################
## http://kunaludapi.blogspot.com
## Version: 2
## Date: 16 Dec 2015
## Script tested on below platform
## 1) Powershell v4
## 2) Powercli v5.5
## 3) Vsphere 5.5
####################################
#Add-PSSnapin vmware.vimautomation.core
#Connect-Viserver #vcenterserver
function Get-DatastoreInventory {
$HostDatastoreInfo = Get-VMHost | Get-ScsiLun -LunType disk
$DatastoreInfo = Get-Datastore
foreach ($Hostdatastore in $HostDatastoreInfo) {
$Datastore = $DatastoreInfo | Where-Object {$_.extensiondata.info.vmfs.extent.Diskname -match $Hostdatastore.CanonicalName}
$LunPath = $Hostdatastore | Get-ScsiLunPath
if ($Datastore.ExtensionData.vm) {
$VMsOnDatastore = $(Get-view $Datastore.ExtensionData.vm).name -join ","
} #if
else {$VMsOnDatastore = "No VMs"}
#Work on not assigned Luns error at silentlyContinue
if ($Datastore.Name -eq $null) {
$DatastoreName = "Not mapped"
$FileSystemVersion = "Not mapped"
}
else {
$DatastoreName = $Datastore.Name -join ","
$FileSystemVersion = $Datastore[0].FileSystemVersion
}
$DatastoreFreeSpace = $Datastore.FreeSpaceGB -join ", "
$DatastoreCapacityGB = $Datastore.CapacityGB -join ", "
$DatastoreDatacenter = $Datastore.Datacenter -join ", "
$State = $LunPath.State -join ", "
$Preferred = $LunPath.Preferred -join ", "
$Paths = ($LunPath.ExtensionData.Transport | foreach {($_.Address -split ":")[0]}) -Join ", "
$IsWorkingPath = $LunPath.ExtensionData.IsWorkingPath -Join ", "
$Obj = New-Object PSObject
$Obj | Add-Member -Name VMhost -MemberType NoteProperty -Value $hostdatastore.VMHost
$Obj | Add-Member -Name DatastoreName -MemberType NoteProperty -Value $DatastoreName
$Obj | Add-Member -Name FreeSpaceGB -MemberType NoteProperty -Value $DatastoreFreeSpace
$Obj | Add-Member -Name CapacityGB -MemberType NoteProperty -Value $DatastoreCapacityGB
$Obj | Add-Member -Name FileSystemVersion -MemberType NoteProperty -Value $FileSystemVersion
$Obj | Add-Member -Name RuntimeName -MemberType NoteProperty -Value $hostdatastore.RuntimeName
$Obj | Add-Member -Name CanonicalName -MemberType NoteProperty -Value $hostdatastore.CanonicalName
$Obj | Add-Member -Name MultipathPolicy -MemberType NoteProperty -Value $hostdatastore.MultipathPolicy
$Obj | Add-Member -Name Vendor -MemberType NoteProperty -Value $hostdatastore.Vendor
$Obj | Add-Member -Name DatastoreDatacenter -MemberType NoteProperty -Value $DatastoreDatacenter
$Obj | Add-Member -Name VMsOnDataStore -MemberType NoteProperty -Value $VMsOnDatastore
$Obj | Add-Member -Name NumberOfPaths -MemberType NoteProperty -Value $LunPath.Count
$Obj | Add-Member -Name Paths -MemberType NoteProperty -Value $Paths
$Obj | Add-Member -Name State -MemberType NoteProperty -Value $State
$Obj | Add-Member -Name Preferred -MemberType NoteProperty -Value $Preferred
$Obj | Add-Member -Name IsWorkingPath -MemberType NoteProperty -Value $IsWorkingPath
$Obj
}
}
Get-DatastoreInventory | Export-Csv -NoTypeInformation c:\temp\DatastoreInfoHostwise.csv
I exported report to csv and file looks like this., Csv file can be opened in excel, this CSV can be used as inventory later, My favorite use is capacity management, I kept collecting data for 1 year, and after 1 year i know how datastore is getting filled gradually.
If you find this information is worth sharing please do share the knowledge.
Other useful Blogs and Scripts
Collect disk space detail and send it in email Powercli
Other useful Blogs and Scripts
Collect disk space detail and send it in email Powercli
1 comment:
These information were very easy to understand. They were very useful for my business. Keep up the good work.
Cloud Migration Services
AWS Cloud Migration Services
Azure Cloud Migration Services
VMware Cloud Migration Services
Cloud Migration tool
Database Migration Services
Cloud Migration Services
Post a Comment