Subscribe
Search
Thursday
Mar152012

XML + PowerShell = Really neat config files

There are often times where you need to store data within a file to make your script work, examples include:

Complex configuration information
Historical information
Complex data storage
There are a number of ways you can address this when writing a normal .Net application, but the majority of these can easily be used within Powershell. These options include simple text files, SQL databases and what I want to talk about today, XML files!

Using XML files is very simple in PowerShell, most of the hard work will be performed by the Powershell engine and the .Net libraries it is built upon.

Example XML File

Reading data within an XML file
To read an XML file into a variable, simply

Now if we wanted to access all of the XML elements under the "Folders" element, all we would have to do is:

But if there are no "folder" elements below "folders", you will have a nice error message when you go to run that foreach loop! You can resolve this by testing if there are elements under the "folders" element by:

if the above returns false, then there are no elements sitting under "folders". Note that this command is CASE SENSITIVE!!! folders and Folders are not the same. BEWARE!

This is enough for today, and should allow you to understand some of the scripts I will be posting up soon.

 

 

Wednesday
Mar142012

Server Up Time Monitoring

These days, servers, even ones running Windows, can be up for a very long time. I recently had a request where they wanted an alert generated if a server had be up for longer than a time period.

I modify the script that can be found here, http://pshscripts.blogspot.com.au/2009/01/get-uptimeps1.html, to fit my standard template and just my preferred style.

Tuesday
Mar132012

Volume Health Checks in PowerShell

I was asked to write a script to monitor the health of the volumes for our web application farm. The original request was to monitor how much disk space was free on each volume, however I wanted the ability to monitor the integrity and fragmentation of the volume as well.

The first issue was we wanted to exclude the 100mb partition that Windows creates for the boot up process. This doesn't generally change and we didn't want it causing too much noise.

Checking the fragmentation status of a volume is available through WMI, through WMI you can easily ask Windows if that particular volume isfragment and get a True or False response.

File system integrity is a little different. NTFS has a dirty flag, which is used by check disk during boot to determine if it should perform a check on that volume. One annoying issue is there are two methods to check this flag, WMI or the CHKNTFS.EXE, WMI is considered to be more reliable, but there are many discussions on the Internet in regards to how reliable it is. CHKNTFS cannot run on a drive without a drive letter, so you need to be careful when scripting with it. In the end, my script will perform both tests where possible.

Using my usual template, the code below is for the body.

 If you want to skip the 100mb system drives, set $thresholdexcludesystem to $true

Monday
Mar122012

Exporting the registry

When it comes to manipulating the registry, PowerShell gives you a truckload of options, personally, if its something as simple as backing up and restoring entries, nothing beats the proven old fashioned methods.

I needed to backup some registry keys recently, this will be running in my usual template as a scheduled task. I wanted to know if there was every an issue when trying the export.

My code looked like:

$key is the registry path you want to export, and $destfile is the resulting .reg file you want to export to.

Sunday
Mar112012

Physical Disks, SMART and PowerShell

It is always nice to know when a physical hard disk is about to fail. The SMART status of a drive in Windows is the best way to know that there is potentially a problem comming up, SMART will often be the first sign of a drive failure, but Windows is yet to provide a great way of telling you what SMART is trying to tell it.

Another issue, is through Disk Manager and Device Manager, it can be difficult to get the serial number of a disk, leading to difficulty in identifying the disk that is failing when you do go to replace it.

I discovered that WMI actually can provide a very good interface with the SMART status, as well as a great mechanism for getting the serial number of a disk as well!

I created a script using my usual template, with the following in the body. I have scheduled this script to run hourly.