<?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>JJClements.co.uk</title>
	<atom:link href="http://www.jjclements.co.uk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jjclements.co.uk</link>
	<description>Clem&#039;s Technical Blog</description>
	<lastBuildDate>Tue, 15 Nov 2011 00:16:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>o2 change ring length for voicemail on the iPhone</title>
		<link>http://www.jjclements.co.uk/2010/10/27/o2-change-ring-length-for-voicemail-on-the-iphone/</link>
		<comments>http://www.jjclements.co.uk/2010/10/27/o2-change-ring-length-for-voicemail-on-the-iphone/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 00:18:58 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[o2]]></category>
		<category><![CDATA[service command]]></category>
		<category><![CDATA[voicemail]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=1432</guid>
		<description><![CDATA[Soon after playing with a friend's iPhone I was hooked. Then, to obtain my own handset, I was forced to change onto the o2 network because of the exclusivity deal they initially had with Apple to resell the handset in the UK. Since owning an iPhone, I honestly don't think I would ever consider purchasing [...]]]></description>
			<content:encoded><![CDATA[<p>Soon after playing with a friend's iPhone I was hooked. Then, to obtain my own handset, I was forced to change onto the o2 network because of the exclusivity deal they initially had with Apple to resell the handset in the UK. Since owning an iPhone, I honestly don't think I would ever consider purchasing a non Apple handset in the future! But, like all devices, even the iPhone has it's flaws. I had an issue recently when I tried to change the length of time my iPhone rings before voicemail activates.</p>
<p><span id="more-1432"></span></p>
<p>On older handsets I have been able to set the length of time the handset rings by manually choosing a length of time in seconds, usually in a settings menu. But, not on the iPhone. From what I can see, as of the iPhone 4 there is still no option to adjust the ringing time from anywhere in it's settings. Luckily, most service providers allow you to make these kind of user specific setting changes using service commands. To modify the length of time your handset rings before voicemail activates for any handset on o2, dial the following service command on your handset as though you are dialling a normal telephone number:</p>
<blockquote><p>
<strong>**61*901*11*XX#</strong>
</p></blockquote>
<p>Note: <strong>XX</strong> should be replaced by the time in seconds that you want the handset to ring for before voicemail activates. The value must be in multiples of 5 seconds. Values ranging from 05 to 30 seconds in length are acceptable. The default value is 15 seconds.</p>
<p>To turn voicemail on or off dial either of the following numbers:</p>
<p>Enable voicemail = <strong>1750</strong><br />
Disable voicemail = <strong>1760</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/10/27/o2-change-ring-length-for-voicemail-on-the-iphone/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BlackBerry attachment type cannot be viewed</title>
		<link>http://www.jjclements.co.uk/2010/10/25/blackberry-attachment-type-cannot-be-viewed/</link>
		<comments>http://www.jjclements.co.uk/2010/10/25/blackberry-attachment-type-cannot-be-viewed/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 00:37:58 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[BlackBerry]]></category>
		<category><![CDATA[Attachment Service]]></category>
		<category><![CDATA[BES]]></category>
		<category><![CDATA[firmware]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=1393</guid>
		<description><![CDATA[Since I recently changed employers, a new responsibility that I have undertaken is the upkeep/maintenance of a single BlackBerry Enterprise Server installation and the handsets used in conjunction with it. I had never owned a BlackBerry handset but I had looked at both BlackBerry server and handset technology in my previous role as a consideration [...]]]></description>
			<content:encoded><![CDATA[<p>Since I recently changed employers, a new responsibility that I have undertaken is the upkeep/maintenance of a single BlackBerry Enterprise Server installation and the handsets used in conjunction with it. I had never owned a BlackBerry handset but I had looked at both BlackBerry server and handset technology in my previous role as a consideration for mobile workers. Last week, I was given a <a rel="nofollow" href="http://uk.blackberry.com/devices/blackberrycurve8300" target="_blank">BlackBerry Curve 8310</a> handset by a user that reported they were unable to open any attachments - although in this case more specifically a PDF.</p>
<p><span id="more-1393"></span></p>
<p>I used the handset to attempt to open an PDF and surely enough I received the error:</p>
<blockquote><p>
<strong>This attachment type cannot be viewed on your device</strong>
</p></blockquote>
<p>Instinctively, I attempted to open a second and third PDF attachment, and even a Microsoft Word document just to make sure this wasn't a one off issue, it wasn't. I received the same error for all documents. Being unfamiliar with the OS of the BlackBerry handset I naturally began to look for an installed application that could be used to view the various attached documents, I couldn't find one. Comparing the applications list to a second fully functioning handset I noticed that the latter had <a rel="nofollow" href="http://appworld.blackberry.com/webstore/content/7638" target="_blank">Documents To Go</a> installed. Using <a rel="nofollow" href="http://uk.blackberry.com/services/appworld/download.jsp" target="_blank">BlackBerry App World</a> I installed <a rel="nofollow" href="http://appworld.blackberry.com/webstore/content/7638" target="_blank">Documents To Go</a> but this still did not resolve the issue.</p>
<p>After some time pondering over the issue, I naively decided to update the firmware of the handset to the latest version assuming this would restore all applications and features. This had certainly worked for Nokia Symbian and Apple iOS devices bearing similar problems in the past. I downloaded the latest (v4.5.0.302 at the time of writing) BlackBerry Handheld Software for the Curve 8310 (service provider specific - <a rel="nofollow" href="https://www.blackberry.com/Downloads/entry.do?code=1141938BA2C2B13F5505D7C424EBAE5F" target="_blank">Vodafone</a> in my case) and used it to update the handset. Again, after performing an Enterprise Activation on the device with the BES server I was still unable to open attachments.</p>
<p>I went back to the list of installed applications on the faulty handset and again compared it to the fully functioning device. I noticed what appeared to be a BlackBerry specific application was also missing from the non functioning handset. A quick search revealed that the missing <a rel="nofollow" href="http://docs.blackberry.com/en/admin/deliverables/7335/BB_Attachment_Service_224460_11.jsp" target="_blank">BlackBerry Attachment Service</a> was required by the handset to process attachments that had been converted on the BES:</p>
<blockquote><p>
The BlackBerry Attachment Service receives attachments that are embedded in messages from the messaging server, through the BlackBerry Messaging Agent. The BlackBerry Attachment Service also receives attachments that are accessed through links in the BlackBerry® Browser.
</p></blockquote>
<p>I used the Application Loader feature from within <a rel="nofollow" href="http://na.blackberry.com/eng/services/desktop/desktop_pc.jsp" target="_blank">BlackBerry Desktop Manager</a> software to install BlackBerry Attachment Service back onto the handset. To my surprise I was still unable to view any attachments. It wasn't until after I erased the handset (using: Options -->  Security Options --> General Settings --> Wipe Handheld) and then performed another Enterprise Activation that I was finally able to view attachments on the device through the BlackBerry Attachment Service.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/10/25/blackberry-attachment-type-cannot-be-viewed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 SP1 issues</title>
		<link>http://www.jjclements.co.uk/2010/10/24/exchange-2010-sp1-issues/</link>
		<comments>http://www.jjclements.co.uk/2010/10/24/exchange-2010-sp1-issues/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 22:31:31 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[applicationHost.config]]></category>
		<category><![CDATA[bindings]]></category>
		<category><![CDATA[bitness64]]></category>
		<category><![CDATA[cmdlet]]></category>
		<category><![CDATA[exppw.dll]]></category>
		<category><![CDATA[HomeMTA]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[OWA]]></category>
		<category><![CDATA[web.config]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=1233</guid>
		<description><![CDATA[With its recent release, I decided to apply Service Pack 1 to my Exchange 2010 installation. I had read about many of the new features it offered and I was more curious about the Outlook Web App (OWA) improvements than anything else. I set about extracting and running running the SP1 installer, installing any prerequisites [...]]]></description>
			<content:encoded><![CDATA[<p>With its recent release, I decided to apply <a rel="nofollow" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=50b32685-4356-49cc-8b37-d9c9d4ea3f5b" target="_blank">Service Pack 1</a> to my Exchange 2010 installation. I had read about many of the <a rel="nofollow" href="http://msexchangeteam.com/archive/2010/04/07/454533.aspx" target="_blank">new features</a> it offered and I was more curious about the Outlook Web App (OWA) improvements than anything else. I set about extracting and running running the SP1 installer, installing any <a rel="nofollow" href="http://technet.microsoft.com/en-us/library/bb691354.aspx" target="_blank">prerequisites</a> that the installer prompted me for before the upgrade. The upgrade lasted around 45 minutes and I was surprised to see that I was not prompted to restart the server post installation (even though I did out of habit!) Shortly afterwards I ran a few checks to make sure everything was OK and I began to notice a few peculiar issues.</p>
<p><span id="more-1233"></span></p>
<p><strong>Issue 1. Module exppw.dll could not be loaded</strong></p>
<p>The first thing that struck me when I went to test OWA was that it wasn't working. I host a few websites on the same server so I was quite shocked to see that none of them were actually functioning. For what it was worth - I had already restarted the server so an IISRESET probably wouldn't have done much good. I decided to check the Application Event Log and saw this:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/10/applicationlogexppwerror.png" alt="Exchange 2010 exppw.dll Application Event Log error" /></p>
<blockquote><p>
Source: IIS-W3SVC-WP<br />
Event ID: 2282<br />
Level: Error</p>
<p>Error: The Module DLL 'C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Owa\auth\exppw.dll' could not be loaded due to a configuration problem. The current configuration only supports loading images built for a x86 processor architecture. The data field contains the error number. To learn more about this issue, including how to troubleshooting this kind of processor architecture mismatch error, see http://go.microsoft.com/fwlink/?LinkId=29349.
</p></blockquote>
<p>I also noticed the following warning in the System Event Log:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/10/systemloglistnererror.png" alt="Exchange 2010 listner channel System Event Log error" /></p>
<blockquote><p>
Source: WAS<br />
Event ID: 5139<br />
Level: Warning</p>
<p>Error: A listener channel for protocol 'http' in worker process '5436' serving application pool 'jjclements.co.uk' reported a listener channel failure.  The data field contains the error number.
</p></blockquote>
<p>IIS was running, I could successfully Telnet into port 80 on the server. It appeared from the first (Application Event Log) error that IIS was trying to load a new module as part of the SP1 upgrade but couldn't. This was causing IIS to stop loading all of the sites that I had configured within it. I knew that since the release of SP1, Microsoft had released <a rel="nofollow" href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a371fa96-e85b-4a4f-8242-15d56595d0ec" target="_blank">Update Rollup 1</a> to fix a few of the <a rel="nofollow" href="http://support.microsoft.com/?kbid=2407028" target="_blank">issues</a> that SP1 brought with it. Out of best practice (and the hope that it may help my problem) I installed  Update Rollup 1. Unfortunately it didn't resolve the issue.</p>
<p>Since the error was reporting an issue with IIS loading an x64 compiled module on x86 architecture I decided to investigate which website(s) was attempting to load the module. My reasoning for this was that by default, OWA runs in it's own application pool from a virtual directory located within the Default Website on an IIS installation. Although I had configured other application pools (for the other websites I am hosting) to run with "Enable 32-Bit Applications" set to True, the default setting of False still applied for the MSExchangeOWAAppPool application pool (so it seemed logical to assume that more than one website was probably trying to load the same module):</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/10/iisowaapppooladvsettings.png" alt="Exchange 2010 MSExchangeOWAAppPool Advanced Settings" /></p>
<p>I used the IIS Manager to locate and then checked the <strong>web.config</strong> for the OWA virtual directory located:</p>
<blockquote><p>
<strong>C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Owa\web.config</strong>
</p></blockquote>
<p>Sure enough there was an entry in the web.config for the site to load the exppw module, and because the MSExchangeOWAAppPool was correctly configured with "Enable 32-Bit Applications" set to False this was not the cause of my problem. Since it seemed that IIS was attempting to load the module for other application pools configured to run as 32bit (and I knowingly had other websites configured to run as 32bit) the next logical step was to check the main 'root' configuration file for IIS - <strong>applicationHost.config</strong> located:</p>
<blockquote><p>
<strong>C:\Windows\System32\inetsrv\config\applicationHost.config</strong>
</p></blockquote>
<p>The applicationHost.config file is used to store IIS configuration including sites, virtual directories, general settings, logging, caching etc. A quick search through this file revealed the exppw module was also being loaded globally (from within the <strong>&lt;globalModules&gt;</strong> tag):</p>
<blockquote><p>
<strong>&lt;add name="exppw" image="C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Owa\auth\exppw.dll" /&gt;</strong>
</p></blockquote>
<p>I decided that I had a couple of options to fix this issue. The first was to stop IIS from loading the module globally by removing the entry from the applicationHost.config. I figured that this probably would have worked since the web.config for the MSExchangeOWAAppPool was loading it anyway. The second option I had was to make sure that the module was only ever loaded for an application pool when it's worker process architecture matched the architecture of the module that was being loaded. I chose the second option as I was concerned that modifying the applicationHost.config to prevent IIS from globally loading the exppw module may have caused issues if any of the other Exchange 2010 application pools were depending on the exppw module being loaded globally instead of from a local web.config.</p>
<p>IIS7 introduced the bitness32 and bitness64 preconditions to make sure that it will only load DLLs with the correct bitness in an application pool worker processes. Where specified, the bitness64 precondition is used by IIS to identify and then load modules only when the worker process is an x64 process - not if the worker process happens to be an x86 process.</p>
<p>I modified the applicationHost.config to reflect the bitness64 precondition for the exppw module:</p>
<blockquote><p>
<strong>&lt;add name="exppw" image="C:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Owa\auth\exppw.dll" preCondition="bitness64" /&gt;</strong>
</p></blockquote>
<p>Without even restarting IIS all of the websites that I host (including the Default Website and OWA application) started functioning again. The exppw module was now only being loaded where an application pool worker process was an x64 process.</p>
<p><strong>Issue 2. Default Website additional bindings</strong></p>
<p>While this didn't actually stop anything from working, the second problem that I happened to stumble across (when investigating Issue 1) was that the default website now had some additional, unconventional bindings:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/10/iisdefaultsitebindings.png" alt="Exchange 2010 default website bindings" /></p>
<p>It seemed that as well as the normal bindings allowing IIS to listen on ports 80 (http) and 443 (https) for all IP addresses on the server, the SP1 upgrade had added 2 additional bindings. Surprisingly, even though no host headers had been set, the additional bindings were also listening on ports 80 and 443 for the loopback address of 127.0.0.1. For consistency and just incase this caused any issues in the future, I removed the bindings. Seeing as no specific host headers were set for the new additional bindings I concluded that they would have been encompassed by the original 2 bindings anyway. A quick check revealed that none of my other websites had the additional bindings.</p>
<p><strong>Issue 3. Incorrect HomeMTA attribute</strong></p>
<p>Again, while this issue didn't actually appear to stop anything from working, the last problem I noticed was a consistent warning appearing in the Application Event Log. The warning was being generated at frequent intervals for each mailbox that I had configured within Exchange 2010:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/10/applicationloghomemtaerror.png" alt="Exchange 2010 default website bindings" /></p>
<blockquote><p>
Source: MSExchange ADAccess<br />
Event ID: 2937<br />
Level: Warning</p>
<p>Error: Process w3wp.exe () (PID=7276). Object [CN=James,CN=Users,DC=jjclements,DC=co,DC=uk]. Property [HomeMTA] is set to value [jjclements.co.uk/Configuration/Deleted Objects/Microsoft MTA<br />
DEL:75830fde-6ed2-4fe2-b91c-005d7f6b1e6d], it is pointing to the Deleted Objects container in Active Directory. This property should be fixed as soon as possible.
</p></blockquote>
<p>A quick search revealed that the HomeMTA user account attribute was now obsolete for Exchange 2010. Yet, for some bizarre reason Exchange 2010 was obviously still checking that the value was valid (and unfortunately logging a warning in the Application Event Log if it wasn't.)</p>
<p>I used ADSI Edit to check the attribute for one my user accounts and confirmed it was set to the Deleted Objects container. Even though I don't have lots of Exchange users, rather than use ADSI Edit to update the HomeMTA attribute manually for each and every mailbox user I wanted to update them collectively. I had read that the <a rel="nofollow" href="http://technet.microsoft.com/en-us/library/bb738148.aspx" target="_blank">Update-Recipient cmdlet</a> could be used to update user account attributes, including HomeMTA. So, from the Exchange Management Shell, I used the <a rel="nofollow" href="http://technet.microsoft.com/en-us/library/bb123685.aspx" target="_blank">Get-Mailbox cmdlet</a> to retrieve all the user accounts with a mailbox in my single Exchange 2010 database and then piped the results into the <a rel="nofollow" href="http://technet.microsoft.com/en-us/library/bb738148.aspx" target="_blank">Update-Recipient cmdlet</a>. The following command successfully updated the HomeMTA attribute for all user accounts that had a mailbox in my Exchange 2010 database and stopped the warning from appearing in the Application Event Log:</p>
<blockquote><p>
<strong>get-mailbox -database "&lt;databasename&gt;" | update-recipient</strong>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/10/24/exchange-2010-sp1-issues/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Exchange 2010 Recipient Filtering on a Hub Transport Server</title>
		<link>http://www.jjclements.co.uk/2010/09/23/exchange-2010-recipient-filtering-on-a-hub-transport-server/</link>
		<comments>http://www.jjclements.co.uk/2010/09/23/exchange-2010-recipient-filtering-on-a-hub-transport-server/#comments</comments>
		<pubDate>Thu, 23 Sep 2010 15:51:31 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Edge Transport]]></category>
		<category><![CDATA[Hub Transport]]></category>
		<category><![CDATA[NDR]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[recipient filtering]]></category>
		<category><![CDATA[spam]]></category>
		<category><![CDATA[Tar Pitting]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=1134</guid>
		<description><![CDATA[I have a sound understanding of Exchange server 2003 but skipped a whole generation by never really testing/playing with Exchange 2007. However, I recently undertook a server migration where I deployed Exchange 2010 and decommissioned an old Exchange 2003 server. I replaced the server like-for-like and so the Exchange 2010 server was also a single [...]]]></description>
			<content:encoded><![CDATA[<p>I have a sound understanding of Exchange server 2003 but skipped a whole generation by never really testing/playing with Exchange 2007. However, I recently undertook a server migration where I deployed Exchange 2010 and decommissioned an old Exchange 2003 server. I replaced the server like-for-like and so the Exchange 2010 server was also a single server operating in the domain.</p>
<p>Before hand, I decided to try a deployment on a test server just to see if I had any issues. The server is a single box that is also a Domain Controller. For testing purposes I also installed Exchange 2010 onto the same server. Initial installation and configuration was a breeze and I was soon sending and receiving email internally and externally. Upon investigation of some of the more granular Exchange configuration I soon had an issue when I tried to enable Recipient Filtering, there was simply no option to do so.</p>
<p><span id="more-1134"></span></p>
<p>Recipient Filtering can be used for a couple of reasons. The first is to filter/prevent emails from being sent to specific email addresses that do exist within your organisation. The second is to prevent your email server from processing emails sent into your organisation to email addresses that do not exist. This typically happens in a couple of different situations when: </p>
<p><strong>Scenario 1. A spammer targets 1000's of email addresses</strong></p>
<ul>
<li>Spammer sends 1000's of emails with different FROM addresses (victim's addresses)</li>
<li>Spammer sets the TO address as xxxx@yourdomain.com (non existent address in your organisation)</li>
<li>Your email server receives and processes the emails but cannot deliver them to a mailbox</li>
<li>Your email server replies to the 1000's of FROM addresses sending each 1 piece of NDR spam</li>
</ul>
<p><strong>Scenario 2. A spammer targets 1 email address 1000's of times</strong></p>
<ul>
<li>Spammer sends 1000's of emails with a common FROM addresses (victim's address)</li>
<li>Spammer sets the TO address as xxxx@yourdomain.com (non existent address in your organisation)</li>
<li>Your email server receives and processes the emails but cannot deliver them to a mailbox</li>
<li>Your email server replies to the FROM address sending it 1000's of pieces of NDR spam</li>
</ul>
<p><strong>Scenario 3. A spammer targets your email server</strong></p>
<ul>
<li>Spammer sends 1000's of emails with different TO addresses (which won't exist in some organisations)</li>
<li>Spammer sets the FROM address as xxxx@yourdomain.com (non existent address in your organisation)</li>
<li>Recipient email servers send an NDR to the FROM address (non existent address in your organisation)</li>
<li>Your server receives 1000's of pieces of NDR spam it then attempts to process and deliver</li>
</ul>
<p>By enabling Recipient Filtering you make sure that if your email server does receive an email for an address that does not exist within your organisation it is blocked during initial SMTP communication. Recipient Filtering is by far faster and more efficient than evaluating the mail after it is received and already in the mail queue. This means that:</p>
<ul>
<li>Your server can no longer be used to send NDR spam to other email servers (Scenario 1 &#038; 2)</li>
<li>Your server will experience a reduced load if it comes under an NDR spam attack (Scenario 3)</li>
</ul>
<p>The problem I had with Exchange 2010 was that I could not find where to configure Recipient Filtering! In Exchange 2003 it was configured under Global Settings --> Message Delivery. You then had to configure Advanced options on the SMTP Virtual Server and ensure the option for Apply Recipient Filter was applied. My Exchange 2010 installation did not have any such option(s) out of the box. It turns out the reason for this is that features of this nature are usually best suited to Exchange 2010 servers with the Edge Transport role installed. I attempted to modify the Exchange 2010 installation through Control Panel --> Programs and Features but the Edge Transport role was greyed out. An Exchange 2010 server with the Edge Transport role configured cannot have any other Exchange 2010 components installed, and since everything else was installed on my test server there was no way to enable the Edge Transport role.</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/09/exchange2010setup.png" alt="Exchange 2010 setup screen" /></p>
<p>After some <a rel="nofollow" href="http://www.amazon.co.uk/Microsoft-Exchange-Administrator-27s-Companion-PRO-Administrators/dp/0735625905/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1285233914&#038;sr=8-2" target="_blank">searching around</a> I found out that Recipient Filtering and a few other options like Sender ID are labelled as being Anti-spam features within Exchange 2010. I discovered that it is possible to install the Anti-spam feature (through the use of a PowerShell script) on an Exchange 2010 server configured with the Hub Transport role. This can be accomplished by:</p>
<ul>
<li>Open the Exchange Management Shell on the Exchange 2010 server</li>
<li>Change directory into:<br />
<blockquote><p><strong>C:\Program Files\Microsoft\Exchange Server\V14\Scripts</strong></p></blockquote>
</li>
<li>Run the following to install the Anti-spam option:<br />
<blockquote><p><strong>.\install-AntispamAgents.ps1</strong></p></blockquote>
</li>
<li>Run the following to restart the Microsoft Exchange Transport service:<br />
<blockquote><p><strong>restart-service msexchangetransport</strong></p></blockquote>
</li>
<li>Open the Exchange Management Console and check that the Anti-Spam tab is available under Organization Configuration --> Hub Transport</li>
</ul>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/09/exchange2010antispam.png" alt="Exchange Management Console Hub Transport Anti-spam" /></p>
<p>Now that the Anti-spam features are available and enabled for use, I needed to make sure that the Recipient Filtering was configured. By opening the properties on the Recipient Filtering feature I could see that the option to 'Block messages set to recipients that do not exist in the directory' was not enabled. I checked this option to enable it as required.</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/09/exchange2010recipientfiltering.png" alt="Recipient Filtering Properties" /></p>
<p>A quick <a rel="nofollow" href="http://support.microsoft.com/kb/153119" target="_blank">test using Telnet</a> and the server was no longer receiving emails for addresses that do not exist in my organisation. Of course, doing this has a drawback. There would be nothing to stop a malicious user from using an automated tool harvest legitimate addresses within my organisation by sending email to random email addresses until successful. Fortunately, Exchange 2010 has <a rel="nofollow" href="http://support.microsoft.com/kb/842851" target="_blank">Tar Pitting</a> functionality enabled out of the box. Tar Pitting is the practice of artificially delaying server responses for specific SMTP communication patterns that indicate high volumes of spam or other unwelcome messages. By default Exchange 2010 delays the response sent to an email server (where an attempt is made to send to an address that does not exist in your organisation) by 5 seconds. Tar Pitting therefore makes <a rel="nofollow" href="http://en.wikipedia.org/wiki/Directory_Harvest_Attack" target="_blank">directory harvest attacks</a> too costly to automate efficiently. I personally think a 5 second delay is sufficient to thwart most directory harvest attacks, although the delay can be adjusted as necessary through the Exchange Management Shell on the Exchange 2010 server.</p>
<p><em>Run the following to retrieve the current Tar Pit interval in seconds:</em><br />
<strong>Get-ReceiveConnector "Your Conector Name" | select tarpitinterval</strong></p>
<p><em>Run the following to change the current Tar Pit interval (to 10 seconds in this case):</em><br />
<strong>Set-ReceiveConnector "Your Conector Name" –TarpitInterval 00:00:10</strong></p>
<p><em>Run the following to disable Tar Pitting:</em><br />
<strong>Set-ReceiveConnector "Your Conector Name" –TarpitInterval 00:00:00</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/09/23/exchange-2010-recipient-filtering-on-a-hub-transport-server/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>vSphere convert VM IDE disk to SCSI disk</title>
		<link>http://www.jjclements.co.uk/2010/06/08/vsphere-convert-vm-ide-disk-to-scsi-disk/</link>
		<comments>http://www.jjclements.co.uk/2010/06/08/vsphere-convert-vm-ide-disk-to-scsi-disk/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 17:56:19 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[VMware]]></category>
		<category><![CDATA[Windows XP]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[SCSI]]></category>
		<category><![CDATA[VI Client]]></category>
		<category><![CDATA[VMDK]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=1027</guid>
		<description><![CDATA[I recently read a post by Duncan Epping over at Yellow Bricks where he tried to resize the VMDK of a Windows XP VM running on ESX\vSphere. When he used the VI Client to try and resize the VMDK he was actually unable to because it was ghosted out. By coincidence I had experienced the [...]]]></description>
			<content:encoded><![CDATA[<p>I recently read a <a rel="nofollow" href="http://www.yellow-bricks.com/2010/05/28/resizing-your-ide-virtual-harddisk" target="_blank">post</a> by Duncan Epping over at <a rel="nofollow" href="http://www.yellow-bricks.com" target="_blank">Yellow Bricks</a> where he tried to resize the VMDK of a Windows XP VM running on ESX\vSphere. When he used the VI Client to try and resize the VMDK he was actually unable to because it was ghosted out. By coincidence I had experienced the same problem a week before Duncan after building 5 Windows XP VMs for stress testing of a new SharePoint website. As Duncan mentioned, the only other time I had seen this happen was when a snapshot existed for the disk that needed to be resized. Quickly checking the VM's settings I noticed that by default, when you create a Virtual Machine using the 'Microsoft Windows XP Professional..." Guest Operating System container it actually attaches an IDE disk rather than a SCSI disk (Server 2003 and 2008 Guest Operating System containers use a SCSI disk by default.)</p>
<p><span id="more-1027"></span></p>
<p>Here are the default devices for the Windows XP Professional VM:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi1.png" alt="idetoscsi1.png" /></p>
<p>Since I had built the 5 Windows XP VMs from a template I had created, I decided to find a way to convert the IDE disk to a SCSI disk and update the template incase I needed to resize the OS disk in the future. The easiest way I found to do this was as follows:-</p>
<p>Firstly I made the following assumptions:</p>
<ul>
<li> I would need to add a SCSI Controller to the VM and install the drivers before booting from the VMDK (I have <a rel="nofollow" href="http://www.jjclements.co.uk/2007/11/02/moving-an-ide-hdd-to-new-hardware" target="_blank">seen cases</a> before where moving a HD to new hardware caused a BSOD)</li>
<li> If possible I would need to change the default Controller used for new VMDKs from IDE to SCSI</li>
<li> I wanted to use the LSI Logic SCSI Controller</li>
<li> I wanted to make the VMDK the first SCSI device (0:0) attached to the Controller</li>
</ul>
<p>So, with the VM powered OFF I edited the settings for it through the VI Client and added a new SCSI Device (by default it doesn't seem possible to simply add a SCSI Controller to a VM without also attaching a SCSI Device to it):</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi2.png" alt="idetoscsi2.png" /></p>
<p>I left the SCSI Device as being a <strong>CDROM</strong> and (optionally) changed the Virtual Device Node to <strong>SCSI (0:1)</strong> so that when I converted the existing disk and added it to the SCSI Controller it would be device <strong>SCSI (0:0)</strong>. I clicked Next and Finish but I didn't click OK to commit the changes:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi3.png" alt="idetoscsi3.png" /></p>
<p>Before clicking OK, I selected the SCSI Controller and changed it's type as appropriate. Then I clicked OK to commit the changes to the VM:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi4.png" alt="idetoscsi4.png" /></p>
<p>I powered on the VM and noticed that the Windows Found New Hardware Wizard prompted me to install the driver for the SCSI controller. I knew that the controller used is a <strong>LSI20320-R</strong> so I downloaded it from here:</p>
<p><a rel="nofollow" href="http://www.lsi.com/storage_home/products_home/host_bus_adapters/scsi_hbas/lsi20320r/index.html" target="_blank">LSI20320-R - Driver Download</a> <em>(Click the Support and Downloads tab)</em></p>
<p>I downloaded the appropriate driver and extracted it (for Windows XP 32bit I used <strong>LSI20320-R_xp_50700_01034132IT_1201800_1005239.zip</strong> and within that <strong>symmpi_wXP_1201800.zip</strong>.) Then I used the Found New Hardware Wizard to browse for and install the driver. Once the hardware installation completed I shut down the VM. The VM now had the SCSI controller installed and I was confident I would be able to boot from it.</p>
<p>I then located the datastore where the VM resides. For example:</p>
<p>/vmfs/volumes/&lt;datastore&gt;/&lt;vm&gt;/</p>
<p>You can use the Service Console or an SSH\SCP application to open the &lt;vm&gt;.vmdk (not the &lt;vm&gt;-flat.vmdk). I edited the following line:</p>
<blockquote><p>ddb.adapterType = "ide"</p></blockquote>
<p>For the LSI SCSI Controller I changed it to:</p>
<blockquote><p>ddb.adapterType = "lsilogic"</p></blockquote>
<p>After saving the file I used the VI Client to edit the VM settings. I selected the IDE disk and removed it. I then clicked OK to commit the changes.</p>
<p><strong>NOTE: Remember to only 'Remove from virtual machine' and NOT 'Remove from virtual machine and delete files from disk'</strong>:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi5.png" alt="idetoscsi5.png" /></p>
<p>Then I used the VI Client to edit the VM settings again and add the disk back. This time, because I had edited the .vmdk file to specify that the disk uses the LSI Logic Controller, it attaches the disk to this instead of the IDE Controller used previously:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi6.png" alt="idetoscsi6.png" /></p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi7.png" alt="idetoscsi7.png" /></p>
<p>The disk is added as device <strong>SCSI (0:0)</strong>:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi8.png" alt="idetoscsi8.png" /></p>
<p>I clicked Next and Finish to complete adding the disk. I then selected the CDROM (SCSI device 1) and removed it:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/06/idetoscsi9.png" alt="idetoscsi9.png" /></p>
<p>I clicked OK to commit the changes to the VM. I now had a VM using the LSI Logic SCSI Controller with the System OS disk connected to the Controller as device SCSI (0:0).</p>
<p>Since the VM had already booted with the LSI Logic Controller installed, when I powered on the VM Windows booted normally and was immediately accessible. Subsequently, any new virtual disks created for the VM are automatically created as SCSI disks and attached using the next available Virtual Device Node.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/06/08/vsphere-convert-vm-ide-disk-to-scsi-disk/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>IIS 500 internal server error when uploading file using ASP</title>
		<link>http://www.jjclements.co.uk/2010/05/24/iis-500-internal-server-error-when-uploading-file-using-asp/</link>
		<comments>http://www.jjclements.co.uk/2010/05/24/iis-500-internal-server-error-when-uploading-file-using-asp/#comments</comments>
		<pubDate>Mon, 24 May 2010 12:36:22 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Windows Server 2008]]></category>
		<category><![CDATA[ASP]]></category>
		<category><![CDATA[IIS]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=926</guid>
		<description><![CDATA[I recently came across a problem when uploading a document through an ASP application to an IIS 7.5 web server. When I attempted to upload the document I received an http 500 internal server error. It turns out the issue was caused by an IIS setting restricting the size of the entity-body of the ASP [...]]]></description>
			<content:encoded><![CDATA[<p>I recently came across a problem when uploading a document through an ASP application to an IIS 7.5 web server. When I attempted to upload the document I received an http 500 internal server error. It turns out the issue was caused by an IIS setting restricting the size of the entity-body of the ASP request.</p>
<p><span id="more-926"></span></p>
<p>When I checked the Application log in the event viewer I was presented with the error:</p>
<blockquote><p>
Source: Active Server Pages<br />
Event ID: 5<br />
Level: Error</p>
<p>Error: File &lt;url to upload.asp&gt; &lt;line number&gt; Operation not Allowed.
</p></blockquote>
<p>The error indicated that there was an issue with the ASP configuration for the website hosting the application so I had a quick look at the ASP settings in the IIS Manager:</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/05/asp.png" alt="asp.png" /></p>
<p>In the settings for ASP I noticed the following option:</p>
<p>Limits Properties --> Maximum Requesting Entity Body Limit</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/05/aspsettings.png" alt="aspsettings.png" /></p>
<p>The default value for this property is 200000 bytes which is just under 0.2 megabytes. The file I was trying to upload was just over 3 megabytes so I needed to increase this value. I changed it to 10485760 bytes which is 10 megabytes. Upon retrying to upload the document through the ASP application I was successful. No restart of IIS was necessary.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/05/24/iis-500-internal-server-error-when-uploading-file-using-asp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows 7 clean installation using upgrade disc 0xC004F061</title>
		<link>http://www.jjclements.co.uk/2010/04/15/windows-7-clean-installation-using-upgrade-disc-0xc004f061/</link>
		<comments>http://www.jjclements.co.uk/2010/04/15/windows-7-clean-installation-using-upgrade-disc-0xc004f061/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 14:40:07 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Registry]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[upgrade]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=862</guid>
		<description><![CDATA[When I received my Windows 7 upgrade media for a new HP laptop I wanted to perform a clean install of the OS. During the installation process, I was able to perform a clean install using the Custom (advanced) option when prompted for the 'type of installation' to proceed with. Selecting the Custom (advanced) option [...]]]></description>
			<content:encoded><![CDATA[<p>When I received my Windows 7 upgrade media for a new HP laptop I wanted to perform a clean install of the OS. During the installation process, I was able to perform a clean install using the Custom (advanced) option when prompted for the 'type of installation' to proceed with.</p>
<p><span id="more-862"></span></p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/04/win7installtype.png" alt="win7installtype.png" /></p>
<p>Selecting the Custom (advanced) option allowed me to remove existing partitions and install Windows 7 as I would have expected to out of the box, instead of having to perform a Vista to Windows 7 upgrade. After successful installation of the OS I installed the remaining drivers and then tried to activate. During the activation process I was prompted with an error.</p>
<blockquote><p>
The following failure occurred while trying to use the product key:</p>
<p>Code:<br />
0xC004F061</p>
<p>Description:<br />
The Software Licensing Service determined that this specified product key can only be used for upgrading, not for clean installations.
</p></blockquote>
<p>To activate Windows 7 after I used the upgrade disc to perform a clean installation I changed one registry key:</p>
<p>HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE</p>
<p>Value: <strong>MediaBootInstall</strong>= <strong>1</strong> changed to <strong>0</strong></p>
<p>After modifying the registry key I was able to activate successfully.</p>
<p>Download the regkey change - <a href="http://www.jjclements.co.uk/wp-content/uploads/2010/04/mediabootinstall.reg" target="_blank" rel="nofollow">HERE</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/04/15/windows-7-clean-installation-using-upgrade-disc-0xc004f061/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Server time synchronization</title>
		<link>http://www.jjclements.co.uk/2010/04/15/windows-server-time-synchronization/</link>
		<comments>http://www.jjclements.co.uk/2010/04/15/windows-server-time-synchronization/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 09:08:58 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Command Line]]></category>
		<category><![CDATA[Registry]]></category>
		<category><![CDATA[Windows Server 2003]]></category>
		<category><![CDATA[Windows Server 2008]]></category>
		<category><![CDATA[domain]]></category>
		<category><![CDATA[nt5ds]]></category>
		<category><![CDATA[ntp]]></category>
		<category><![CDATA[pdc]]></category>
		<category><![CDATA[time]]></category>
		<category><![CDATA[w32time]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=781</guid>
		<description><![CDATA[Something I have frequently seen implemented incorrectly on Windows Server domains is time synchronization. Many admins think that by creating a GPO with a modified policy setting for 'Configure Windows NTP Client' (and using it to address an NTP source) all Servers and Clients will synchronize their time with that source. This isn't entirely true [...]]]></description>
			<content:encoded><![CDATA[<p>Something I have frequently seen implemented incorrectly on Windows Server domains is time synchronization. Many admins think that by creating a GPO with a modified policy setting for 'Configure Windows NTP Client' (and using it to address an NTP source) all Servers and Clients will synchronize their time with that source. This isn't entirely true and there is actually a time hierarchy that should be considered when implementing time synchronization for each domain.</p>
<p><span id="more-781"></span></p>
<p>As far as W32Time (the Windows time service) is concerned, at the topmost level within the domain is the domain controller on which the <a rel="nofollow" href="http://en.wikipedia.org/wiki/Primary_Domain_Controller#Windows_2000:_PDC_emulation" target="_blank">PDC Emulator</a> Flexible Single Master Operation <a rel="nofollow" href="http://en.wikipedia.org/wiki/Flexible_single_master_operation" target="_blank">(FSMO)</a> role resides. This can be configured to synchronize it's time with a <a rel="nofollow" href="http://www.pool.ntp.org/en" target="_blank">reliable external time source</a>. By default all other domain controllers internally synchronize their time with the PDC Emulator. Similarly all domain member client computers synchronize their time with the domain controller that authenticates them.</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/04/timesync.png" alt="timesync.png" /></p>
<p>Configuring the domain controller where the PDC Emulator role resides should be the only computer in the domain that requires any manual intervention to have the precise time on all domain client computers.</p>
<p>To find out which server the PDC Emulator role resides on open the Active Directory Users and Computers (ADUC) snap-in. Then right click on your domain and select 'Operations Masters'. Browsing the PDC tab will show you where the PDC Emulator role currently resides.</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/04/pdcemulator.png" alt="pdcemulator.png" /></p>
<p>On the domain controller where the PDC Emulator resides you can configure it to synchronize its time with an external source by using the following command:</p>
<p><strong>net time /setsntp:&lt;ip/dns&gt;</strong></p>
<p>Use the following example to set multiple external time sources to sync with:</p>
<p><strong>net time /setsntp:"0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org"</strong></p>
<p>You can also configure this manually by modifying the following registry key:</p>
<p>HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters</p>
<p><strong>NtpServer=&lt;ip/dns&gt;</strong><br />
<strong>Type=NT5DS</strong> change this to <strong>Type=NTP</strong></p>
<p>After making the above changes restart the W32Time service by issuing the following commands at a command prompt:</p>
<p><strong>net stop w32time</strong><br />
<strong>net start w32time</strong></p>
<p>NOTE: If you don't configure the PDC Emulator to synchronize its time with an external source it will simply use its own (CMOS) clock. Doing so will occasionally cause an error to appear in the event log on the server that resembles the following:</p>
<blockquote><p>
Event Type: Error<br />
Event Source: W32Time<br />
Event Category: None<br />
Event ID: 12</p>
<p>Event description: Time Provider NtpClient: This machine is configured to use the domain hierarchy to determine its time source, but it is the PDC emulator for the domain at the root of the forest, so there is no machine above it in the domain hierarchy to use as a time source.
</p></blockquote>
<p>NOTE: If you experience a client with time synchronization problems ensure that it has the correct time zone set. If needed, the time service can be reset using the following commands:</p>
<p><strong>net stop w32time</strong><br />
<strong>w32tm /unregister</strong><br />
<strong>w32tm /register</strong><br />
<strong>net start w32time</strong><br />
<strong>w32tm /resync</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/04/15/windows-server-time-synchronization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>KiXtart script to shrink VMDK for smaller VCB backups</title>
		<link>http://www.jjclements.co.uk/2010/04/13/kixtart-script-to-shrink-vmdk-for-smaller-vcb-backups/</link>
		<comments>http://www.jjclements.co.uk/2010/04/13/kixtart-script-to-shrink-vmdk-for-smaller-vcb-backups/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 17:00:30 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VCB]]></category>
		<category><![CDATA[VMDK]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=738</guid>
		<description><![CDATA[When I first started using VMware ESX I was testing VMware Consolidated Backup (VCB) to dump my virtual machines to a staging area before being copied offsite. I noticed that one of the VMs had a VMDK attached that as far as the OS (Windows Server 2003) was concerned with had all of the data [...]]]></description>
			<content:encoded><![CDATA[<p>When I first started using VMware ESX I was testing VMware Consolidated Backup (VCB) to dump my virtual machines to a staging area before being copied offsite. I noticed that one of the VMs had a VMDK attached that as far as the OS (Windows Server 2003) was concerned with had all of the data deleted on that volume. After initiating a VCB dump (backup) on the VM I noticed that the VMDK that was dumped to my staging area strangely appeared to contain data. The VMDK size was considerably larger than it should have been for a disk that Windows reported as containing zero data.</p>
<p><span id="more-738"></span></p>
<p>After some investigation I realised that when VCB performed a dump of the VMDK it was correctly dumping the used space. It then dawned on me that when Windows was deleting files from the disk it was actually only deleting the 'pointer' to the data and not the data itself. When VCB was dumping the VMDK it was correctly dumping all blocks of the disk that contained data. I then started looking for a way to clean blocks that were no longer being used but still contained remnants from deleted files. I found a tool called <a rel="nofollow" href="http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx" target="_blank">SDelete</a> that writes zero's where the disk contains free space as seen by the Operating System.</p>
<p>I incorporated SDelete into a basic script that also uses Defrag (the Windows utility for defragmenting disks) to tidy up volumes and potentially reduce the size of backups when using VCB.</p>
<p>The script first enumerates all local drives on the VM. For each drive that Windows deems as being a local disk the script then defragments the volume and uses SDelete to zero any free space that the disk may have. The script is written in <a rel="nofollow" href="http://www.kixtart.org" target="_blank">KiXtart</a>.</p>
<p>Here is the script:</p>
<p>;=====================================================<br />
;=====================================================<br />
;<br />
; ENUMERATE LOCAL DRIVES - DEFRAG &#038; ZERO EMPTY BLOCKS<br />
;<br />
;=====================================================<br />
;=====================================================</p>
<p>;=====================Accept EULA=====================<br />
WriteValue("HKCU\Software\Sysinternals\SDelete", "EulaAccepted", "1", "REG_DWORD")</p>
<p>$Drives = GetObject("winmgmts:").ExecQuery("select Name,DriveType from Win32_LogicalDisk")</p>
<p>For Each $Drive in $Drives</p>
<p>		If $Drive.DriveType = 3</p>
<p>			SHELL "%comspec% /c " + chr(34) + "defrag.exe " + $Drive.name + " -f" + chr(34)<br />
			SHELL "%comspec% /c " + chr(34) + "sdelete.exe -c " + $Drive.name + chr(34)</p>
<p>		EndIf</p>
<p>Next</p>
<p>;=====================================================</p>
<p>I use this by placing the folder CleanDisk (download link below) in<strong> C:\Program Files</strong>. I create a Windows scheduled task to run either KIX32.exe or WKIX32.exe on say a monthly basis.</p>
<p>NOTE: If you have multiple VMs with VMDKs residing on the same physical storage you will probably want to consider staggering the schedules to reduce I/O on the physical disks.</p>
<p>Download the script and necessary files - <a rel="nofollow" href="http://www.jjclements.co.uk/wp-content/uploads/2010/04/cleandisk.zip" target="_blank">HERE</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/04/13/kixtart-script-to-shrink-vmdk-for-smaller-vcb-backups/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to move your iTunes Library</title>
		<link>http://www.jjclements.co.uk/2010/04/13/how-to-move-your-itunes-library/</link>
		<comments>http://www.jjclements.co.uk/2010/04/13/how-to-move-your-itunes-library/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 11:55:18 +0000</pubDate>
		<dc:creator>James Clements</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[iTunes]]></category>

		<guid isPermaLink="false">http://www.jjclements.co.uk/?p=722</guid>
		<description><![CDATA[I'm personally not a big fan of iTunes but I recently noticed an issue where a couple of users had installed it and it had defaulted to saving their music library to their Home Directory. This usually wouldn't be an issue for most people but I redirect Home Directories to a share on a file [...]]]></description>
			<content:encoded><![CDATA[<p>I'm personally not a big fan of iTunes but I recently noticed an issue where a couple of users had installed it and it had defaulted to saving their music library to their Home Directory. This usually wouldn't be an issue for most people but I redirect Home Directories to a share on a file server. In order to mitigate against what could have potentially been a requirement for additional disk storage I decided that advising users to change the location of their iTunes library from the default (which unknown to the users was a file server) to a local location on their computer was the best option. Here is a generalized version of the instructions I gave to network users.</p>
<p><span id="more-722"></span></p>
<p>1) Open iTunes and navigate through the menu to: <strong>Edit --> Preferences --> Advanced (tab)</strong></p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/04/itunes1.png" alt="itunes1.png" /></p>
<p>2) Click the change button and change the folder location to something like <strong>D:\My Music</strong> (you will need to create this folder.) Click <strong>OK</strong> to close the screen.</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/04/itunes2.png" alt="itunes12.png" /></p>
<p>3) Close iTunes altogether.</p>
<p>4) <strong>Copy</strong> your iTunes folder from <strong>C:\Documents and Settings\(username)\My Documents\My Music</strong> to <strong>D:\My Music.</strong></p>
<p>5) Hold down the <strong>SHIFT</strong> key and click the iTunes shortcut.</p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/04/itunes3.png" alt="itunes3.png" /></p>
<p>6) Click on <strong>Choose Library</strong> (to point iTunes to the new library) and browse to <strong>D:\My Music\iTunes\iTunes Library.itl.</strong> Once you have selected the file <strong>iTunes Library.itl</strong> click <strong>Open.</strong></p>
<p><img src="http://www.jjclements.co.uk/wp-content/uploads/2010/04/itunes4.png" alt="itunes4.png" /></p>
<p>7) Once you have opened iTunes using the library in the new location of <strong>D:\My Music\iTunes</strong> you can remove the <strong>old copy</strong> located in <strong>C:\Documents and Settings\(username)\My Documents\My Music.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jjclements.co.uk/2010/04/13/how-to-move-your-itunes-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

