Another way to gather VMware disk info with Powershell

I’ve created another way to gather and display VMware Virtual Disk information with the Powershell VI Toolkit.

The attached script generates a csv-file with all Virtual Machines’ Disks, in which Datastore they are stored, the LUN IDs of the extents that make up this Datastore (in HEX) and the Vendor of the SAN those LUNs are on (just in case you have multiple). Simpy a great way to determine which LUNs are used by which virtual server(s) in a complex environment.

diskinfo

By the way: the script is filled with comments to allow you to learn how it works.

create-vmdiskoverview (Rename to .ps1)

Enjoy!

Hugo

  • Share/Bookmark

No related posts.

  • NiTRo

    January 8th, 2009

    Hi Hugo,

    I’d like to a row for hostname but i’m not very smart in powershell, may you help me ?

    Anyway, your script is very cool :)

    Thx

  • admin

    January 8th, 2009

    @NiTRo
    NiTRo,
    Adjust the following line:
    Select VM, Description, Disk, Datastore, hexLUN0, hexLUN1, hexLUN2, hexLUN3, SAN # Create output object

    Replace it with this:
    Select VMHost, VM, Description, Disk, Datastore, hexLUN0, hexLUN1, hexLUN2, hexLUN3, SAN # Create output object

    And add the following line below it:
    $myObj.VMHost = $VMHost.Name # ESX Server Name

    Thanks,
    Hugo

  • NiTRo

    January 9th, 2009

    Thanks Hugo, it works like a charm !

  • NiTRo

    January 9th, 2009

    I also wish i can get a field value from the VC, do you know if it is possible ?

    Thanks

  • eric

    January 13th, 2009

    great information! thanks!

    http://www.vmwarescripting.com/

  • David

    January 26th, 2009

    Is there a way to modify this so that it would pull back sizes of the disks as well?

  • Hugo

    January 27th, 2009

    @David
    @David
    Easy! Just modify this line:
    Select VM, Description, Disk, Datastore, hexLUN0, hexLUN1, hexLUN2, hexLUN3, SAN # Create output object
    Change it into this:
    Select VM, Description, Disk, DiskSizeGB, Datastore, hexLUN0, hexLUN1, hexLUN2, hexLUN3, SAN # Create output object
    And add this line below it:
    $myObj.DiskSizeGB = [math]::Round(($DISK.CapacityKB * 1KB / 1GB),0) #Disk Size

    Hugo

  • David

    February 3rd, 2009

    @Hugo
    Thank you Hugo. This was a big help.

  • David

    February 9th, 2009

    Is there any way for RDMs to show up as RDMs? I noticed they show up as virtual disks on the datastore in which the mapping file exists. Wondering if there’s a way to dive deeper, and identify these as RDMs and indicate LUN ID. Also, any good resources for VI-Toolkit education? Been googling, but resources are limited. Thanks.

  • Eric

    March 25th, 2009

    Hugo,

    This script is great. It gives me almost everything I need… there is one thing I would like. I would like to add a column for the name of the VMDK as well. Being a newbie at scripting… is that possible?

  • admin

    March 26th, 2009

    @Eric
    Modify this line:
    Select VM, Description, Disk, Datastore, hexLUN0, hexLUN1, hexLUN2, hexLUN3, SAN # Create output object
    into:
    Select VM, Description, Disk, Datastore, VMDK, hexLUN0, hexLUN1, hexLUN2, hexLUN3, SAN # Create output object

    Add the following line below that line:
    $myObj.VMDK = $DISK.Filename.Split(“/”)[1]

  • invisible

    June 4th, 2009

    Hugo,

    Great script, thank you. But when I run it scripts runs for number of minutes and than I got

    ————————–
    You cannot call a method on a null-valued expression.
    At :line:29 char:41
    + $myObj.Datastore = $DISK.Filename.Split <<<< (“[]“)[1] # Datastore Name

    ————————–

    and no csv file is created.

  • admin

    June 4th, 2009

    @invisible I’m guessing you have $ErrorActionPreference set to “Stop”. Try setting: $ErrorActionPreference = “Continue”. You will still see a lot of errors, but the script will finish.
    The reason for this script to generate errors, is that is assumes three disks are present in each and eveny vm. I had to pick a number and keep it the same for all the vm’s, because of difficulties displaying irregular information. Anyway, let me know if this helps.
    Hugo

  • Harm

    June 15th, 2009

    This script is very useful. I how do you change the number of present disks that the script scans for from 3 to 4? We have various VMs with more than 3 virtual disks. Thanks!

  • admin

    June 16th, 2009

    @Harm
    The script does loop through ALL your disks. Only problem if you have more than 4 extents in a datastore. Then you should add hexLUN… to the following line:

    Modify line:
    Select VM, Description, Disk, Datastore, hexLUN0, hexLUN1, hexLUN2, hexLUN3, SAN # Create output object

    Into: Select VM, Description, Disk, Datastore, hexLUN0, hexLUN1, hexLUN2, hexLUN3, hexLUN4, SAN # Create output object

    Etc.

    Hugo

  • Michael

    June 22nd, 2009

    Hi Hugo,

    firstly, a great script! Can I also add a column for the datacenter? I am also new with powershell and scripting in general and I didn’t find anything about $myObj.* and the “Select” part in your script.
    Thanks.

  • admin

    June 22nd, 2009

    @Michael
    I use “$myObj = “” | Select Name, Etc” to create custom objects to hold the output of my scripts. Read more here: http://www.peetersonline.nl/?s=advice
    You could add an outer loop doing ForEach ($Datacenter in Get-datacenter){…} and add a property named $myObj.Datacenter with the value $Datacenter.Name.
    Read some of the scripts on my site to get some feeling on how this works.
    Hugo

  • Ejire

    July 14th, 2009

    Hi Hugo,
    I also wish I can get a field value from the Disk path or disk drive letter, do you know if it is possible ?

    Thanks

  • Mike

    August 10th, 2009

    Going off of the Question from Hugo on 1/27, is there a way to give the “used” space of the guest’s VMDK? I’m trying to monitor the growth on a differential disk of link-cloned VDI guests.

  • Lars

    January 26th, 2010

    Hi Hugo,
    Your script helped me a lot.
    Thanks for sharing.

  • admin

    January 26th, 2010

    That’s great, thanks for commenting!
    Hugo

  • Frank

    August 25th, 2010

    Hi Hugo,

    Could you give me an example of an outer loop to get the cluster that each VM is connected to. For some reason my loop doesn’t end.

    Thanks!

Leave a Comment

* are Required fields