Category Archives: PowerShell

Customisation: Lesson 1 – Time Source

I thought I would help people learn the VI Toolkit whilst also creating a nice script which you can customise to your own environment, hopefully this is a script that will save you time in the future.

The script we are going to build together in step by step instructions is a Customisation script.

You have built your host and now have to go through the configuration and tweaks of all the after-build areas, you have to make sure that these are setup the same on each host so that things like VMotion and DRS work so what better than a script to help us limit the amount of mistakes when typing names or missing steps.

Continue reading

Free PowerShell Editor

imageEver go to a server and need to edit a PowerShell script which you have scheduled to run on a daily basis but only have notepad installed to edit it, yes it can be done but its not nice, is it ?

 

Sapien have released a FREE thumb drive app which is stored as a single EXE, this editor allows you to edit your scripts in the code highlighted environment we all love, step away from notepad and into the future.

This app also has code highlighting features for the following scripting languages:

  • BScript
  • JScript
  • HTML
  • PowerShell

Download the app here and suffer no more.

VI Toolkit Presentation

imageThis week I gave a presentation to the UK PowerShell User Group at the Microsoft HQ in the UK, this was also available over live meeting and seemed to go quite well, despite the issues with the projectors, wifi, sound and rooms we were in.

For those people who couldn’t make the live meeting or the UK PowerShell User Group I have uploaded my slide deck for you to have a look through.

Download the slides here in PDF format… http://virtu-al.net/Downloads/VMwareVIToolkitPSUKUG27-03-09.pdf

My Presentation followed a nice insight into the 2008 Active Directory cmdlets that are being released by Microsoft, Jonathan Medd gave a great comparison of this and the Quest tools and also showed us a nice demo of the new Recycle bin feature in 2008 Active Directory.

 

These were both recorded and presented over Live Meeting, I will include a link so that you can watch them as soon as it is available.

Using the VI APIs from PowerShell

The trigger for this article was a question I got from Alan. He wanted to know how he could get, from within a PowerShell script, a report of all the tasks that were run against a specific virtual machine during the last seven days.

The VI Toolkit (VITK) has a Get-Task cmdlet, but that cmdlet is in the current release of the VITK a bit restricted in it’s use. See the community thread “Determine the “lineage” of a VM | From which Template was a given VM authored?” for a further discussion on this.

Since it became clear that the VITK wouldn’t give me what I wanted, the only possible alternative was to go to the VI APIs.

Every time I need to use the VI APIs I start by looking in the API Reference Documentation.

This document, which is in fact a web-based search tool, has a rather straight-forward layout. In the left pane you find the main menu and in the right pane you will find the details on everything you select in the left pane.

API-main

Where you start your search in the API Reference depends a bit on what you have to start with. Continue reading

VI Toolkit One-Liner: VM Guest Disk Sizes

A Simple One-liner today but it shows you how to add information along the pipe line to enable new properties which can be formed using other cmdlets or simple math statements on existing properties:

This one-liner will give you the VM disk or partition sizes for each of your VMs:

ForEach ($VM in Get-VM ){($VM.Extensiondata.Guest.Disk | Select @{N="Name";E={$VM.Name}},DiskPath, @{N="Capacity(MB)";E={[math]::Round($_.Capacity/ 1MB)}}, @{N="Free Space(MB)";E={[math]::Round($_.FreeSpace / 1MB)}}, @{N="Free Space %";E={[math]::Round(((100* ($_.FreeSpace))/ ($_.Capacity)),0)}})}

Continue reading

VI Toolkit One Liner: Correct HAL ?

I have just re-worked an old script which I created to check each VM to ensure they are using the correct HAL based on the amount of processors they have installed, as it turns out I managed to get this into a nice one-liner:

Get-VM | Where {$_.PowerState -eq "PoweredOn"} | Sort Name | Select Name, NumCPU, @{N="OS HAL";E={(Get-WmiObject -ComputerName $_.Name -Query "SELECT * FROM Win32_PnPEntity where ClassGuid = '{4D36E966-E325-11CE-BFC1-08002BE10318}'" | Select Name).Name}}

Or to break it down so it fits on my blog…

Get-VM | Where {$_.PowerState -eq "PoweredOn"} |
Sort Name |
Select Name, NumCPU, @{N="OS HAL";E={(Get-WmiObject -ComputerName $_.Name -Query 
"SELECT * FROM Win32_PnPEntity where ClassGuid = '{4D36E966-E325-11CE-BFC1-08002BE10318}'" |
Select Name).Name}}

Output:

hal

VI Toolkit One Liner: Who’s busy ?

Most of my work with the VI Toolkit has been scripts so far, well the work that I  have added to this blog anyway, I use one-liner’s on a daily basis to make my job easier.

It was suggested to me that I should add some one-liners to my blog as I’m going to be busy over the next couple of weeks so I had a quick tinker.

This one-liner is quite a simple but long one-liner just to get started:

View the top 10 VM’s which have been using memory for the last 48 Hours:

Get-Stat -Entity (Get-VM | Where {$_.PowerState -eq "PoweredOn"}) -Start ((Get-Date).AddHours(-48)) -Finish (Get-Date) -Stat mem.usage.average | Sort-Object Value -Descending | Select-Object Entity, Value -First 10

Continue reading

PowerGUI VMware PowerPack 2.1.5 released

image

Scott and Kirk have done it again, they are really kicking out the updates to this powerpack recently and this one adds some great features:

1. As you can see by the image, they have greatly improved the icons making a great visual experience.

2. You may notice a new Action on the menu… Generate vDiagram

image 

Yes that’s right, Kirk has taken my Visio script, torn it up, threw it out and come up with something completely amazing.

Continue reading

VI Toolkit Lab @ VMWorld

Whilst at VMWorld I managed to sit in on the very popular VI toolkit Lab, this was one of around 10 labs which were running during the day and people could go up and run through some testing on a pre-built lab environment all for themselves.

This gives people a great opportunity to play and mess with things that they may not get a chance to do in there normal line of work.

Continue reading

Setting MMU for your VMs

I was asked by my friend Duncan if it was easy enough to set the Memory Management Unit (MMU) for each of his VM’s.  Read his post here for more information on what he was working on.

He was about to set this by hand for 50+ VM’s which would take a while, so with the power of the VI Toolkit he can now take it easy whilst PowerShell does the hard work:

For one VM:
Get-VM -Name "MyVM" | Get-View | foreach {
    $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
    $spec.flags = New-Object VMware.Vim.VirtualMachineFlagInfo
    $spec.flags.VirtualMMuUsage = "on"
    $taskMoRef = $_.ReconfigVM_Task($spec)
}
For all VMs you could use:
Get-VM | Get-View | foreach {
    $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
    $spec.flags = New-Object VMware.Vim.VirtualMachineFlagInfo
    $spec.flags.VirtualMMuUsage = "on"
    $taskMoRef = $_.ReconfigVM_Task($spec)
}
Or for each of the VMs in a cluster:
Get-Cluster "MyCluster" | Get-VM | Get-View | foreach {
    $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
    $spec.flags = New-Object VMware.Vim.VirtualMachineFlagInfo
    $spec.flags.VirtualMMuUsage = "on"
    $taskMoRef = $_.ReconfigVM_Task($spec)
}

To list each of the VM’s and their current MMU setting use this one-liner:

Get-VM | Get-View | ForEach {Write "$($_.Name) - $($_.Config.Flags.VirtualMmuUsage)"}