<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jonathan Medd&#039;s Blog</title>
	<atom:link href="http://www.jonathanmedd.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jonathanmedd.net</link>
	<description>Scripting. Powershell, VMware, Windows, Active Directory &#38; Exchange. All that kind of stuff.....</description>
	<lastBuildDate>Tue, 15 May 2012 12:18:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>London VMUG May 17th 2012</title>
		<link>http://www.jonathanmedd.net/2012/05/london-vmug-may-17th-2012.html</link>
		<comments>http://www.jonathanmedd.net/2012/05/london-vmug-may-17th-2012.html#comments</comments>
		<pubDate>Tue, 15 May 2012 12:18:37 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[user group]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2378</guid>
		<description><![CDATA[The next London VMUG takes place this Thursday May 17th and there&#8217;s still time to register. The line-up looks great as usual and in particular some excellent community content is on the agenda from well known regular faces at the VMUG. Hope to see you there. London VMUG Meeting Thursday, 17 May, 2012 Meeting: 08:30 [...]]]></description>
			<content:encoded><![CDATA[<p>The next London VMUG takes place this Thursday May 17th and there&#8217;s still time to <a href="http://www.vmug.com/e/in/eid=429">register</a>. The line-up looks great as usual and in particular some excellent community content is on the agenda from well known regular faces at the VMUG.</p>
<p>Hope to see you there.</p>
<h2><strong>London VMUG Meeting</strong></h2>
<table border="0">
<tbody>
<tr>
<td colspan="6" valign="top"><strong>Thursday, 17 May, 2012<br />
</strong></td>
</tr>
<tr>
<td colspan="6" valign="top"><strong>Meeting: 08:30 &#8211; 17:15<br />
London Chamber of Commerce and Industry<br />
33 Queen Street<br />
London, EC4R 1AP</strong><strong> </strong><br />
<a href="http://www.londonchamber.co.uk/lcc_public/article.asp?aid=342" target="_blank"><strong><em>Click here for directions</em></strong></a></td>
</tr>
<tr>
<td colspan="6" valign="top"><strong>Networking Reception: 17:15<br />
Pavilion End<br />
23 Watling Street, EC4M 9BR</strong><strong> </strong><br />
<a href="http://www.fullers.co.uk/rte.asp?id=4&amp;itemid=395&amp;task=View" target="_blank"><strong><em>Click here for directions</em></strong></a></td>
</tr>
<tr>
<td colspan="6">
The London VMUG Steering Committee is delighted to invite you to our second VMUG meeting of 2012. Thank you to our Gold sponsor Trend Micro, our Silver sponsors Liquidware Labs and Tintri and our Lab sponsor VMTurbo. Registration and the first lab of the day begin at 08.30, so come along early and make the most of the labs before we start our meeting promptly at 10.00.</p>
<p>Be sure to visit our new <a href="http://www.vmug.com/london" target="_blank">London VMUG Workspace</a>! Connect with your fellow VMUG members in te forum, ask and answer questions about VMware, and get involved in your VMUG community.</td>
</tr>
<tr>
<td colspan="6"><a href="http://www.vmug.com/e/in/eid=429#reg"><img src="http://www.vmug.com/media/ttnbqhtm.jpg" alt="" width="189" height="39" border="0" /></a><br />
Registration is open and included as part of member benefits for all VMUG members.<br />
Registration for this event will close on <strong>Wednesday, 16 May.</strong></td>
</tr>
<tr>
<td colspan="4" valign="top"><strong>Meeting Highlights</strong><strong> </strong><strong> </strong><strong> </strong></td>
<td valign="top"><strong> </strong></td>
<td valign="top"><strong><br />
</strong></td>
</tr>
<tr>
<td colspan="4">
<ul>
<li>Using vShield to Drive Efficiency and Costs Savings &#8211; Stephen Porter, <em>Trend Micro</em></li>
<li>Desktop Transformation with Liquidware Labs &#8211; Dan Falconer, <em>Liquidware Labs</em></li>
<li>Solving VM Storage Cost and Performance Challenges with VM-aware Storage &#8211; <em>Tintri</em></li>
<li>VMTurbo Labs</li>
<li>The vCenter Appliance &#8211; Hugo Phan, <em>VMware</em></li>
<li>Climb the Stack and Pimp your Cloud with VMware vFabric &#8211; Peter Holditch, <em>VMware</em></li>
<li>Flexpod: The Flexible Converged Infrastructure – Chris Kranz</li>
<li>Help, My VDI Project is Hell! – Julian Wood</li>
<li>Management and Orch’n – What, Why &amp; How – Steve Bryen</li>
<li>The vMarket – Skills in Demand for the Next Five Years – Neil Mills</li>
<li>Over to You: Design Me a Highly Available Virtualised Infrastructure &#8211; Darren Woollard</li>
<li>Writing VMware Apps for Novice Programmers &#8211; Ricky El-Qasem<em> </em></li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/05/london-vmug-may-17th-2012.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Citrix XenDesktop 5 Training from TrainSignal</title>
		<link>http://www.jonathanmedd.net/2012/05/citrix-xendesktop-5-training-from-trainsignal.html</link>
		<comments>http://www.jonathanmedd.net/2012/05/citrix-xendesktop-5-training-from-trainsignal.html#comments</comments>
		<pubDate>Fri, 11 May 2012 13:15:37 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[TrainSignal]]></category>
		<category><![CDATA[XenDesktop]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2371</guid>
		<description><![CDATA[I had a, shall we say urgent, need to get up and running with Citrix XenDesktop 5 in a very short space of time. Having used some of the TrainSignal products before  and had a very good experience with them my first thought was to head over to their site and see if they had [...]]]></description>
			<content:encoded><![CDATA[<p>I had a, shall we say urgent, need to get up and running with Citrix XenDesktop 5 in a very short space of time. Having used <a href="http://www.jonathanmedd.net/category/trainsignal">some of the TrainSignal products before</a>  and had a very good experience with them my first thought was to head over to their site and see if they had anything available. Thankfully, they have courses for both XenDesktop <a href="http://www.trainsignal.com/Citrix-XenDesktop-4-Training.aspx">4</a> and <a href="http://www.trainsignal.com/Citrix-XenDesktop-5-Training.aspx?tt=6">5</a> so I was able to get hold of the XenDesktop 5 course. As with all the other courses you get both online access and a DVD with formats suitable for desktop / laptop and smartphone / tablets. (In this instance I only had online access, however was able to successfully stream the entire course to an iPad on 3G while on train journeys)</p>
<p>The topics covered on the course are listed below. Lessons 5 &#8211; 13 were those that I initally needed to get through quickly so focused on those and found that they covered well the significant part of what I needed to know.</p>
<p><strong>Citrix XenDesktop 5 Training &#8211; Course Outline</strong></p>
<p>Lesson 1 &#8211; Getting Started with Citrix XenDesktop 5 Training<br />
Lesson 2 &#8211; Lab Setup<br />
Lesson 3 &#8211; The Course Scenario<br />
Lesson 4 &#8211; Introduction to Desktop Virtualization<br />
Lesson 5 &#8211; Planning Provisioning Server Deployment<br />
Lesson 6 &#8211; Installing and Configuring Provisioning Server<br />
Lesson 7 &#8211; Creating vDisks and Configuring Target Devices<br />
Lesson 8 &#8211; Managing vDisks, Target Devices, Servers and Printers<br />
Lesson 9 &#8211; Configuring Provisioning Server High Availability<br />
Lesson 10 &#8211; Planning XenDesktop 5 Deployment<br />
Lesson 11 &#8211; Installing and Configuring XenDesktop 5 – Part 1<br />
Lesson 12 &#8211; Installing and Configuring XenDesktop 5 – Part 2<br />
Lesson 13 &#8211; Managing XenDesktop 5<br />
Lesson 14 &#8211; Monitoring and Troubleshooting XenDesktop 5<br />
Lesson 15 &#8211; Working with Citrix Receiver<br />
Lesson 16 &#8211; Working with Profile Manager<br />
Lesson 17 &#8211; Upgrading from XenDesktop 4<br />
Lesson 18 &#8211; Preparing for the Citrix XenDesktop 5 Administration (A19) Exam<br />
Lesson 19 &#8211; Next Steps</p>
<p>Citrix XenDesktop 5 Training &#8211; Bonus Lessons</p>
<p>Lesson 20 &#8211; Configuring NetScaler Access Gateway Enterprise Edition<br />
Lesson 21 &#8211; Working with XenDesktop Setup Wizard</p>
<p>I&#8217;ve subsequently been through most of the rest of the lessons and found that it gives you excellent coverage of the XenDesktop product. I enjoyed Elias&#8217; style of training; good explanations and he is always very positive about each lesson and the product itself.</p>
<p>The only thing I think is possibly missing from the course is that it would be worth a lesson on the XenDesktop PowerShell snapins. Since the entire management of the product is built on top of PowerShell it is worth knowing at least how to get started with this topic, even if you are using the GUI to demonstrate the rest of the training. An introduction to how to get started with the PowerShell snapins and a few basic examples would be a useful addition.</p>
<p>If you have a need to learn about XenDesktop then I would highly recommend that you consider using this course. I think TrainSignal have put themselves in a good place providing these two courses since in terms of book availability (which you could either view in terms of competition or complimentary) there are not many tech books available on this subject, although I notice that Elias has &#8216;<a href="http://www.amazon.com/Mastering-Citrix-XenDesktop-Elias-Khnaser/dp/1118106806/ref=sr_1_2?ie=UTF8&amp;qid=1336741963&amp;sr=8-2">Mastering Citrix XenDesktop</a>&#8216; scheduled to come out later this year.</p>
<p style="text-align: center;"><a href="http://www.trainsignal.com/Citrix-XenDesktop-5-Training.aspx?tt=6"><img class="aligncenter size-full wp-image-2372" title="Citrix_XenDesktop_5__able" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Citrix_XenDesktop_5__able.jpg" alt="" width="500" height="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/05/citrix-xendesktop-5-training-from-trainsignal.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PowerShell Quick Tip: Converting a String to a Boolean Value</title>
		<link>http://www.jonathanmedd.net/2012/05/powershell-quick-tip-converting-a-string-to-a-boolean-value.html</link>
		<comments>http://www.jonathanmedd.net/2012/05/powershell-quick-tip-converting-a-string-to-a-boolean-value.html#comments</comments>
		<pubDate>Fri, 04 May 2012 10:56:00 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[XenDesktop]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2364</guid>
		<description><![CDATA[Some PowerShell cmdlets include switch parameters, i.e. no arguments are typically supplied to them &#8211; they are either True / On when they are present and False / Off when they are not. However, it is also possible to explicitly specify them with $true and $false, e.g. -switchparameter:$true  or -switchparameter:$false Typically you would not use [...]]]></description>
			<content:encoded><![CDATA[<p>Some PowerShell cmdlets include switch parameters, i.e. no arguments are typically supplied to them &#8211; they are either True / On when they are present and False / Off when they are not. However, it is also possible to explicitly specify them with $true and $false, e.g.</p>
<p><strong>-switchparameter:$true  or</strong></p>
<p><strong>-switchparameter:$false</strong></p>
<p>Typically you would not use this when working manually at the console, but what if you needed to automate a task using a switch parameter and set it to be On or Off based on values from a CSV or XML file, i.e. you supply the true or false as a string?</p>
<p>This can lead to some initially confusing behaviour; look at this example.</p>
<pre class="brush: powershell;">

$persistent = “False”

[boolean]$persistent
</pre>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/05/StringBoolean1.png"><img class="aligncenter size-full wp-image-2365" title="StringBoolean1" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/StringBoolean1.png" alt="" width="230" height="82" /></a></p>
<p>PowerShell appears to have converted our ‘false’ string to a Boolean ‘true’, not what we were expecting! This is because PowerShell will convert any string greater than 0 characters to a Boolean ‘true’, behaviour which is consistent across other programming languages.</p>
<p>So there are a couple of ways round this, either change your data to an empty string (which may not be possible of course)….</p>
<pre class="brush: powershell;">

$persistent = “”

[boolean]$persistent
</pre>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/05/StringBoolean2.png"><img class="aligncenter size-full wp-image-2366" title="StringBoolean2" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/StringBoolean2.png" alt="" width="211" height="83" /></a></p>
<p>or use the .Net <a href="http://msdn.microsoft.com/en-us/library/86hw82a3.aspx">System.Convert ToBoolean method</a>:</p>
<pre class="brush: powershell;">

$persistent = “False”

[System.Convert]::ToBoolean($persistent)
</pre>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/05/StringBoolean3.png"><img class="aligncenter size-full wp-image-2367" title="StringBoolean3" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/StringBoolean3.png" alt="" width="362" height="88" /></a></p>
<p>Looking at a practical example of how you might use this take a look at working with one of the Citrix XenDesktop providers to create a Hypervisor Connection (more on this topic to come)</p>
<pre class="brush: powershell;">

New-Item -Path xdhyp:\Connections –Name $Name –HypervisorAddress $HypervisorAddress –UserName $UserName –Password $Password –ConnectionType $ConnectionType –Persist: ([System.Convert]::ToBoolean($persistent))
</pre>
<p>A more detailed explanation of this topic is well written up by Kirk Munro</p>
<p><a href="http://poshoholic.com/2007/09/13/essential-powershell-beware-of-promiscuous-types/">http://poshoholic.com/2007/09/13/essential-powershell-beware-of-promiscuous-types/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/05/powershell-quick-tip-converting-a-string-to-a-boolean-value.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Quick Tip on the PowerShell -match Operator</title>
		<link>http://www.jonathanmedd.net/2012/05/quick-tip-on-the-powershell-match-operator.html</link>
		<comments>http://www.jonathanmedd.net/2012/05/quick-tip-on-the-powershell-match-operator.html#comments</comments>
		<pubDate>Wed, 02 May 2012 20:30:46 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2355</guid>
		<description><![CDATA[Here&#8217;s a quick tip for you when using PowerShell&#8217;s -match operator. The other day I was given a script to work on which was producing some (to the naked eye) confusing results, turned out the behaviour was actually consistent when you figured out what was happening. Here&#8217;s an example: Take the following text and store [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a quick tip for you when using PowerShell&#8217;s -match operator. The other day I was given a script to work on which was producing some (to the naked eye) confusing results, turned out the behaviour was actually consistent when you figured out what was happening. Here&#8217;s an example:</p>
<p>Take the following text and store it in two variables:</p>
<pre class="brush: powershell;">

$a = &quot;This is some text. It includes (brackets)&quot;

$b = &quot;This is some text. It includes (brackets)&quot;
</pre>
<p>Now compare them to each other using the -eq operator and see a True result:</p>
<pre class="brush: powershell;">

$a -eq $b
</pre>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text1.png"><img class="aligncenter size-full wp-image-2356" title="Text1" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text1.png" alt="" width="525" height="157" /></a></p>
<p>The script I was looking at though was using the -match operator and this gives a False result.</p>
<pre class="brush: powershell;">

$a -match $b
</pre>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text2.png"><img class="aligncenter size-full wp-image-2357" title="Text2" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text2.png" alt="" width="266" height="45" /></a></p>
<p>This is because the <a href="http://technet.microsoft.com/en-us/library/dd315321.aspx">-match operator will carry out a match using regular expressions</a> and the text in question includes a character <strong>)</strong> that is special in regular expressions. Consequently, if you wish to carry out a literal match with these strings you need to escape the special characters. The characters to watch out for are<strong> \$.|?*+[()^</strong></p>
<p>A couple of ways to escape them are as follows, you can either insert a <strong>\</strong> before the special character in the string like this:</p>
<pre class="brush: powershell;">

$b = &quot;This is some text. It includes \(brackets\)&quot;

$a -match $b
</pre>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text3.png"><img class="aligncenter size-full wp-image-2358" title="Text3" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text3.png" alt="" width="535" height="82" /></a></p>
<p>Or a better way in my opinion to do it is use the .Net regex escape method which will prevent you from having to amend the string:</p>
<pre class="brush: powershell;">

$b = &quot;This is some text. It includes (brackets)&quot;

$a -match [regex]::escape($b)
</pre>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text4.png"><img class="aligncenter size-full wp-image-2359" title="Text4" src="http://www.jonathanmedd.net/wp-content/uploads/2012/05/Text4.png" alt="" width="517" height="80" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/05/quick-tip-on-the-powershell-match-operator.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Importance of Being On Time</title>
		<link>http://www.jonathanmedd.net/2012/04/the-importance-of-being-on-time.html</link>
		<comments>http://www.jonathanmedd.net/2012/04/the-importance-of-being-on-time.html#comments</comments>
		<pubDate>Mon, 02 Apr 2012 14:24:13 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[powercli]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[wmi]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2262</guid>
		<description><![CDATA[In an Active Directory environment its typical for client machines to use a local domain controller as their time source, domain controllers with the PDC emulator for the domain and the PDC emulator for the root domain to synchronise time with an external source. In most circumstances the aim is to keep the time synchronised [...]]]></description>
			<content:encoded><![CDATA[<p>In an Active Directory environment its typical for client machines to use a local domain controller as their time source, domain controllers with the PDC emulator for the domain and the PDC emulator for the root domain to synchronise time with an external source. In most circumstances the aim is to keep the time synchronised within a 5 minute tolerance level, this will ensure there are no issues with <a href="http://blogs.technet.com/b/askds/archive/2008/03/06/kerberos-for-the-busy-admin.aspx">Kerberos authentication which has the 5 minute tolerance as part of its requirements</a>.</p>
<p>For some applications a tolerance of 5 minutes is too large and can cause issues with the application. You may need to <a href="http://support.microsoft.com/kb/816042">adjust items such as the polling interval</a> to ensure that the time is within a lower tolerance, but first of all you need to know how far out of tolerance the servers within your environment are.</p>
<p>The below <strong>Get-WindowsTimeDifference</strong> function can help you out here. It will take a list of Windows computers as input and then compare their time to either a specified Time Server within the environment, or by default attempt to use the PDC emulator for the Root AD Domain (or failing that, the PDC emulator for the current domain). The default tolerance level is one minute, this can be altered with the <strong>ToleranceLevel</strong> parameter.</p>
<p>A common cause of time sync issues can be Windows servers in the DMZ, which are not members of the domain. Consequently, by default they will not sync with a local domain controller and may need to be manually configured to use a time server (which doesn&#8217;t always happen!). Checking the time for these servers may require alternate credentials, so the <strong>Credential</strong> parameter is provided for that purpose.</p>
<p>The example below demonstrates using a text file list of Windows Server names piped into <strong>Get-WindowsTimeDifference</strong> with one server out of synch when the <strong>ToleranceLevel</strong> has been set to 3 minutes.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/04/Synch11.png"><img class="aligncenter size-full wp-image-2351" title="Synch1" src="http://www.jonathanmedd.net/wp-content/uploads/2012/04/Synch11.png" alt="" width="692" height="130" /></a></p>
<pre class="brush: powershell;">
function Get-WindowsTimeDifference {
&lt;#
.SYNOPSIS
Get the time difference between a time server and Windows clients

.DESCRIPTION
Get the time difference between a time server and Windows clients

.PARAMETER  ReferenceComputer
Name of the computer to check time difference for

.PARAMETER  TimeServer
Name of a TimeServer to use instead of the PDC Emulator

.PARAMETER  ToleranceLevel
Amount in minutes to permit as an acceptable time difference. Default is 1

.PARAMETER  Credential
Supply a PSCredential to use alternative credentials for the WMI query

.EXAMPLE
PS C:\&gt; Get-WindowsTimeDifference -ReferenceComputer Server01 -ToleranceLevel 2

.EXAMPLE

PS C:\&gt; Get-Content servers.txt | Get-WindowsTimeDifference
-TimeServer TimeServer -ToleranceLevel 3 | Select ComputerName,SynchronisedStatus,TimeDeviation,TimeServer

.EXAMPLE
PS C:\&gt; Get-Content servers.txt | Get-WindowsTimeDifference -Credential (Get-Credential)

.NOTES
Author: Jonathan Medd
Date: 16/03/2012
#&gt;

[CmdletBinding()]
param(
[Parameter(Position=0,Mandatory=$true,HelpMessage=&quot;Name of the computer to check time difference for&quot;,
ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$true)]
[Alias('CN','__SERVER','IPAddress','Server','Computername')]
[System.String]
$ReferenceComputer = $env:COMPUTERNAME,

[Parameter(Position=1)]
[System.String]
$TimeServer,

[Parameter(Position=2)]
[int]
$ToleranceLevel = 1,

[Parameter(Position=3)]
[System.Management.Automation.PSCredential]
$Credential
)

begin {

# If no TimeServer specified, retrive the PDC Emulator for the Root Domain and the Current Domain
if (-not($Timeserver)) {

$Forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$DomainContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(&quot;Domain&quot;, $Forest.RootDomain)
$RootPDCEmulator = ([System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($DomainContext)).PdcRoleOwner.Name
$CurrentDomainPDCEmulator = ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).PdcRoleOwner.Name

# Attempt a WMI query to the PDC Emulator for the Root Domain
try {

$PDCEmulator = (Get-WmiObject Win32_OperatingSystem -ComputerName $RootPDCEmulator -ErrorAction Stop).__Server

}

# If there is an error (such as blocked TCP ports or permissions) try the PDC Emulator for the Current Domain instead
catch [System.Exception] {

$PDCEmulator = (Get-WmiObject Win32_OperatingSystem -ComputerName $CurrentDomainPDCEmulator).__Server
}

}
}

process {

# If no TimeServer specified, calculate the time difference between the PDC Emulator and the Reference Computer
if (-not($Timeserver)) {

try {
$PDCEmulatorWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $PDCEmulator

if ($Credential){

$ReferenceComputerWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $ReferenceComputer -Credential $Credential -ErrorAction Stop

}

else {

$ReferenceComputerWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $ReferenceComputer -ErrorAction Stop

}

$PDCEmulatorTime = $PDCEmulatorWMI.ConvertToDateTime($PDCEmulatorWMI.LocalDateTime)
$ReferenceComputerTime = $ReferenceComputerWMI.ConvertToDateTime($ReferenceComputerWMI.LocalDateTime)
$TimeDeviation = $PDCEmulatorTime - $ReferenceComputerTime
}

# Catch any errors with the WMI query to the Reference Computer
catch [System.Exception] {

$TimeDeviation = &quot;Unable to contact server&quot;

}
}

else {

# If TimeSever is specified, calculate the time difference between the TimeServer and the Reference Computer
try {

$TimeServerWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $TimeServer

if ($Credential){

$ReferenceComputerWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $ReferenceComputer -Credential $Credential -ErrorAction Stop

}

else {

$ReferenceComputerWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $ReferenceComputer -ErrorAction Stop

}

$TimeServerTime = $TimeServerWMI.ConvertToDateTime($TimeServerWMI.LocalDateTime)
$ReferenceComputerTime = $ReferenceComputerWMI.ConvertToDateTime($ReferenceComputerWMI.LocalDateTime)
$TimeDeviation = $TimeServerTime - $ReferenceComputerTime

}

# Catch any errors with the WMI query to the Reference Computer
catch [System.Exception] {

$TimeDeviation = &quot;Unable to contact server&quot;

}

}
# Use the TimeDeviation variable to determine SynchronisedStatus and TimeDeviation to report
if ($TimeDeviation -eq &quot;Unable to contact server&quot;){

$SynchronisedStatus = &quot;Unable to contact server&quot;

}

elseif ([Math]::Abs(($TimeDeviation).Minutes) -ge $ToleranceLevel) {

$SynchronisedStatus = &quot;Not Synchronised&quot;
$TimeDeviation = [string]$TimeDeviation.Minutes +&quot; Minute(s) &quot; + [string]$TimeDeviation.Seconds +&quot; Seconds&quot;
}

else {

$SynchronisedStatus = &quot;Synchronised&quot;
$TimeDeviation = [string]$TimeDeviation.Minutes +&quot; Minute(s) &quot; + [string]$TimeDeviation.Seconds +&quot; Seconds&quot;
}

# Create custom objects to store the results
New-Object -TypeName PSObject -Property @{
ComputerName = $ReferenceComputer
SynchronisedStatus = $SynchronisedStatus
TimeDeviation = $TimeDeviation
TimeServer = if ($PDCEmulator) {$PDCEmulator} else {$TimeServer}

}
}

}
</pre>
<p>It may also be important to prove that time is synchronised across your VMware servers. The <strong>Get-ESXTimeDifference</strong> function will do this for you. In the below example a list of VMware servers is obtained froma text file and the time checked against the Root Domain PDC emulator using the default<strong> ToleranceLevel</strong> of 1 minute.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/04/Synch22.png"><img class="aligncenter size-full wp-image-2353" title="Synch2" src="http://www.jonathanmedd.net/wp-content/uploads/2012/04/Synch22.png" alt="" width="693" height="115" /></a></p>
<p style="text-align: left;"><strong>Note:</strong> <strong>Get-ESXTimeDifference</strong> requires PowerCLI installed and a connection to vCenter having already been made.</p>
<pre class="brush: powershell;">

function Get-ESXTimeDifference {
&lt;#
.SYNOPSIS
Get the time difference between a time server and ESX clients

.DESCRIPTION
Get the time difference between a time server and ESX clients

.PARAMETER  ReferenceComputer
Name of the computer to check time difference for

.PARAMETER  TimeServer
Name of a TimeServer to use instead of the PDC Emulator

.PARAMETER  ToleranceLevel
Amount in minutes to permit as an acceptable time difference. Default is 1

.EXAMPLE
PS C:\&gt; Get-ESXTimeDifference -ReferenceComputer ESX01 -ToleranceLevel 2

.EXAMPLE

PS C:\&gt; Get-VMHost ESX01 | Get-ESXTimeDifference
-TimeServer TimeServer -ToleranceLevel 3 | Select ComputerName,SynchronisedStatus,TimeDeviation,TimeServer

.NOTES
Author: Jonathan Medd
Date: 16/03/2012
#&gt;

[CmdletBinding()]
param(
[Parameter(Position=0,Mandatory=$true,HelpMessage=&quot;Name of the computer to check time difference for&quot;,
ValueFromPipeline=$True,ValueFromPipelineByPropertyName=$true)]
[Alias('CN','__SERVER','IPAddress','Server','Computername','VMHost','Name')]
[System.String]
$ReferenceComputer,

[Parameter(Position=1)]
[System.String]
$TimeServer,

[Parameter(Position=2)]
[int]
$ToleranceLevel = 1
)

begin {

# If no TimeServer specified, retrive the PDC Emulator for the Root Domain and the Current Domain
if (-not($Timeserver)) {

$Forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$DomainContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext(&quot;Domain&quot;, $Forest.RootDomain)
$RootPDCEmulator = ([System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($DomainContext)).PdcRoleOwner.Name
$CurrentDomainPDCEmulator = ([System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()).PdcRoleOwner.Name

# Attempt a WMI query to the PDC Emulator for the Root Domain
try {

$PDCEmulator = (Get-WmiObject Win32_OperatingSystem -ComputerName $RootPDCEmulator -ErrorAction Stop).__Server

}

# If there is an error (such as blocked TCP ports or permissions) try the PDC Emulator for the Current Domain instead
catch [System.Exception] {

$PDCEmulator = (Get-WmiObject Win32_OperatingSystem -ComputerName $CurrentDomainPDCEmulator).__Server
}

}
}

process {

# If no TimeServer specified, calculate the time difference between the PDC Emulator and the Reference Computer
if (-not($Timeserver)) {

$PDCEmulatorWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $PDCEmulator

$PDCEmulatorTime = $PDCEmulatorWMI.ConvertToDateTime($PDCEmulatorWMI.LocalDateTime)

$ReferenceComputerTime = ((Get-View ((Get-VMHost $ReferenceComputer).ExtensionData.ConfigManager.DateTimeSystem)).QueryDateTime()).ToLocalTime()
$TimeDeviation = $PDCEmulatorTime - $ReferenceComputerTime

}

else {

# If TimeSever is specified, calculate the time difference between the TimeServer and the Reference Computer

$TimeServerWMI = Get-WmiObject Win32_OperatingSystem -ComputerName $TimeServer

$TimeServerTime = $TimeServerWMI.ConvertToDateTime($TimeServerWMI.LocalDateTime)
$ReferenceComputerTime = ((Get-View ((Get-VMHost $ReferenceComputer).ExtensionData.ConfigManager.DateTimeSystem)).QueryDateTime()).ToLocalTime()
$TimeDeviation = $TimeServerTime - $ReferenceComputerTime

}
# Use the TimeDeviation variable to determine SynchronisedStatus and TimeDeviation to report

if ([Math]::Abs(($TimeDeviation).Minutes) -ge $ToleranceLevel) {

$SynchronisedStatus = &quot;Not Synchronised&quot;
$TimeDeviation = [string]$TimeDeviation.Minutes +&quot; Minute(s) &quot; + [string]$TimeDeviation.Seconds +&quot; Seconds&quot;
}

else {

$SynchronisedStatus = &quot;Synchronised&quot;
$TimeDeviation = [string]$TimeDeviation.Minutes +&quot; Minute(s) &quot; + [string]$TimeDeviation.Seconds +&quot; Seconds&quot;
}

# Create custom objects to store the results
New-Object -TypeName PSObject -Property @{
ComputerName = $ReferenceComputer
SynchronisedStatus = $SynchronisedStatus
TimeDeviation = $TimeDeviation
TimeServer = if ($PDCEmulator) {$PDCEmulator} else {$TimeServer}

}
}

}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/04/the-importance-of-being-on-time.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Which VMs restarted after a vSphere HA event?</title>
		<link>http://www.jonathanmedd.net/2012/03/which-vms-restarted-after-a-vsphere-ha-event.html</link>
		<comments>http://www.jonathanmedd.net/2012/03/which-vms-restarted-after-a-vsphere-ha-event.html#comments</comments>
		<pubDate>Thu, 29 Mar 2012 14:55:59 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[powercli]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2256</guid>
		<description><![CDATA[I experienced a vSphere HA event where VMs restarted on other hosts and I was requested by management to confirm which VMs had restarted. Details are stored within vCenter events, but trawling through those manually for multiple VMs would be pretty tedious. Enter of course, PowerCLI. The Get-VIEvent cmdlet enables you to search through the [...]]]></description>
			<content:encoded><![CDATA[<p>I experienced a vSphere HA event where VMs restarted on other hosts and I was requested by management to confirm which VMs had restarted. Details are stored within vCenter events, but trawling through those manually for multiple VMs would be pretty tedious. Enter of course, PowerCLI. The Get-VIEvent cmdlet enables you to search through the events, but to a certain extent it kind of helps if you know what you are looking for since there is so much information to look through.</p>
<p>In the <a href="http://powerclibook.com">PowerCLI Book</a>, we include a function, Get-VIEventType to return the different type of events that are available. By using this function we can search for an event that would match HA restarts.</p>
<pre class="brush: powershell;">

Get-VIEventType | Where-Object {$_.Description -like '*restarted*'} | Select-Object Name,Description
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/RestartEvent.png"><img class="aligncenter size-full wp-image-2257" title="RestartEvent" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/RestartEvent.png" alt="" width="633" height="77" /></a></p>
<p style="text-align: left;">So to find these events when can now run a query and filter out only those that match the <strong>VmRestartedOnAlternateHostEven</strong>t. In the initial Get-VIEvent query we can also reduce the scope of the search by using <strong>-Type Info</strong> since these events are not recorded as Warnings or Errors.</p>
<pre class="brush: powershell;">

Get-VIEvent -start (Get-Date).adddays(-1) -MaxSamples 5000 -Type Info | Where-Object {$_.gettype().Name -eq &quot;VmRestartedOnAlternateHostEvent&quot;} | Select-Object @{N='VM';E={($_ | Select -ExpandProperty VM).Name}},@{N='Host';E={($_ | Select -ExpandProperty SourceHost).Name}},CreatedTime
</pre>
<p><strong>Update:</strong></p>
<p>After putting this post together I noticed (after the report came through this morning) that this check is also included as part of <a href="http://www.virtu-al.net/featured-scripts/vcheck/">vCheck</a>, but implemented slightly differently. As always, there&#8217;s usually more than one way to get to the same end result.</p>
<pre class="brush: powershell;">
$Date = Get-Date
$HAVMrestartold =5
Get-VIEvent -maxsamples 100000 -Start ($Date).AddDays(-$HAVMrestartold) -type info | Where {$_.FullFormattedMessage -match &quot;was restarted&quot;} |select CreatedTime,FullFormattedMessage |sort CreatedTime -Descending
</pre>
<p><strong>Update 2:</strong></p>
<p>While testing out this post on vSphere 5 (the above was all vSphere 4.1) I discovered that there had been a few changes. Firstly, there are now two types listed</p>
<pre class="brush: powershell;">

Get-VIEventType | Where-Object {$_.Description -like '*restarted*'} | Select-Object Name,Description
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HA1.png"><img class="aligncenter size-full wp-image-2323" title="HA1" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HA1.png" alt="" width="633" height="116" /></a></p>
<p>Some research led to the discovery that the <a href="http://pubs.vmware.com/vsphere-50/index.jsp?topic=/com.vmware.wssdk.smssdk.doc_50/vim.event.VmRestartedOnAlternateHostEvent.html">VmRestartedonAlternateHostEvent was deprecated in vSphere 5</a>.</p>
<p>Consequently, the below no longer produced any results:</p>
<pre class="brush: powershell;">

Get-VIEvent -start (Get-Date).adddays(-1) -MaxSamples 5000 -Type Info | Where-Object {$_.gettype().Name -eq &quot;VmRestartedOnAlternateHostEvent&quot;} | Select-Object @{N='VM';E={($_ | Select -ExpandProperty VM).Name}},@{N='Host';E={($_ | Select -ExpandProperty SourceHost).Name}},CreatedTime
</pre>
<p>It needed to be modified to:</p>
<pre class="brush: powershell;">

Get-VIEvent -start (Get-Date).adddays(-1) -MaxSamples 5000 | Where-Object {$_.eventtypeid -eq &quot;com.vmware.vc.ha.VmRestartedByHAEvent&quot;} | Select ObjectName,CreatedTime
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HA2.png"><img class="aligncenter size-full wp-image-2324" title="HA2" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HA2.png" alt="" width="632" height="107" /></a></p>
<p>Also the vCheck method no longer worked:</p>
<pre class="brush: powershell;">
$Date = Get-Date
$HAVMrestartold =5
Get-VIEvent -maxsamples 100000 -Start ($Date).AddDays(-$HAVMrestartold) -type info | Where {$_.FullFormattedMessage -match &quot;was restarted&quot;} |select CreatedTime,FullFormattedMessage |sort CreatedTime -Descending
</pre>
<p>and needed to be modified to the below since the text changed slightly and it was now also a warning event:</p>
<pre class="brush: powershell;">
$Date = Get-Date
$HAVMrestartold =5
Get-VIEvent -maxsamples 100000 -Start ($Date).AddDays(-$HAVMrestartold) -type warning | Where {$_.FullFormattedMessage -match &quot;restarted&quot;} |select CreatedTime,FullFormattedMessage |sort CreatedTime -Descending
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HA4.png"><img class="aligncenter size-full wp-image-2328" title="HA4" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HA4.png" alt="" width="694" height="138" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/03/which-vms-restarted-after-a-vsphere-ha-event.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Server 8 Core Beta &#8211; Installing VMware Tools</title>
		<link>http://www.jonathanmedd.net/2012/03/windows-server-8-core-beta-installing-vmware-tools.html</link>
		<comments>http://www.jonathanmedd.net/2012/03/windows-server-8-core-beta-installing-vmware-tools.html#comments</comments>
		<pubDate>Mon, 26 Mar 2012 19:45:15 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[vmware]]></category>
		<category><![CDATA[Windows Server 8 Beta]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2304</guid>
		<description><![CDATA[Here&#8217;s a quick post on installing VMware Tools inside Windows Server 8 Core Beta (Note the Tools version this was tested against is the version that is available via ESXi 5 Build 515841): 1) Mount the VMware Tools installer for the VM and switch to the CD-Rom drive. (Note: the screenshots below show a session [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a quick post on installing VMware Tools inside Windows Server 8 Core Beta (Note the Tools version this was tested against is the version that is available via ESXi 5 Build 515841):</p>
<p>1) Mount the VMware Tools installer for the VM and switch to the CD-Rom drive. (Note: the screenshots below show a session where I was already running PowerShell, not cmd.exe)</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools1.png"><img class="aligncenter size-full wp-image-2305" title="Tools1" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools1.png" alt="" width="632" height="307" /></a></p>
<p>2) Run setup.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools21.png"><img class="aligncenter size-full wp-image-2307" title="Tools2" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools21.png" alt="" width="654" height="446" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools3.png"><img class="aligncenter size-full wp-image-2308" title="Tools3" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools3.png" alt="" width="670" height="494" /></a></p>
<p>3) Work through the wizard, selecting the appropriate options:</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools4.png"><img class="aligncenter size-full wp-image-2309" title="Tools4" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools4.png" alt="" width="665" height="495" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools5.png"><img class="aligncenter size-full wp-image-2310" title="Tools5" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools5.png" alt="" width="653" height="476" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools6.png"><img class="aligncenter size-full wp-image-2311" title="Tools6" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools6.png" alt="" width="649" height="475" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools7.png"><img class="aligncenter size-full wp-image-2312" title="Tools7" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools7.png" alt="" width="667" height="484" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools8.png"><img class="aligncenter size-full wp-image-2313" title="Tools8" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools8.png" alt="" width="658" height="487" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools9.png"><img class="aligncenter size-full wp-image-2314" title="Tools9" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools9.png" alt="" width="619" height="329" /></a></p>
<p>4) Alternatively, you could use some of the command line options for installing VMware Tools, e.g. the below will perform a quiet install and reboot automatically:</p>
<p><strong>setup64.exe /s /v/qn</strong></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools10.png"><img class="aligncenter size-full wp-image-2315" title="Tools10" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools10.png" alt="" width="632" height="324" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools11.png"><img class="aligncenter size-full wp-image-2316" title="Tools11" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools11.png" alt="" width="633" height="391" /></a></p>
<p style="text-align: left;">5) Here&#8217;s confirmation of the successful install:<a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools12.png"><img class="aligncenter size-full wp-image-2317" title="Tools12" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/Tools12.png" alt="" width="621" height="268" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/03/windows-server-8-core-beta-installing-vmware-tools.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Windows Server 8 Beta &#8211; Installing the first DC in a Forest on Server Core</title>
		<link>http://www.jonathanmedd.net/2012/03/windows-server-8-beta-installing-the-first-dc-in-a-forest-on-server-core.html</link>
		<comments>http://www.jonathanmedd.net/2012/03/windows-server-8-beta-installing-the-first-dc-in-a-forest-on-server-core.html#comments</comments>
		<pubDate>Wed, 21 Mar 2012 15:30:32 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[powershell]]></category>
		<category><![CDATA[Windows Server 8 Beta]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2266</guid>
		<description><![CDATA[Reminder: this post is based around a beta version of a product and obviously subject to changes before RTM. The release of Windows Server 8 Beta coincided with the need to build out a new homelab environment. I decided it would be a good opportunity to see how far I could use the Server Core [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Reminder: this post is based around a beta version of a product and obviously subject to changes before RTM.</strong></p>
<p>The release of Windows Server 8 Beta coincided with the need to build out a new homelab environment. I decided it would be a good opportunity to see how far I could use the Server Core deployment option (which is now the preferred choice in the install) and what issues I would come up against. I have thought for a long time that requring all the GUI components on a Windows Server, that typically didn&#8217;t need them, made it feel unnecessarily bloated. Server Core has obviously been available since Windows Server 2008, but with the release of Windows Server 8 adding more possibilites to Server Core and the statement that <a href="http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-416T"><strong>Windows Server 8 Apps must run without a GUI</strong></a> I figured it was time to get more familiar with it.</p>
<p>My other aim with this post was to carry out all configuration with PowerShell and not use any of the previous native commands such as netsh or dcpromo. Windows Server 8 ships with PowerShell modules for Network Configuration (new), Windows Server Role and Feature Install and Active Directory Domain Controller installation (new) which means this should be possible.</p>
<p>Note that in the PowerShell examples below, not all of the cmdlets are from the core PowerShell modules available. Prior to PowerShell v3 it was necessary to track down which module a cmdlet belonged to and then run:</p>
<pre class="brush: powershell;">

Import-Module ModuleName
</pre>
<p>followed by the cmdlet. In PowerShell v3 simply running a non-core cmdlet, such as Get-NetIPAddress, will auto-import the module. Cool.</p>
<p>The first step was to deploy a Windows Server 8 Beta VM selecting the Server Core install option. (I&#8217;m not intending to detail that process here). Slightly disappointingly we are presented with cmd.exe and not a nice blue PowerShell console <img src='http://www.jonathanmedd.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  . I suspect this is because of the possibility to remove .Net and PowerShell from Server Core, so then you would have to deal with issues of multiple consoles to display.</p>
<p>So to get properly started let&#8217;s fire up PowerShell</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall01.png"><img class="aligncenter size-full wp-image-2267" title="ADInstall01" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall01.png" alt="" width="650" height="341" /></a></p>
<p>Let&#8217;s take a look at the current IP configuration:</p>
<pre class="brush: powershell;">

Get-NetIPaddress -InterfaceAlias *Wired* -AddressFamily IPv4
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall02.png"><img class="aligncenter size-full wp-image-2270" title="ADInstall02" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall02.png" alt="" width="646" height="339" /></a></p>
<p>So we need to disable DHCP:</p>
<pre class="brush: powershell;">

Get-NetIPInterface -InterfaceAlias *Wired* -AddressFamily IPv4 | Where {$_.ConnectionSate -eq 'Connected'} | Set-NetIPInterface -Dhcp Disabled

Get-NetIPInterface -InterfaceAlias *Wired* -AddressFamily IPv4
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall05.png"><img class="aligncenter size-full wp-image-2271" title="ADInstall05" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall05.png" alt="" width="644" height="343" /></a></p>
<p>Now configure a static IP, subnet and default gateway:</p>
<pre class="brush: powershell;">

Get-NetIPAddress -InterfaceAlias &quot;Wired Ethernet Connection&quot; -AddressFamily IPv4 | New-NetIPAddress -IPv4Address 192.168.0.150 -PrefixLength 24 -DefaultGateway 192.168.0.1
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall09.png"><img class="aligncenter size-full wp-image-2272" title="ADInstall09" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall09.png" alt="" width="628" height="328" /></a></p>
<p>Configuring DNS client settings uses a different cmdlet, <strong>Set-DNSClientServerAddress</strong>:</p>
<pre class="brush: powershell;">

Set-DNSClientServerAddress -InterfaceAlias &quot;Wired Ethernet Connection&quot; -ServerAddresses 192.168.0.150,194.168.4.100

Get-DNSClientServerAddress -InterfaceAlias &quot;Wired Ethernet Connection&quot;
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall11.png"><img class="aligncenter size-full wp-image-2274" title="ADInstall11" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall11.png" alt="" width="636" height="333" /></a></p>
<p>We should also set the DNS suffix with the <strong>Set-DnsClient</strong> cmdlet:</p>
<pre class="brush: powershell;">

Set-DnsClient -InterfaceAlias &quot;Wired Ethernet Connection&quot; -ConnectionSpecificSuffix sunnydale.local

Get-DnsClient -InterfaceAlias &quot;Wired Ethernet Connection&quot;
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall13b.png"><img class="aligncenter size-full wp-image-2275" title="ADInstall13b" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall13b.png" alt="" width="636" height="321" /></a></p>
<p>Don&#8217;t forget to rename the computer if you have deployed the VM from a fresh install and have not already named it correctly via a VM template deployment process. (I did the first time and so ended up with a horribly named Domain Controller!)</p>
<pre class="brush: powershell;">

Rename-Computer -NewName DC01

Restart-Computer
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall05c.png"><img class="aligncenter size-full wp-image-2276" title="ADInstall05c" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall05c.png" alt="" width="630" height="340" /></a></p>
<p>Active Directory is not installed by default:</p>
<pre class="brush: powershell;">

Get-WindowsFeature *Domain*
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall14.png"><img class="aligncenter size-full wp-image-2277" title="ADInstall14" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall14.png" alt="" width="634" height="335" /></a></p>
<p>So, let&#8217;s install the AD-Domain-Services role:</p>
<pre class="brush: powershell;">

Install-WindowsFeature AD-Domain-Services

Get-WindowsFeature *Domain*
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall16.png"><img class="aligncenter size-full wp-image-2278" title="ADInstall16" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall16.png" alt="" width="643" height="344" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall18.png"><img class="aligncenter size-full wp-image-2279" title="ADInstall18" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall18.png" alt="" width="626" height="333" /></a></p>
<p>In previous releases at this point we would run dcpromo.exe and an unattend file, but now can use the <strong>Install-ADDSForest</strong> cmdlet instead.</p>
<pre class="brush: powershell;">

Install-ADDSForest `

-ForestMode &quot;Win8&quot; `

-DomainMode &quot;Win8&quot; `

-DomainName &quot;sunnydale.local&quot; `

-DomainNetBIOSName &quot;SUNNYDALE&quot; `

-DatabasePath &quot;C:\Windows\NTDS&quot; `

-LogPath &quot;C:\Windows\NTDS&quot; `

-SYSVOLPath &quot;C:\Windows\SYSVOL&quot; `

-InstallDNS:$true `

-CreateDNSDelegation:$false `

-RebootOnCompletion:$true `

-Force:$true
</pre>
<p>You&#8217;ll be prompted for the Safe Mode Admin password (alternatively you could also specify it above)</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall21.png"><img class="aligncenter size-full wp-image-2282" title="ADInstall21" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall21.png" alt="" width="653" height="332" /></a></p>
<p>The install will now begin:</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall22.png"><img class="aligncenter size-full wp-image-2283" title="ADInstall22" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall22.png" alt="" width="627" height="334" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall23.png"><img class="aligncenter size-full wp-image-2284" title="ADInstall23" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall23.png" alt="" width="647" height="334" /></a></p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall24.png"><img class="aligncenter size-full wp-image-2285" title="ADInstall24" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall24.png" alt="" width="623" height="321" /></a></p>
<p>Since we set:</p>
<pre class="brush: powershell;">

-RebootOnCompletion:$true
</pre>
<p>the server will restart once the install has completed.</p>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall25.png"><img class="aligncenter size-full wp-image-2286" title="ADInstall25" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall25.png" alt="" width="544" height="324" /></a></p>
<p>Looking promising as it boots back up:</p>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall26.png"><img class="aligncenter size-full wp-image-2287" title="ADInstall26" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall26.png" alt="" width="678" height="287" /></a></p>
<p>I was prompted to change the Administrator password, which I think is different from previous releases:</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall28.png"><img class="aligncenter size-full wp-image-2289" title="ADInstall28" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall28.png" alt="" width="621" height="302" /></a></p>
<p>We can confirm that Active Directory is looking good by using some cmdlets from the AD PowerShell module. List users:</p>
<pre class="brush: powershell;">

Get-ADUser -Filter * | Format-Table Name,DistinguishedName -Auto
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall29.png"><img class="aligncenter size-full wp-image-2290" title="ADInstall29" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall29.png" alt="" width="623" height="324" /></a></p>
<p>Retrieve some details about the Forest:</p>
<pre class="brush: powershell;">

Get-ADForest
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall30.png"><img class="aligncenter size-full wp-image-2291" title="ADInstall30" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall30.png" alt="" width="627" height="336" /></a></p>
<p>Retrieve some details about the Domain:</p>
<pre class="brush: powershell;">

Get-ADDomain
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall31.png"><img class="aligncenter size-full wp-image-2292" title="ADInstall31" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall31.png" alt="" width="629" height="325" /></a></p>
<p>and finally check out the Domain Controllers in the Domain:</p>
<pre class="brush: powershell;">

Get-ADDomainController
</pre>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall32.png"><img class="aligncenter size-full wp-image-2293" title="ADInstall32" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/ADInstall32.png" alt="" width="635" height="335" /></a></p>
<p>I was pretty happy with this experience and had anticipated more issues getting this working for the first server in the domain, without being able to remote manage it from a workstation. So it will be on from here to try other infrastructure roles and applications in Server Core.</p>
<p>This was obviously my first attempt with Server Core in Windows Server 8, I&#8217;d be interested in any feedback on smarter ways of getting to this point. Oh and if you unnecessarily install a GUI on Windows Server 8, then I may have to despatch <a href="http://twitter.com/servercoreman">@ServerCoreMan</a> to sort you out <img src='http://www.jonathanmedd.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/03/windows-server-8-beta-installing-the-first-dc-in-a-forest-on-server-core.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Including the HP Offline Bundle as part of an upgrade to ESXi 4.1 U2</title>
		<link>http://www.jonathanmedd.net/2012/03/including-the-hp-offline-bundle-as-part-of-an-upgrade-to-esxi-4-1-u2.html</link>
		<comments>http://www.jonathanmedd.net/2012/03/including-the-hp-offline-bundle-as-part-of-an-upgrade-to-esxi-4-1-u2.html#comments</comments>
		<pubDate>Tue, 06 Mar 2012 14:24:26 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[esxi]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[powercli]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2235</guid>
		<description><![CDATA[If you&#8217;re running your vSphere deployment on HP kit then there&#8217;s a pretty good chance you use the HP Customized ISO Image for installation, for example this one for ESXi 4.1 U1. These customised images typically contain HP management tools and drivers and are great for saving time during the installation process. Naturally you will [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re running your vSphere deployment on HP kit then there&#8217;s a pretty good chance you use the HP Customized ISO Image for installation, for example this one for <a href="http://downloads.vmware.com/d/details/oem_esxi41u1_hp_41u1/ZHcqYnR0cGhiZGhwZA">ESXi 4.1 U1</a>. These customised images typically contain HP management tools and drivers and are great for saving time during the installation process. Naturally you will be upgrading ESXi at some point, but it&#8217;s important that you also keep the HP part up-to-date too. To accompany the release of ESXi 4.1 U2 there is a corresponding release of the <a href="http://h20565.www2.hp.com/portal/site/hpsc/template.PAGE/public/psi/swdDetails/?sp4ts.oid=4158222&amp;spf_p.tpst=psiSwdMain&amp;spf_p.prp_psiSwdMain=wsrp-navigationalState%3Dlang%253Den%257Ccc%253DUS%257CprodSeriesId%253D4132829%257CprodNameId%253D4158222%257CswEnvOID%253D4091%257CswLang%253D8%257CswItem%253DMTX-1a452a67d79b40db8c4cee372a%257Caction%253DdriverDocument&amp;javax.portlet.begCacheTok=com.vignette.cachetoken&amp;javax.portlet.endCacheTok=com.vignette.cachetoken">HP Offline Bundle</a>. The release notes for this version do not suggest any enhancements or bug fixes, only that it is the version that is supported with 4.1 U2.</p>
<p>Once you have downloaded the HP Offline Bundle, it is possible to deploy it via a number of methods. The installation notes suggest installing with the vihostupdate utility, however in this post I&#8217;m going to show how it can be installed via vCenter Update Manager.</p>
<p>1) First of all the HP Offline Bundle needs to be imported into the Update Manager Patch Repository. Navigate to the Patch Repositoy and select<strong> Import Patches</strong>.</p>
<p style="text-align: left;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline1.png"><img class="aligncenter size-full wp-image-2236" title="HPOffline1" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline1.png" alt="" width="612" height="336" /></a></p>
<p style="text-align: left;">2. Enter the path to the HP Offline Bundle. (Note: the GUI does not display the full path, just the filename)</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline2.png"><img class="aligncenter size-full wp-image-2237" title="HPOffline2" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline2.png" alt="" width="613" height="338" /></a></p>
<p>3. The patches will then be uploaded to the Patch Repository.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline3.png"><img class="aligncenter size-full wp-image-2238" title="HPOffline3" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline3.png" alt="" width="610" height="338" /></a></p>
<p>4. Finally, finish off the wizard.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline4.png"><img class="aligncenter size-full wp-image-2239" title="HPOffline4" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline4.png" alt="" width="615" height="336" /></a></p>
<p>5. Once the HP Offline Bundle has been imported a Host Extension Patch Baseline needs to be created. Navigate to Baselines and Groups and create a new Baseline, with the type changed from the default <strong>Host Patch</strong> to <strong>Host Extension</strong>.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline5.png"><img class="aligncenter size-full wp-image-2240" title="HPOffline5" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline5.png" alt="" width="602" height="458" /></a></p>
<p>6. Select the Extension to add to the Baseline. The best thing to do here is enter <strong>HP</strong> into the search box to reduce the number of items to choose from.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline6.png"><img class="aligncenter size-full wp-image-2241" title="HPOffline6" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline6.png" alt="" width="687" height="401" /></a></p>
<p>7. On the final page confirm the HP Offline Bundle has been added.</p>
<p style="text-align: center;"><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline7.png"><img class="aligncenter size-full wp-image-2242" title="HPOffline7" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline7.png" alt="" width="600" height="441" /></a></p>
<p>Alternatively, once the HP Offline Bundle has been uploaded into the Patch Repository, it&#8217;s much easier to create this baseline via the vCenter Update Manger PowerCLI cmdlets. <img src='http://www.jonathanmedd.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   Note that we need to use the <strong>Extension</strong> parameter since the baseline will be of type <strong>Host Extension</strong>.</p>
<pre class="brush: powershell;">

New-PatchBaseline -Name &quot;HP Offline Bundle for ESXi 4.1 U2 &quot; -Description &quot;HP Offline Bundle for ESXi 4.1 U2&quot; -IncludePatch (Get-Patch -SearchPhrase &quot;HP ESXi 4.1 Bundle 1.2-25&quot;) -TargetType Host -Static -Extension
</pre>
<p>The main advantage for me of deploying the HP Offline Bundle with Update Manager is that we can take advantage of Baseline Groups. As the name suggests Baseline Groups enable you to group together multiple and different types of baselines. Consequently in this instance we can place the ESXi and HP Offline Bundle upgrade into a Baseline Group and carry out the upgrade to 4.1 U2 in a single remediation task.</p>
<p><a href="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline81.png"><img class="aligncenter size-full wp-image-2252" title="HPOffline8" src="http://www.jonathanmedd.net/wp-content/uploads/2012/03/HPOffline81.png" alt="" width="532" height="127" /></a></p>
<p>There are similar upgrade packages for ESXi 5 from HP, so this process could also be used for that upgrade.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/03/including-the-hp-offline-bundle-as-part-of-an-upgrade-to-esxi-4-1-u2.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ESXi Syslog Server Check Plugin for vCheck6</title>
		<link>http://www.jonathanmedd.net/2012/03/esxi-syslog-server-check-plugin-for-vcheck6.html</link>
		<comments>http://www.jonathanmedd.net/2012/03/esxi-syslog-server-check-plugin-for-vcheck6.html#comments</comments>
		<pubDate>Mon, 05 Mar 2012 21:48:25 +0000</pubDate>
		<dc:creator>Jonathan Medd</dc:creator>
				<category><![CDATA[powercli]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[vmware]]></category>

		<guid isPermaLink="false">http://www.jonathanmedd.net/?p=2226</guid>
		<description><![CDATA[I remember back to a London VMUG long ago a presentation about differences to watch out for between ESX and ESXi during the version 3.5 days. The one that got most people looking around at each other saying &#8220;oops, I don&#8217;t think we knew that&#8221; was configuring a Syslog server for your ESXi servers. vCenter [...]]]></description>
			<content:encoded><![CDATA[<p>I remember back to a London VMUG long ago a presentation about differences to watch out for between ESX and ESXi during the version 3.5 days. The one that got most people looking around at each other saying &#8220;oops, I don&#8217;t think we knew that&#8221; was configuring a Syslog server for your ESXi servers. vCenter 5 now includes it&#8217;s own built in Syslog server so there&#8217;s no excuse. Alternatives, such as <a href="http://www.kiwisyslog.com/">Kiwi Syslog Server</a>, are available if you don&#8217;t want to use the vCenter 5 syslog server. There&#8217;s a lot more awareness about needing one now, but it has still burnt me in a couple of environments I have worked on recently, where there was a need to review logs after an issue and no central logging had been configured for the hosts in question.</p>
<p>So this additional plugin for vCenter will highlight any ESXi hosts which have not been configured with the correct Syslog server.</p>
<p>In a <a href="http://www.jonathanmedd.net/2012/02/adding-your-own-plugin-to-vcheck6.html">previous post</a> I detailed how to add your own plugin to vCheck 6. You can either do that for the below plugin, <a href="http://www.virtu-al.net/featured-scripts/vcheck/vcheck-plugins/">download it from the plugins section on Alan&#8217;s site</a> or it is also included as part of the <a href="http://www.virtu-al.net/2012/03/05/vcheck-updated-to-6-10/">vCheck 6.10 release</a>. There are now 70+ plugins for vCheck thanks to some great community contributions!</p>
<pre class="brush: powershell;">

$Title = &quot;Syslog Name&quot;
$Header =  &quot;Syslog Issues&quot;
$Comments = &quot;The following hosts do not have the correct Syslog settings which may cause issues if ESXi hosts experience issues and logs need to be investigated&quot;
$Display = &quot;Table&quot;
$Author = &quot;Jonathan Medd&quot;
$Version = 1.0

# Start of Settings
# The Syslog server which should be set on your hosts
$SyslogServer =&quot;SyslogServer&quot;
# End of Settings

@($VMH | Where-Object {$_.ExtensionData.Summary.Config.Product.Name -eq 'VMware ESXi'} | Select-Object Name,@{Name='SyslogServer';Expression = {($_ | Get-VMHostSysLogServer).Host}} | Where-Object {$_.SyslogServer -ne $syslogserver})
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.jonathanmedd.net/2012/03/esxi-syslog-server-check-plugin-for-vcheck6.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

