PrimalScript 2012
There is a new version of PrimalScript 2012 available. As a long time user of PrimalScript for all of my scripting work, I was quite excited to see the latest version.
From first impression, everything looks very polished and the Ribbion is very easy to use. Navigation is very quick and easy.
I am running the 30 day trial, apparently my upgrade assurance expired which is a bit of a shame, if there are no bugs, will definitely pay the small fee to upgrade to the latest version.
All in all, worth taking a look at, and still the best PowerShell IDE to date.
Change to code content
I hated how code was being displayed on my site, so you may notice I have started to change it.
All code snippets will now be stored in pastebin.org, and then displayed using embedded links.
Ping Monitoring
I made a script to ping an address and alert me if it doesn't succeed. As an added bonus, it will also alert if the response time becomes to large. Once again, this is based on the usual template.
Enjoy.
Restart stopped services which are set to automatic
This script is handy for your Exchange 2010 deployments, it will find any automatic service which is stopped and start it (optional) and let you know that it happened. This is similar to a previous scripts I have posted.
As usual it uses my usual template.
Why you reboot?
I wanted to know when and by what/who/why servers rebooted. This is just a simple script, and you configure the it to run at start up in Windows task scheduler.
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.
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.
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