PowerShell for Windows Admins

December 5, 2011  1:41 PM

Testing the WMI repository

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

Occasionally the WMI database becomes corrupt. Strangely I have seen this happening more often recently because of the creation of virtual machines from templates – if the template is corrupt so will be the virtual machines.

With Windows Vista and above we can use the winmgmt utility to test the repository. I’ve gotten used to the verb-noun syntax of PowerShell so decided to create a wrapper rather than try and remember the syntax

function test-wmirepository {            
 if ($path) {            
   if (-not(Test-Path $path)){            
    Throw "$path not found"            
   else {            
    $exp = "winmgmt /verifyrepository $path"            
 else {            
  $exp = "winmgmt /verifyrepository"            
 Invoke-Expression -Command $exp            


The utility can test the repository (default) or if the path to a backup file is given then that can be tested instead.

PS> test-wmirepository

WMI repository is consistent

if you don’t get the message about the repository being consistent then you have a problem. We’ll see how to fix that later.

How do you take a backup of the repository? – We’ll get to that later as well

December 5, 2011  12:00 PM

WMI rising

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

Its not the name of a new film but something that is happening.  WMI has always been a very powerful technology but has suffered because it has a reputation of being difficult to use and hard to understand.

Some of that is true but there is a lot more information becoming available. I’ve noticed a lot of sites putting out WMI based PowerShell – Scripting Guy blog and powershell.com being the two that most readily come to mind.

There are some big changes to WMI coming in PowerShell v3 and Windows 8 – now is the right time to start preparing

December 4, 2011  2:17 PM

UK PowerShell Group–December 2011

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

When: Thursday, Dec 15, 2011 7:30 PM (GMT)

Where: Virtual


Discover how to use the WSMAN cmdlets to retreive WMI information and see a demo of the new WMI API’s CIM cmdlets in PowerShell v3 CTP 2


Richard Siddaway has invited you to attend an online meeting using Live Meeting.
Join the meeting.
Audio Information
Computer Audio
To use computer audio, you need speakers and microphone, or a headset.
First Time Users:
To save time before the meeting, check your system to make sure it is ready to use Microsoft Office Live Meeting.
Unable to join the meeting? Follow these steps:

  1. Copy this address and paste it into your web browser:
  2. Copy and paste the required information:
    Meeting ID: PJSH3M
    Entry Code: gG/C-75(m
    Location: https://www.livemeeting.com/cc/usergroups

If you still cannot enter the meeting, contact support

Microsoft Office Live Meeting can be used to record meetings. By participating in this meeting, you agree that your communications may be monitored or recorded at any time during the meeting.

December 4, 2011  2:06 PM

UK PowerShell Group–November Recording

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

The November meeting


was “What’s new in PowerCLI 5?” presented by Jonathan Medd

The recording of Jonathan’s presentation is available from


Jonathan’s slides are available from




December 4, 2011  5:19 AM

PowerShell v3 CTP 2 install

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

Very important – remove CTP1 BEFORE installing CTP 2.  There is no over the top upgrade for the CTP

December 4, 2011  4:59 AM

PowerShell 3 CTP 2

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

I’ve been mainly offline the last couple of weeks with health problems – so apologies for not posting as regularly but it was unavoidable.  Back now to discover the awesome news that CTP 2 of PowerShell 3 is available for download from



it only runs on Win 7 SP1 and Win 2008 R2 SP1.  Both need .NET 4 installed


Other useful info from





much more to come on this over the next few weeks

November 21, 2011  1:09 PM

UK PowerShell Group November–reminder

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

UK PowerShell Group meeting – Jonathan Medd on “Whats new in PowerCLI 5”

details from http://msmvps.com/blogs/richardsiddaway/archive/2011/11/05/powershell-user-group-22-november.aspx

November 19, 2011  5:46 AM

Using calculated fields in subsequent processing

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

A calculated field can be created in Select-Object or Format-Table. When you use Format-Table processing effectively stops, the pipeline terminates and you are dumping the results to screen. The objects produced by Format-Table are not meant for further processing.

If you use Select-Object to create the calculated field the results are an object on the pipeline that can be used for further processing. As a simple example consider

Get-ChildItem -Path c:\windows

This produces the file sizes in bytes. Lets say that we want the sizes in KB

Get-ChildItem -Path c:\windows |
where {!$_.PSIsContainer} |
select Name, @{Name="Size(KB)"; Expression={[math]::round($($_.Length/ 1kb), 2)}}|
Format-Table -AutoSize

OK this is good. I’ve used the math rounding method as it leaves me with a number rather than a string

No we want to sort of the Size(KB) field so the biggest file is shown first

You might think that

Get-ChildItem -Path c:\windows |
where {!$_.PSIsContainer} |
select Name, @{Name="Size(KB)"; Expression={[math]::round($($_.Length/ 1kb), 2)}}|
sort Size(KB) -Descending |
Format-Table -AutoSize

would work. But we get an error

The term ‘KB’ is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:4 char:13
+ sort Size(KB <<<< ) -Descending |
+ CategoryInfo : ObjectNotFound: (KB:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

When we have a property name that isn’t a single simple word we need to put it in quotes like this

Get-ChildItem -Path c:\windows |
where {!$_.PSIsContainer} |
select Name, @{Name="Size(KB)"; Expression={[math]::round($($_.Length/ 1kb), 2)}}|
sort -Property "Size(KB)" -Descending |
Format-Table -AutoSize

To work with properties that we create in calculated fields where their names aren’t simple – wrap the name in quotes

November 15, 2011  2:43 PM

Infrastructure Architecture–from the Middle Ages to Now

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

i often wonder about how we go about performing Infrastructure Architecture in particular and Architecture in general. We spend a lot of time and effort creating frameworks such as Zachman and TOGAF; we create large bodies of data in the form of Enterprise Architecture bodies; we have patterns and reference architecture and the body of white papers and other advertorial content produced by, or on behalf of, vendors.

When it comes down to to actually putting infrastructure on the ground how much of this do we actually use & think about?

Are we like the research scientist looking for  the best answer to solve the problem that we are investigating or are we more like the master mason’s of the Medieval period that built Europe’s great cathedrals, churches and castles?

My feeling is that in many cases we are more like the later.

We have a set of techniques, tricks and tips that we know work because we have used them before. We learn new techniques by working with different people –changing jobs, contractors coming into the organisation  etc.  Often this information ends up being traded. We often serve a long apprenticeship working up through building servers, configuring OS and applications and troubleshooting. When we are deemed worthy – skilled and knowledgeable enough – we are presented with our own projects.

Pretty much parallels the Guild system of the Middle Ages!

Next time you are planning some infrastructure architecture think back on the heritage of how we apply our knowledge. Hopefully one day we will be in the position that it becomes more science than art – when that happens though some of the fun will have gone

November 14, 2011  2:15 PM

Swapping virtual switches

Richard Siddaway Richard Siddaway Profile: Richard Siddaway

Virtualisation is a great technique for creating demo labs. I took my laptop with a bunch of VMs of Windows 8/Server 8 to the PowerShell Deep Dive.  Normally I run my “server” laptop and my development laptop on a switch or connected via a cross over cable. The VM nics are bound to the “server” laptops real ethernet NIC.

This don’t work when you ( a ) forget the cross over cable and ( b ) have the battery collapse on the dev box. I needed to swap the VMs to run off the internal private Hyper-V network.  Swapping the nics between virtual switches is easy but its a pain when you need to do a number of them.

Time for a couple of functions

function set-loopbackswitch {            
Get-VM |            
foreach {            
 $nic = Get-VMNIC -VM $_ |             
 where{$_.SwitchName -eq "Local Area Connection - Virtual Network"}             
 Set-VMNICSwitch -NIC $nic -Virtualswitch "LoopBack"            
function set-realswitch {            
Get-VM |            
foreach {            
 $nic = Get-VMNIC -VM $_ |             
 where{$_.SwitchName -eq "LoopBack"}             
 Set-VMNICSwitch -NIC $nic -Virtualswitch "Local Area Connection - Virtual Network"            

These get the virtual machines and get the nics corresponding to the appropriate switch. It then swaps the the nic to the other switch. Created as 2 functions as its quicker to write.

The functions are based on James O’Neill’s Hyper-V library – if you haven’t got it it is on codeplex

Forgot Password

No problem! Submit your e-mail address below. We'll send you an e-mail containing your password.

Your password has been sent to: