PowerCLI: Virtual Machine Disk (VMDK) info v2: Analyze data with Excel

image

In my previous post about this subject I created a script to view the information on the PowerCLI console. With the v2 script you are able to export the data to a CSV file.

$myCol = @()
$vms = get-view -ViewType VirtualMachine  | Where-Object `
{-not $_.config.template}
foreach($vm in $vms){
    foreach($dev in $vm.config.hardware.Device){
    $MYInfo = "" | Select-Object VMName, DeviceLabel, `
    FileName, DiskMode, ThinProvisioned

       $MYInfo.VMName = $vm.Name

           if($dev.GetType().Name -eq "VirtualDisk"){
                   $MYInfo.DeviceLabel = $dev.DeviceInfo.Label
                $MYInfo.FileName = $dev.Backing.FileName
                $MYInfo.DiskMode = $dev.Backing.DiskMode
                if($dev.Backing.ThinProvisioned){
                $MYInfo.ThinProvisioned = "True"}
                else{$MYInfo.ThinProvisioned = "False"}

                $myCol += $MYInfo
               }
       }
}
$myCol | Export-CSV -NoTypeInformation "D:\scripts\vmdkinfo.csv"

When the script is finished, you can import the CSV file into Excel.  After the import, we can analyze the data with just a simple filter. With a few clicks,  you’re able to view al the VM’s without Thin Provisioned disks.

image

Now we have a list with all the VM’s with Thin Provisioned disks:

image 

So with a small PowerCLI script and the help of Microsoft Excel, you’re able to generate a report with just the information you need. The best part is that it will only cost you couple of minutes of your time :-) .

Advertisement

15 Responses to PowerCLI: Virtual Machine Disk (VMDK) info v2: Analyze data with Excel

  1. A quick trick to get this straight into Excel:

    ; ii filename.csv

    Or:

    | export-csv -notype -file file.csv; ii file.csv

  2. Rash says:

    Great code,
    I have few more additions to do, but don’t know how
    How to get Filesize for that filename
    and which ESX host that VM belongs

    VM-Host gives me that, but how do I extend this CSV files so I have everything in online.

    VMNAME, Device Label, FileName, FileSize, ESXHost, DiskMode, ThinProvisioned

    • Ingimar says:

      @Rash:

      Have you found this out? I was exactly looking for info on adding host and VMDK size to the list and am not yet confident enough in scripting to add it myself.

      PS: Found the script in Virtu-Al.net VESI pack.

  3. Ingimar says:

    Have found out how to add the filesize to this list or at least the version of this script that comes with the Virtu-Al.net VESI pack. Shouldn’t be much difference.

    One line needs to be changes, and one line is added.

    Add “CapacityInKB” into the Select-Object list:

    $MYInfo = “” | Select-Object VMName, DeviceLabel, `
    FileName, CapacityInKB, DiskMode, ThinProvisioned

    And add this line after the “$MYInfo.FileName = $dev.Backing.FileName” line:

    $MYInfo.CapacityInKB = $dev.CapacityInKB

    Thanks go to the VESI Script Editor, it provides a great detail into the objects you can work with in Powershell. Great debugging tool!

    Hope this helps!

  4. Zak says:

    Really fast and great script.
    How can this work only for a list of servers in a text file?

    Thanks in advance.

  5. afokkema says:

    Change the line $vms = Get-View Viewtype……. to

    $vms = get-content D:\vms.txt
    foreach($i in $vms){
    $vm = Get-VM $i | Get-View

    vms.txt will look like this:

    vm1
    vm2
    vm3
    etc.

    Good luck

  6. Zak says:

    That helped but didn’t work.
    I modified it to this and its ok now.
    $vms = get-content “h:\scripts\Vmlist.txt”|foreach-object {Get-VM $_ | Get-View}

    A little slow, I’m thinking it would be quicker to do a Get-View once as you do before, and then operate the rest of the script if the name exists in the list.

    Thanks lot for help nevertheless.

    • afokkema says:

      The solution above was a quick and dirty solution. This solution is a lot faster:

      $vms = Get-Content “X:\vms.txt”
      foreach($name in $vms){
      $vm = Get-View -ViewType VirtualMachine -Filter @{“Name” = $name}

      Good luck!

  7. Zak says:

    The output has just one vm, when I have 5. Its last one in foreach list.

    Had another tinker around and ended up with this, it takes only a couple seconds to complete now. :-)

    $vmlist = Get-Content “h:\scripts\Vmlist2010.txt”
    $vms=$vmlist|foreach { Get-View -ViewType VirtualMachine -Filter @{“name” = “$_”}}

    Now i want to add more objects, like mem/cpu etc. Will check the Vesi Editor. Is that the best place to find them?

    Thanks again, you really got me on the right track!

  8. Jeff says:

    How hard would it be to add a column to tell if the disk is an RDM or VMDK

  9. Cnidus says:

    Thanks for the script, with some pretty heavy wrapping and customization for my purposes, I’ve got it exporting object-oriented, per-VM XML instead of a flat CSV.

    I can send you my version if you like.

    Jeff: It shouldnt be too hard to add information on RDM info, I’ll see if I can work that out tomorrow.

    -Doug (Cnidus)

  10. Pingback: Dump Virtual Machine Info as XML (powershell)

  11. Cnidus says:

    Hi Arne,

    I decided to get off my butt and start my own blog. The first post is my modified version of your script.

    http://blog.cnidus.net/2010/10/25/dump-virtual-machine-info-as-xml-powershell/

    If you have any feedback on either the script or my blog, I’d appreciate it.

    Thanks,
    Doug

  12. Jay says:

    This is a nice utility. Ran across 3 vCenters and about 24 ESX/ESXi Hosts in two physical datacenters in just a few seconds. Thanks.

  13. Ryan P says:

    Is there a way I can also get the in-use size too?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

Join 902 other followers