<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1294685061820866959</id><updated>2026-09-20T23:39:53.250+12:00</updated><category term="PowerShell"/><category term=".NET Programming"/><category term="C#"/><category term=".NET CLR"/><category term="Linux"/><category term="Networking"/><category term="TFS"/><category term="Git"/><category term="Silverlight"/><category term="Visual Studio"/><category term="SQL Server"/><category term="WCF"/><category term="Web Development"/><category term="Continuous Integration / Build"/><category term="MSBuild"/><category term="Security"/><category term="Virtualisation"/><category term="WinDbg"/><category term="ASP.NET MVC"/><category term="Azure"/><category term="C++"/><category term="Static Code Analysis"/><category term="Boost"/><category term="FitNesse"/><category term="Imaging"/><category term="Javascript/EcmaScript"/><category term="MSTest"/><category term="Power"/><category term="ReSharper (R#)"/><category term="Server Core"/><category term="TDD"/><category term="WPF"/><category term="WiX"/><category term="Windows 8"/><category term="Windows Mobile Development"/><category term="jQuery"/><title type='text'>Random.GetBlogEntry()</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default?max-results=999&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>178</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>999</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7644384269054692790</id><published>2014-01-30T21:31:00.000+13:00</published><updated>2014-01-30T21:31:04.197+13:00</updated><title type='text'>Narrowing down high CPU usage in svchost.exe</title><content type='html'>I recently had a machine with high CPU usage in a shared service (svchost.exe). Xperf pointed at hardware interrupts being processed by ACPI.SYS, but I still wasn&#39;t sure which service was causing the ACPI.SYS calls because the DLL is loaded into svchost.exe, which hosts more than 10 services. This is the technique I used to temporarily split those services into their own service processes.&lt;br /&gt;
&lt;br /&gt;
The following steps need to be run from within a PowerShell console with administrative privileges.&lt;br /&gt;

&lt;ol&gt;
&lt;li&gt;Save a list of all running shared services:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:ps&quot;&gt;Get-Service | ? ServiceType -eq Win32ShareProcess | ? Status -eq Running | select -expand Name &amp;gt; SharedServices.txt&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Configure those shared services to launch into their own processes:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:ps&quot;&gt;cat SharedServices.txt | % { sc.exe config $_ type=own }&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Reboot to restart all services&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Have a look at the services to see which is using the CPU (in my case, it was the Windows Management Instrumentation service).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Restore the original state:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush:ps&quot;&gt;cat SharedServices.txt | % { sc.exe config $_ type=share }&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7644384269054692790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2014/01/narrowing-down-high-cpu-usage-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7644384269054692790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7644384269054692790'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2014/01/narrowing-down-high-cpu-usage-in.html' title='Narrowing down high CPU usage in svchost.exe'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2875659221225679255</id><published>2013-12-24T18:23:00.001+13:00</published><updated>2013-12-24T18:23:21.617+13:00</updated><title type='text'>Running Ubuntu full screen under Hyper V 2012</title><content type='html'>There is no way through the GUI to configure the screen resolution of an Ubuntu guest to run full screen when running under Hyper V 2012 (on Server 2012 / 2012 R2 or Windows 8 / 8.1).&lt;br /&gt;
&lt;br /&gt;
One way to get Ubuntu running full screen is to hard-code the resolution of your monitor as a Linux kernel parameter. My monitor runs at 1680x1050, so I made the following changes to my Ubuntu 13.10 guest:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Edit the grub configuration file, for example: &lt;pre&gt;sudo vi /etc/default/grub&lt;/pre&gt;
&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Find the line starting with GRUB_CMDLINE_LINUX_DEFAULT, and add &quot;video=hyperv_fb:1680x1050&quot; (or your custom resolution) in between the quotes. For example:&amp;nbsp;&lt;pre&gt;GRUB_CMDLINE_LINUX_DEFAULT=&quot;quiet splash video=hyperv_fb:1680x1050&quot;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Save and exit&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Run&amp;nbsp;&lt;pre&gt;sudo update-grub&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Restart your computer&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
If you get an error dialog warning about not being able to apply the video mode when logging into the GUI, use the Ubuntu control panel to change the screen resolution to your chosen custom resolution.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2875659221225679255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/12/running-ubuntu-full-screen-under-hyper.html#comment-form' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2875659221225679255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2875659221225679255'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/12/running-ubuntu-full-screen-under-hyper.html' title='Running Ubuntu full screen under Hyper V 2012'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6091455042468516800</id><published>2013-11-20T22:08:00.000+13:00</published><updated>2013-11-20T22:08:30.748+13:00</updated><title type='text'>System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1</title><content type='html'>&lt;p&gt;I ran into a problem recently that seemed very familiar because I am sure I have had encountered it before. So, once I re-solved it, I decided I would write a blog entry in the hope that I will find this post when I next run into the issue in a few years&#39; time.&lt;/p&gt;

&lt;p&gt;
The problem manifested itself in the simple scenario below: I serialised a simple object into UTF-8 XML and then tried to parse the result using XDocument.Parse. 
&lt;/p&gt;

&lt;pre class=&quot;brush:csharp&quot;&gt;
    public class SimpleClass
    {
        public string SomeProperty { get; set; }
        public int AnotherProperty { get; set; }
    }

    [TestMethod]
    public void Given_a_simple_object_When_serialised_to_XML_and_deserialised_Then_it_should_not_throw_an_exception()
    {
        var someObject = new SimpleClass  { SomeProperty = &quot;Abc&quot;, AnotherProperty = 42 };

        using (var memoryStream = new MemoryStream())
        using (var xmlTextWriter = new XmlTextWriter(memoryStream, Encoding.UTF8))
        {
            var serialiser = new XmlSerializer(someObject.GetType());
            serialiser.Serialize(xmlTextWriter, someObject);

            var utf8Xml = Encoding.UTF8.GetString(memoryStream.ToArray());
            XDocument.Parse(utf8Xml);   //fails at this point with exception System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1
        }
    }
&lt;/pre&gt;

&lt;p&gt;The document in utf8Xml seems fine:
&lt;pre class=&quot;brush:plain&quot;&gt;﻿&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;&amp;lt;SimpleClass xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;&amp;lt;SomeProperty&gt;Abc&amp;lt;/SomeProperty&gt;&amp;lt;AnotherProperty&gt;42&amp;lt;/AnotherProperty&gt;&amp;lt;/SimpleClass&gt;&lt;/pre&gt;
However, the test fails when trying to parse the XML.&lt;/p&gt;


&lt;p&gt;I found the cause of the problem to be the byte order mark (BOM) added to the start of the UTF-8 string. The solution was to construct a new instance of UTF8Encoding rather than using the static Encoding.UTF8. One of the the UTF8Encoding constructor overloads takes a parameter encoderShouldEmitUTF8Identifier. Set this to false, and everything works!&lt;/p&gt;

&lt;p&gt;This is the passing test:&lt;/p&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;
    public class SimpleClass
    {
        public string SomeProperty { get; set; }
        public int AnotherProperty { get; set; }
    }

    [TestMethod]
    public void Given_a_simple_object_When_serialised_to_XML_and_deserialised_Then_it_should_not_throw_an_exception()
    {
        var someObject = new SimpleClass  { SomeProperty = &quot;Abc&quot;, AnotherProperty = 42 };

        using (var memoryStream = new MemoryStream())
        using (var xmlTextWriter = new XmlTextWriter(memoryStream, new UTF8Encoding(false, true)))
        {
            var serialiser = new XmlSerializer(someObject.GetType());
            serialiser.Serialize(xmlTextWriter, someObject);

            var utf8Xml = Encoding.UTF8.GetString(memoryStream.ToArray());
            XDocument.Parse(utf8Xml);
        }
    }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6091455042468516800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/11/systemxmlxmlexception-data-at-root.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6091455042468516800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6091455042468516800'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/11/systemxmlxmlexception-data-at-root.html' title='System.Xml.XmlException: Data at the root level is invalid. Line 1, position 1'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1556922882049475962</id><published>2013-11-14T07:29:00.000+13:00</published><updated>2013-11-14T07:29:12.795+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><category scheme="http://www.blogger.com/atom/ns#" term="Server Core"/><title type='text'>Get a list of missing updates on Server Core</title><content type='html'>If you want to get a list of Windows Updates that haven&#39;t been installed on Windows Core (or any machine for that matter where you may want to use the command line), the following PowerShell one-liner will work:

&lt;pre class=&quot;brush:ps&quot;&gt;
(New-Object -ComObject Microsoft.Update.Searcher).Search(&quot;IsInstalled=0 and Type=&#39;Software&#39;&quot;).Updates | select LastDeploymentChangeTime, Title | ft -AutoSize
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1556922882049475962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/11/get-list-of-missing-updates-on-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1556922882049475962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1556922882049475962'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/11/get-list-of-missing-updates-on-server.html' title='Get a list of missing updates on Server Core'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4758196399441547781</id><published>2013-11-08T21:18:00.002+13:00</published><updated>2013-12-16T06:22:09.315+13:00</updated><title type='text'>Installing Jekyll on Windows</title><content type='html'>Installing Jekyll on Windows is trivially easy if you already have &lt;a href=&quot;http://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt; on your machine.

Run the following PowerShell one-liner and you’ll be set up in no time!


&lt;pre class=&quot;brush:ps&quot;&gt;cup python; cup ruby1.9; cup ruby.devkit.ruby193; gem install jekyll; gem install wdm; gem uninstall pygments.rb; gem install pygments.rb --version &quot;=0.5.0&quot;&lt;/pre&gt;
 
Now you just need to learn Jekyll by starting here: &lt;a href=&quot;http://jekyllrb.com/docs/usage/&quot;&gt;http://jekyllrb.com/docs/usage/&lt;/a&gt;.

Bear in mind that there are &lt;a href=&quot;https://github.com/mojombo/jekyll/pull/1387&quot;&gt;some issues&lt;/a&gt; with Jekyll on Windows because it is not an officially supported platform.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4758196399441547781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/11/installing-jekyll-on-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4758196399441547781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4758196399441547781'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/11/installing-jekyll-on-windows.html' title='Installing Jekyll on Windows'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7272025189216418004</id><published>2013-10-26T07:45:00.002+13:00</published><updated>2013-10-26T07:47:31.857+13:00</updated><title type='text'>Angularjs directive documentation</title><content type='html'>It looks like the Angular documentation for directives has changed, but unfortunately a lot of valuable information has been lost in the process. I reproduce part of the original documentation below:
&lt;br /&gt;
(source: &lt;a href=&quot;http://code.angularjs.org/1.0.7/docs/guide/directive&quot;&gt;http://code.angularjs.org/1.0.7/docs/guide/directive&lt;/a&gt;)
&lt;br /&gt;
&lt;br /&gt;
&lt;hr&gt;
&lt;br /&gt;
&lt;h2 id=&quot;directivedefinitionobject&quot; style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 24px; line-height: 36px; margin: 1em 0px 0px; text-rendering: optimizelegibility;&quot;&gt;
Directive Definition Object&lt;/h2&gt;
&lt;div style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px; margin-bottom: 9px;&quot;&gt;
The directive definition object provides instructions to the&amp;nbsp;&lt;a href=&quot;http://code.angularjs.org/1.0.7/docs/api/ng.$compile&quot; style=&quot;color: #0088cc; text-decoration: none;&quot;&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;compiler&lt;/code&gt;&lt;/a&gt;. The attributes are:&lt;/div&gt;
&lt;ul style=&quot;background-color: white; color: #333333; font-family: &#39;Helvetica Neue&#39;, Helvetica, Arial, sans-serif; font-size: 13px; line-height: 18px; list-style-image: initial; list-style-position: initial; margin: 0px 0px 9px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;name&lt;/code&gt;&amp;nbsp;- Name of the current scope. Optional and defaults to the name at registration.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;priority&lt;/code&gt;&amp;nbsp;- When there are multiple directives defined on a single DOM element, sometimes it is necessary to specify the order in which the directives are applied. The&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;priority&lt;/code&gt;&amp;nbsp;is used to sort the directives before their&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;compile&lt;/code&gt;&amp;nbsp;functions get called. Higher&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;priority&lt;/code&gt;&amp;nbsp;goes first. The order of directives within the same priority is undefined.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;terminal&lt;/code&gt;&amp;nbsp;- If set to true then the current&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;priority&lt;/code&gt;&amp;nbsp;will be the last set of directives which will execute (any directives at the current priority will still execute as the order of execution on same&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;priority&lt;/code&gt;&amp;nbsp;is undefined).&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;scope&lt;/code&gt;&amp;nbsp;- If set to:&lt;/div&gt;
&lt;ul style=&quot;list-style: disc; margin: 0px 0px 0px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;true&lt;/code&gt;&amp;nbsp;- then a new scope will be created for this directive. If multiple directives on the same element request a new scope, only one new scope is created. The new scope rule does not apply for the root of the template since the root of the template always gets a new scope.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;{}&lt;/code&gt;&amp;nbsp;(object hash) - then a new &#39;isolate&#39; scope is created. The &#39;isolate&#39; scope differs from normal scope in that it does not prototypically inherit from the parent scope. This is useful when creating reusable components, which should not accidentally read or modify data in the parent scope.&lt;br /&gt;
The &#39;isolate&#39; scope takes an object hash which defines a set of local scope properties derived from the parent scope. These local properties are useful for aliasing values for templates. Locals definition is a hash of local scope property to its source:&lt;/div&gt;
&lt;ul style=&quot;list-style: disc; margin: 0px 0px 0px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;@&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;@attr&lt;/code&gt;&amp;nbsp;- bind a local scope property to the value of DOM attribute. The result is always a string since DOM attributes are strings. If no&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;attr&lt;/code&gt;&amp;nbsp;name is specified then the attribute name is assumed to be the same as the local name. Given&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&lt;widget my-attr=&quot;hello {{name}}&quot;&gt;&lt;/widget&gt;&lt;/code&gt;&amp;nbsp;and widget definition of&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;scope: { localName:&#39;@myAttr&#39; }&lt;/code&gt;, then widget scope property&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localName&lt;/code&gt;&amp;nbsp;will reflect the interpolated value of&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;hello {{name}}&lt;/code&gt;. As the&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;name&lt;/code&gt;&amp;nbsp;attribute changes so will the&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localName&lt;/code&gt;&amp;nbsp;property on the widget scope. The&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;name&lt;/code&gt;&amp;nbsp;is read from the parent scope (not component scope).&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;=&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;=attr&lt;/code&gt;&amp;nbsp;- set up bi-directional binding between a local scope property and the parent scope property of name defined via the value of the&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;attr&lt;/code&gt;&amp;nbsp;attribute. If no&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;attr&lt;/code&gt;&amp;nbsp;name is specified then the attribute name is assumed to be the same as the local name. Given&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&lt;widget my-attr=&quot;parentModel&quot;&gt;&lt;/widget&gt;&lt;/code&gt;&amp;nbsp;and widget definition of&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;scope: { localModel:&#39;=myAttr&#39; }&lt;/code&gt;, then widget scope property&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localModel&lt;/code&gt;&amp;nbsp;will reflect the value of&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;parentModel&lt;/code&gt;&amp;nbsp;on the parent scope. Any changes to&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;parentModel&lt;/code&gt;&amp;nbsp;will be reflected in&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localModel&lt;/code&gt;&amp;nbsp;and any changes in&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localModel&lt;/code&gt;&amp;nbsp;will reflect in&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;parentModel&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&amp;amp;&lt;/code&gt;&amp;nbsp;or&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&amp;amp;attr&lt;/code&gt;&amp;nbsp;- provides a way to execute an expression in the context of the parent scope. If no&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;attr&lt;/code&gt;&amp;nbsp;name is specified then the attribute name is assumed to be the same as the local name. Given&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&lt;widget my-attr=&quot;count = count + value&quot;&gt;&lt;/widget&gt;&lt;/code&gt;&amp;nbsp;and widget definition of&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;scope: { localFn:&#39;&amp;amp;myAttr&#39; }&lt;/code&gt;, then isolate scope property&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localFn&lt;/code&gt;&amp;nbsp;will point to a function wrapper for the&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;count = count + value&lt;/code&gt;expression. Often it&#39;s desirable to pass data from the isolated scope via an expression and to the parent scope, this can be done by passing a map of local variable names and values into the expression wrapper fn. For example, if the expression is&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;increment(amount)&lt;/code&gt;&amp;nbsp;then we can specify the amount value by calling the&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localFn&lt;/code&gt;&amp;nbsp;as&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;localFn({amount: 22})&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;controller&lt;/code&gt;&amp;nbsp;- Controller constructor function. The controller is instantiated before the pre-linking phase and it is shared with other directives if they request it by name (see&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;require&lt;/code&gt;&amp;nbsp;attribute). This allows the directives to communicate with each other and augment each other&#39;s behavior. The controller is injectable with the following locals:&lt;/div&gt;
&lt;ul style=&quot;list-style: disc; margin: 0px 0px 0px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;$scope&lt;/code&gt;&amp;nbsp;- Current scope associated with the element&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;$element&lt;/code&gt;&amp;nbsp;- Current element&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;$attrs&lt;/code&gt;&amp;nbsp;- Current attributes object for the element&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;$transclude&lt;/code&gt;&amp;nbsp;- A transclude linking function pre-bound to the correct transclusion scope:&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;function(cloneLinkingFn)&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
To avoid errors after minification the bracket notation should be used:&lt;/div&gt;
&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;-webkit-box-shadow: rgb(251, 251, 252) 40px 0px 0px inset, rgb(236, 236, 240) 41px 0px 0px inset; background-color: #f7f7f9; border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; border-top-left-radius: 4px; border-top-right-radius: 4px; border: 1px solid rgb(225, 225, 232); box-shadow: rgb(251, 251, 252) 40px 0px 0px inset, rgb(236, 236, 240) 41px 0px 0px inset; font-family: Menlo, Monaco, &#39;Courier New&#39;, monospace; font-size: 12.025px; margin-bottom: 18px; padding: 8px; white-space: pre-wrap; word-break: break-all; word-wrap: break-word;&quot;&gt;&lt;ol class=&quot;linenums&quot; style=&quot;list-style-image: initial; list-style-position: initial; margin: 0px 0px 0px 33px; padding: 0px;&quot;&gt;
&lt;li class=&quot;L0&quot; style=&quot;color: #bebec5; padding-left: 12px; text-shadow: rgb(255, 255, 255) 0px 1px 0px;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;str&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;$scope&#39;&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;str&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;$element&#39;&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;str&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;$attrs&#39;&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;str&quot; style=&quot;color: #dd1144;&quot;&gt;&#39;$transclude&#39;&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kwd&quot; style=&quot;color: #1e347b;&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt;$scope&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; $element&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; $attrs&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; $transclude&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;color: #48484c;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;color: #93a1a1;&quot;&gt;}]&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;require&lt;/code&gt;&amp;nbsp;- Require another controller be passed into current directive linking function. The&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;require&lt;/code&gt;&amp;nbsp;takes a name of the directive controller to pass in. If no such controller can be found an error is raised. The name can be prefixed with:&lt;/div&gt;
&lt;ul style=&quot;list-style: disc; margin: 0px 0px 0px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;?&lt;/code&gt;&amp;nbsp;- Don&#39;t raise an error. This makes the require dependency optional.&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;^&lt;/code&gt;&amp;nbsp;- Look for the controller on parent elements as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;restrict&lt;/code&gt;&amp;nbsp;- String of subset of&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;EACM&lt;/code&gt;&amp;nbsp;which restricts the directive to a specific directive declaration style. If omitted directives are allowed on attributes only.&lt;/div&gt;
&lt;ul style=&quot;list-style: disc; margin: 0px 0px 0px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;E&lt;/code&gt;&amp;nbsp;- Element name:&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&lt;my-directive&gt;&lt;/my-directive&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;A&lt;/code&gt;&amp;nbsp;- Attribute:&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&lt;div my-directive=&quot;exp&quot;&gt;
&lt;/div&gt;
&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;C&lt;/code&gt;&amp;nbsp;- Class:&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&lt;div class=&quot;my-directive: exp;&quot;&gt;
&lt;/div&gt;
&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;M&lt;/code&gt;&amp;nbsp;- Comment:&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&lt;!-- directive: my-directive exp --&gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;template&lt;/code&gt;&amp;nbsp;- replace the current element with the contents of the HTML. The replacement process migrates all of the attributes / classes from the old element to the new one. See the&amp;nbsp;&lt;a href=&quot;http://code.angularjs.org/1.0.7/docs/guide/directive#Components&quot; style=&quot;color: #0088cc; text-decoration: none;&quot;&gt;Creating Components&lt;/a&gt;&amp;nbsp;section below for more information.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;templateUrl&lt;/code&gt;&amp;nbsp;- Same as&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;template&lt;/code&gt;&amp;nbsp;but the template is loaded from the specified URL. Because the template loading is asynchronous the compilation/linking is suspended until the template is loaded.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;replace&lt;/code&gt;&amp;nbsp;- if set to&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;true&lt;/code&gt;&amp;nbsp;then the template will replace the current element, rather than append the template to the element.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;transclude&lt;/code&gt;&amp;nbsp;- compile the content of the element and make it available to the directive. Typically used with&lt;a href=&quot;http://code.angularjs.org/1.0.7/docs/api/ng.directive:ngTransclude&quot; style=&quot;color: #0088cc; text-decoration: none;&quot;&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;ngTransclude&lt;/code&gt;&lt;/a&gt;. The advantage of transclusion is that the linking function receives a transclusion function which is pre-bound to the correct scope. In a typical setup the widget creates an&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;isolate&lt;/code&gt;&amp;nbsp;scope, but the transclusion is not a child, but a sibling of the&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;isolate&lt;/code&gt;&amp;nbsp;scope. This makes it possible for the widget to have private state, and the transclusion to be bound to the parent (pre-&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;isolate&lt;/code&gt;) scope.&lt;/div&gt;
&lt;ul style=&quot;list-style: disc; margin: 0px 0px 0px 25px; padding: 0px;&quot;&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;true&lt;/code&gt;&amp;nbsp;- transclude the content of the directive.&lt;/li&gt;
&lt;li&gt;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;&#39;element&#39;&lt;/code&gt;&amp;nbsp;- transclude the whole element including any directives defined at lower priority.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;compile&lt;/code&gt;: This is the compile function described in the section below.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style=&quot;margin-bottom: 9px;&quot;&gt;
&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;link&lt;/code&gt;: This is the link function described in the section below. This property is used only if the&amp;nbsp;&lt;code style=&quot;background-color: inherit; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: none; color: inherit; font-size: inherit; padding: 0px;&quot;&gt;compile&lt;/code&gt;&amp;nbsp;property is not defined.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7272025189216418004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/10/angularjs-directive-documentation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7272025189216418004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7272025189216418004'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/10/angularjs-directive-documentation.html' title='Angularjs directive documentation'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4083272389233262917</id><published>2013-08-20T12:44:00.001+12:00</published><updated>2013-11-20T22:19:50.597+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Installing meld or p4merge as diff / merge tool for Git on Windows</title><content type='html'>&lt;h3&gt;Meld&lt;/h3&gt;
The following PowerShell uses &lt;a href=&quot;http://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt; to install &lt;a href=&quot;http://meldmerge.org/&quot;&gt;meld&lt;/a&gt; and configures it as the diff and merge tool for Git. Note that meld is an officially supported diff tool in Git for Windows.

&lt;pre class=&quot;brush:ps&quot;&gt;
cinst meld

git config --global diff.tool meld
git config --global merge.tool meld

git config --global mergetool.meld.keeptemporaries false
git config --global mergetool.meld.trustExitCode false
git config --global mergetool.meld.keepbackup false&lt;/pre&gt;

&lt;h3&gt;P4Merge (Perforce Merge)&lt;/h3&gt;
The following PowerShell uses &lt;a href=&quot;http://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt; to install &lt;a href=&quot;http://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools&quot;&gt;p4merge&lt;/a&gt; and configures it as the diff and merge tool for Git. Note that p4merge is an officially supported diff tool in Git for Windows.

&lt;pre class=&quot;brush:ps&quot;&gt;
cinst p4merge

git config --global diff.tool p4merge
git config --global merge.tool p4merge

git config --global mergetool.p4merge.keeptemporaries false
git config --global mergetool.p4merge.trustExitCode false
git config --global mergetool.p4merge.keepbackup false
&lt;/pre&gt;

&lt;h3&gt;Semantic Merge&lt;/h3&gt;
If you&#39;re coding in C#, it may be worth using &lt;a href=&quot;http://www.semanticmerge.com/&quot;&gt;Semantic Merge&lt;/a&gt; (also installable via &lt;a href=&quot;http://chocolatey.org/&quot;&gt;Chocolatey&lt;/a&gt;).
Note that this set of commands sets up the PlasticSCM merge tool as the fall-back when not merging C#.

&lt;pre class=&quot;brush:ps&quot;&gt;
cinst SemanticMerge

git config --global diff.tool semantic
git config --global merge.tool semantic

$semanticMergeUserPath = Resolve-Path ~\AppData\local\PlasticSCM4\semanticmerge\semanticmergetool.exe
git config --global difftool.semantic.cmd (&#39;&#39;&#39;&#39; + $semanticMergeUserPath + &#39;&#39;&#39; -d=\&quot;$LOCAL\&quot; -s=\&quot;$REMOTE\&quot; -edt=\&quot;mergetool.exe -d=\&quot;\&quot;@sourcefile\&quot;\&quot; -dn=\&quot;\&quot;@sourcesymbolic\&quot;\&quot; -s=\&quot;\&quot;@destinationfile\&quot;\&quot; -sn=\&quot;\&quot;@destinationsymbolic\&quot;\&quot; -t=\&quot;\&quot;@filetype\&quot;\&quot; -i=\&quot;\&quot;@comparationmethod\&quot;\&quot; -e=\&quot;\&quot;@fileencoding\&quot;\&quot;\&quot;&#39;)
git config --global mergetool.semantic.cmd (&#39;&#39;&#39;&#39; + $semanticMergeUserPath + &#39;&#39;&#39; -b=\&quot;$BASE\&quot; -d=\&quot;$LOCAL\&quot; -s=\&quot;$REMOTE\&quot; -r=\&quot;$MERGED\&quot; -l=csharp -emt=\&quot;mergetool.exe -b=\&quot;\&quot;@basefile\&quot;\&quot; -bn=\&quot;\&quot;@basesymbolic\&quot;\&quot; -s=\&quot;\&quot;@sourcefile\&quot;\&quot; -sn=\&quot;\&quot;@sourcesymbolic\&quot;\&quot; -d=\&quot;\&quot;@destinationfile\&quot;\&quot; -dn=\&quot;\&quot;@destinationsymbolic\&quot;\&quot; -r=\&quot;\&quot;@output\&quot;\&quot; -t=\&quot;\&quot;@filetype\&quot;\&quot; -i=\&quot;\&quot;@comparationmethod\&quot;\&quot; -e=\&quot;\&quot;@fileencoding\&quot;\&quot;\&quot; -edt=\&quot;mergetool.exe  -s=\&quot;\&quot;@sourcefile\&quot;\&quot; -sn=\&quot;\&quot;@sourcesymbolic\&quot;\&quot; -d=\&quot;\&quot;@destinationfile\&quot;\&quot; -dn=\&quot;\&quot;@destinationsymbolic\&quot;\&quot; -t=\&quot;\&quot;@filetype\&quot;\&quot; -i=\&quot;\&quot;@comparationmethod\&quot;\&quot; -e=\&quot;\&quot;@fileencoding\&quot;\&quot;\&quot;&#39;)

git config --global mergetool.semantic.keeptemporaries false
git config --global mergetool.semantic.trustExitCode false
git config --global mergetool.semantic.keepbackup false
&lt;/pre&gt;

&lt;h3&gt;Other merge tools&lt;/h3&gt;
&lt;p&gt;You can see which diff tools are supported natively by git by running the following command:&lt;/p&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;git difftool --tool-help&lt;/pre&gt;
&lt;p&gt;You&#39;ll see something like the following result:&lt;/p&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
&#39;git difftool --tool-&amp;lt;tool&gt;&#39; may be set to one of the following:
  gvimdiff
  gvimdiff2
  vimdiff
  vimdiff2

The following tools are valid, but not currently available:
  araxis
  bc3
  codecompare
  defaults
  deltawalker
  diffuse
  ecmerge
  emerge
  kdiff3
  kompare
  meld
  opendiff
  p4merge
  tkdiff
  vim
  xxdiff

Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4083272389233262917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/08/installing-meld-as-diff-merge-tool-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4083272389233262917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4083272389233262917'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/08/installing-meld-as-diff-merge-tool-for.html' title='Installing meld or p4merge as diff / merge tool for Git on Windows'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2997162618487299400</id><published>2013-08-03T22:31:00.000+12:00</published><updated>2013-11-10T07:11:02.741+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Multiple recipients with SmtpClient in .NET</title><content type='html'>When sending a quick email, for example to notify of a PowerShell task failure, the simplest &lt;I&gt;System.Net.Mail.SmtpClient&lt;/I&gt; method to use is usually this one:
&lt;br /&gt;

&lt;pre class=&quot;brush:csharp&quot;&gt;
&lt;span style=&quot;color: blue;&quot;&gt;public&lt;/span&gt;&amp;nbsp;void&amp;nbsp;Send(&lt;br /&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: blue;&quot;&gt;from&lt;/span&gt;,&lt;br /&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt;&amp;nbsp;recipients,&lt;br /&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt;&amp;nbsp;subject,&lt;br /&gt; &lt;span style=&quot;color: blue;&quot;&gt;string&lt;/span&gt;&amp;nbsp;body&lt;br /&gt;)&lt;/pre&gt;
&lt;br/&gt;

The parameter name &lt;I&gt;recipients&lt;/I&gt; implies that it is possible to send the email to more than one recipient - but the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/h1s04he7.aspx&quot;&gt;documentation&lt;/a&gt; does not say how. I tried separating the addresses with a semicolon, but that failed with the following error:

&lt;br/&gt;
&lt;pre&gt;
&quot;Send&quot; with &quot;4&quot; argument(s): &quot;An invalid character was found in the mail header: &#39;;&#39;.&quot;
&lt;/pre&gt;

The correct separator to use, which I only found out by trawling through the .NET source with ILSpy, is a comma (,).</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2997162618487299400/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/08/multiple-recipients-with-smtpclient-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2997162618487299400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2997162618487299400'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/08/multiple-recipients-with-smtpclient-in.html' title='Multiple recipients with SmtpClient in .NET'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7819605815076947196</id><published>2013-07-29T11:02:00.001+12:00</published><updated>2013-07-29T11:05:24.610+12:00</updated><title type='text'>Finding the quietest time to do disruptive maintenance with IIS</title><content type='html'>Some changes to production environments may be much simpler if a little downtime is acceptable (such as migrating hosting providers). Using hard data to find that time to determine the impact on customers is possible using IIS logs and the LogParser tool.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;Get hold of the IIS logs from all production servers and copy them into a single folder e.g.&amp;nbsp;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Server1&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;W3SVC1&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;ex12345.log&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Server2&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;W3SVC1&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;ex12345.log&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;li&gt;Download and install LogParser, if you don&#39;t have it.&lt;/li&gt;
&lt;li&gt;Run the following PowerShell from within the log folder root:
&lt;pre class=&quot;brush:ps&quot;&gt;&amp;amp; &#39;C:\Program Files (x86)\Log Parser 2.2\LogParser.exe&#39; -i:iisw3c -recurse:-1 &quot;select to_localtime(to_timestamp(date, quantize(time, 3600))) as LocalTimeBlock, count(*) as Count into Logs.csv from *.log where date is not null and `&quot;cs(User-Agent)`&quot; not like &#39;%pingdom%&#39; group by LocalTimeBlock&quot;&lt;/pre&gt;
This query converts all dates and times into one hour blocks int local time and excludes requests from Pingdom, which we use for uptime monitoring.
&lt;/li&gt;
&lt;li&gt;Load the generated Log.csv in Excel and create a scatter plot from the two columns.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7819605815076947196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/07/finding-quietest-time-to-do-disruptive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7819605815076947196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7819605815076947196'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/07/finding-quietest-time-to-do-disruptive.html' title='Finding the quietest time to do disruptive maintenance with IIS'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1248173534735894845</id><published>2013-07-20T20:06:00.002+12:00</published><updated>2013-07-20T20:06:34.263+12:00</updated><title type='text'>Latency timings for various Azure datacentres.</title><content type='html'>I have published a tool that &#39;pings&#39; various Azure datacentres around the world from your browser to see which have the lowest / highest latency. This obviously is most useful if most of your customers are in a single location, but I suspect that scenario is quite common.
&lt;br /&gt;
&lt;br /&gt;

The tool can be found at &lt;a href=&quot;http://azureping.info/&quot;&gt;http://azureping.info&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1248173534735894845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/07/latency-timings-for-various-azure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1248173534735894845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1248173534735894845'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/07/latency-timings-for-various-azure.html' title='Latency timings for various Azure datacentres.'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-118979558266049829</id><published>2013-07-17T13:21:00.002+12:00</published><updated>2013-07-17T13:34:59.627+12:00</updated><title type='text'>Disable the &quot;Attach Security Warning&quot; dialog box</title><content type='html'>When remote debugging with Visual Studio, you may get an &quot;Attach Security Warning&quot; dialog for every process you want to attach to. There is no obvious way to stop this from popping up, and it can be quite frustrating when remote debugging several application pools. Microsoft&#39;s rationale for the security warning is &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms241736(v=vs.110).aspx&quot;&gt;here&lt;/a&gt;.
&lt;br&gt;
&lt;br&gt;For those who want to silence this dialog forever, run the following PowerShell one-liner:

&lt;pre class=&quot;brush:ps&quot;&gt;
taskkill /IM devenv.exe; while(get-process -ea 0 devenv) { Write-Host &quot;Waiting for Visual Studio to shut down...&quot;; Start-Sleep -sec 1 }; ls HKCU:\Software\Microsoft\VisualStudio | % { $_.PSPath + &quot;\Debugger&quot; } | % { sp -ea 0 $_ DisableAttachSecurityWarning -Type DWORD -Value 1 }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/118979558266049829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/07/disable-attach-security-warning-dialog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/118979558266049829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/118979558266049829'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/07/disable-attach-security-warning-dialog.html' title='Disable the &quot;Attach Security Warning&quot; dialog box'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2973177282762100197</id><published>2013-07-16T16:51:00.001+12:00</published><updated>2013-07-16T16:51:50.288+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Format a drive from PowerShell</title><content type='html'>After adding a new drive to a Windows Server 2012 Core machine, you will need to format it and assign a drive letter. This is how to do it.&lt;br /&gt;
&lt;br /&gt;

&lt;pre class=&quot;brush:ps&quot;&gt;
$disk = Get-Disk | ? PartitionStyle -eq Raw
$disk | Initialize-Disk
$part = New-Partition -DiskNumber $disk.Number -UseMaximumSize
Initialize-Volume -Partition $part -FileSystem ReFS
Add-PartitionAccessPath -DiskNumber $disk.Number -PartitionNumber $part.PartitionNumber -AccessPath D:\&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2973177282762100197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/07/format-drive-from-powershell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2973177282762100197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2973177282762100197'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/07/format-drive-from-powershell.html' title='Format a drive from PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4816661216190306482</id><published>2013-07-04T22:41:00.000+12:00</published><updated>2013-07-04T22:42:01.378+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>Overhead of using async and await in C# 4.5</title><content type='html'>&lt;p&gt;Although asynchronous code is touted as allowing for more scalable architectures through less threads (a la nodejs), there must be a latency overhead to this technology. While the total throughput of the system may be higher, an individual request must be slowed down due to increased context switching.&lt;/p&gt;

&lt;p&gt;I was interested in seeing how much of a performance impact there is to using the new Async pattern in .NET (and simplified using the fantastic async / await keywords in C#).&lt;p&gt;

&lt;p&gt;I wrote an application that compares the FileStream.Read and FileStream.ReadAsync calls in a tight loop, reading one byte into a byte array 1 million times. Tweaking the file size and other parameters resulted in very different results, although the synchronous call was always at least five times faster than the asynchronous call.&lt;/p&gt;

&lt;h3&gt;Results&lt;/h3&gt;
&lt;pre&gt;
File length: 1000000 bytes.
Running 100 loops of Preload...
Done in 0 ms.
Running 1000000 loops of Asynchronous...
Done in 2452 ms.
Running 1000000 loops of Synchronous...
Done in 17 ms.
&lt;/pre&gt;

&lt;h3&gt;Conclusion:&lt;/h3&gt;
&lt;p&gt;In this single test scenario, using this particular method of file access, the overhead of using asynchronous calls for very fast operations is significant in that an operation that takes around 20 ms synchronously runs at 2500 ms asynchronously (125 times slower). In practice, this is an overhead of 0.00000248 seconds (2.5 μs) per asynchronous call. Whether this overhead is acceptable, and whether the reduction in system resources that asynchronous calls are supposed to yield is worth this slowdown is application dependent.&lt;/p&gt;

&lt;h3&gt;Source code&lt;/h3&gt;
&lt;script src=&quot;https://gist.github.com/nzbart/5926566.js&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4816661216190306482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/07/overhead-of-using-async-and-await-in-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4816661216190306482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4816661216190306482'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/07/overhead-of-using-async-and-await-in-c.html' title='Overhead of using async and await in C# 4.5'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7265444532897868321</id><published>2013-06-19T14:07:00.000+12:00</published><updated>2013-06-19T14:07:39.041+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Ping using PowerShell</title><content type='html'>To &#39;ping&#39; a machine using PowerShell, use Test-Connection:

&lt;pre class=&quot;brush:ps&quot;&gt;
Test-Connection -Quiet machine
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7265444532897868321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/06/ping-using-powershell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7265444532897868321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7265444532897868321'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/06/ping-using-powershell.html' title='Ping using PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8280465095470119819</id><published>2013-05-17T06:27:00.000+12:00</published><updated>2013-05-21T21:27:23.141+12:00</updated><title type='text'>Why can&#39;t I copy and paste a URL from a Gmail subject line?</title><content type='html'>Sometimes I send myself quick emails with only the URL of a website pasted into the subject line. Unfortunately, I have been frustrated by not being able to copy and paste those URLs from Gmail into a browser from Internet Explorer 10. This does not seem to affect Chrome.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;TL;DR&lt;/h3&gt;
&lt;script&gt;
goToGoogleMailSubjectUriClickHandler = function () {
  var input = document.getElementById(&#39;bj-gmailUrl&#39;)
  var original = input.value;
  var decoded = original.replace(&#39;\u200B&#39;, &#39;&#39;);
  window.location = decoded;
  return false;
};
&lt;/script&gt;
&lt;script src=&quot;JavaScript.js&quot;&gt;&lt;/script&gt;
&lt;form onsubmit=&quot;return goToGoogleMailSubjectUriClickHandler()&quot;&gt;
    If you are having trouble copying and pasting a URL from a Gmail subject line, paste it here and click &lt;em&gt;Go&lt;/em&gt;:&lt;br/&gt;
    &lt;input size=&quot;120&quot; id=&quot;bj-gmailUrl&quot; /&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Go&quot;/&gt;
&lt;/form&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Detail&lt;/h3&gt;
&lt;br /&gt;
Steps to reproduce:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Visit a website:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-__1RsGFLNhQiOdnt3jJOP9XfIV7HLLbmYZwu9zkmndlVDygtMlLm9EGQS_gSzL662GNVvy6a2CpNA-Y7X-XQI3yehJucj7Bl_my_EUAAwvfD87wHEM262pR3iTnCBBL3UFNaS8qKc3I/s1600/example2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-__1RsGFLNhQiOdnt3jJOP9XfIV7HLLbmYZwu9zkmndlVDygtMlLm9EGQS_gSzL662GNVvy6a2CpNA-Y7X-XQI3yehJucj7Bl_my_EUAAwvfD87wHEM262pR3iTnCBBL3UFNaS8qKc3I/s320/example2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Copy the URL and send it to your Gmail account as the subject line.&lt;/li&gt;
&lt;li&gt;Open your Gmail account and copy the URL from the email you just sent yourself:
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWn7meP6K1mgVE16PECpQaGQfzEmzQMbXWfxWaRlGVqPJ00YPuaFWLau7edAHCpPIwjnAvJLbp0Q-9frK00lkDWorKdQc5p2pBWFpT7hjIEA1l78_39qn7693iYWvtkmZ8q8rXtOTtn9A/s1600/example3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWn7meP6K1mgVE16PECpQaGQfzEmzQMbXWfxWaRlGVqPJ00YPuaFWLau7edAHCpPIwjnAvJLbp0Q-9frK00lkDWorKdQc5p2pBWFpT7hjIEA1l78_39qn7693iYWvtkmZ8q8rXtOTtn9A/s1600/example3.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Paste this URL into your browser&#39;s address bar.&lt;/li&gt;
&lt;li&gt;See the result:
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYgLCpa8-_lMrXA81yZvT5wPxV6lEcP0KGVq7gAzXfWRK4r2NKGOSZ5c9EEt1IyQvU4ZsFxhirSnWv5akxlvP4s108G6J4zVush3FTeJkLgk5TzJXFEJXrVLUygrAbC5qW9smQ-mMzCs/s1600/example4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;129&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicYgLCpa8-_lMrXA81yZvT5wPxV6lEcP0KGVq7gAzXfWRK4r2NKGOSZ5c9EEt1IyQvU4ZsFxhirSnWv5akxlvP4s108G6J4zVush3FTeJkLgk5TzJXFEJXrVLUygrAbC5qW9smQ-mMzCs/s320/example4.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Why does this happen?&lt;/h3&gt;
&lt;p&gt;It seems that Google must be inserting a special character called a &lt;em&gt;Zero Width Space&lt;/em&gt; (Unicode 8203) at certain positions in the URL to prevent copying and pasting. I can only presume that this is some kind of security measure. For example, the URL I used in this example &lt;em&gt;actually&lt;/em&gt; looked like this behind the scenes: http://www.iana.org/?domains/re?served, where the question marks (?) are the special zero width space characters.&lt;/p&gt;

&lt;p&gt;Point to note:&amp;nbsp;the DNS&amp;nbsp;protocol seems&amp;nbsp;to ignore this character. Pasting &lt;a href=&quot;http://example.iana.org/&quot;&gt;http://example.iana.org/&lt;/a&gt; (which mapped to &lt;a href=&quot;http://exa/?mple.iana.?org/&quot;&gt;http://exa?mple.iana.?org/&lt;/a&gt;&amp;nbsp;when I tried it) into the browser will work fine. &lt;/p&gt;

The value is not a copy / paste artefact; it is in the DOM node value:
&lt;pre class=&quot;brush:js&quot;&gt;
document.getElementById(&#39;:np&#39;).firstChild.nodeValue 
&quot;http://www​.iana.org/​domains/re​served&quot;
document.getElementById(&#39;:np&#39;).firstChild.nodeValue.length 
39

&#39;http://www.iana.org/domains/reserved&#39;.length 
36
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8280465095470119819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/05/why-cant-i-copy-and-paste-url-from.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8280465095470119819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8280465095470119819'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/05/why-cant-i-copy-and-paste-url-from.html' title='Why can&#39;t I copy and paste a URL from a Gmail subject line?'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-__1RsGFLNhQiOdnt3jJOP9XfIV7HLLbmYZwu9zkmndlVDygtMlLm9EGQS_gSzL662GNVvy6a2CpNA-Y7X-XQI3yehJucj7Bl_my_EUAAwvfD87wHEM262pR3iTnCBBL3UFNaS8qKc3I/s72-c/example2.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4473134914411563284</id><published>2013-04-29T23:24:00.001+12:00</published><updated>2013-04-29T23:28:02.998+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Retrospectively timing long-running operations in PowerShell</title><content type='html'>Sometimes I run an operation that takes longer than I expect to execute, but once it is finished, the only way to see how long it did take is to run it again in Measure-Command or use some other timing mechanism. This PowerShell prompt preserves your existing prompt (for example PoshGit) and tacks on an execution time for each and every command you run.

&lt;pre&gt;
C:\Demo [master]&gt; Start-Sleep 3
00:00:03.0048920
C:\Demo [master]&gt; Start-Sleep 5
00:00:04.9974939
C:\Demo [master]&gt;
00:00:00.0004274
C:\Demo [master]&gt;
&lt;/pre&gt;

&lt;script src=&quot;https://gist.github.com/nzbart/5481021.js&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4473134914411563284/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/04/retrospectively-timing-long-running.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4473134914411563284'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4473134914411563284'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/04/retrospectively-timing-long-running.html' title='Retrospectively timing long-running operations in PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1806156704103965090</id><published>2013-04-25T20:40:00.002+12:00</published><updated>2013-04-25T20:42:53.231+12:00</updated><title type='text'>Old SysInternals source code</title><content type='html'>&lt;p&gt;The source code for &lt;a href=&quot;http://SysInternals.com&quot;&gt;SysInternals&lt;/a&gt; tools is no longer published, although it was for some of the tools before Microsoft purchased them.&lt;/p&gt;

&lt;p&gt;The source code can be downloaded for those tools at the &lt;a href=&quot;http://web.archive.org/web/20060829135539/http://www.sysinternals.com/SourceCode.html&quot;&gt;Internet Archive&lt;/a&gt;.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1806156704103965090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/04/old-sysinternals-source-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1806156704103965090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1806156704103965090'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/04/old-sysinternals-source-code.html' title='Old SysInternals source code'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2035081512554492128</id><published>2013-04-22T21:44:00.001+12:00</published><updated>2013-04-22T21:46:10.980+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Launch NUnit GUI with multiple assemblies</title><content type='html'>&lt;p&gt;The NUnit GUI does not support loading multiple assemblies from the command line, so this PowerShell function creates an NUnit project file that can be specified as a command line argument. Just provide a file name for the new project file (must end in .nunit or NUnit will barf) and an array of assembly files to load. &lt;/p&gt;

&lt;p&gt;As a bonus, this project file will load your assemblies in multiple process mode, which means that any associated assembly configuration files will be correctly loaded.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/anonymous/5433593.js&quot;&gt;&lt;/script&gt;

</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2035081512554492128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/04/the-nunit-gui-does-not-support-loading.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2035081512554492128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2035081512554492128'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/04/the-nunit-gui-does-not-support-loading.html' title='Launch NUnit GUI with multiple assemblies'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5720696064486235566</id><published>2013-03-04T21:49:00.000+13:00</published><updated>2013-03-04T21:49:41.369+13:00</updated><title type='text'>&quot;I believe you&#39;re the owner of...&quot; spam</title><content type='html'>&lt;p&gt;I recently received the following email (with domain names changed to protect the innocent), which is notable due to the absence of the usual grammar mistakes that give away most scams. The most obvious giveaway is that the site owner already owns both domains - including the one that Faheem is so generously offering to sell them.&lt;/p&gt;

&lt;p&gt;I am curious to see whether &quot;Faheem&quot; is able to upload an HTML file as he claims, which would indicate that the site has been compromised.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Hello,&lt;/p&gt;

&lt;p&gt;I believe you&#39;re the owner of &lt;i&gt;[adomain.org]&lt;/i&gt;. I&#39;ve got a proposition concerning your website. Would you be interested in acquiring &lt;i&gt;[adomain.com]&lt;/i&gt;?&lt;/p&gt;

&lt;p&gt;I can upload an HTML file temporarily to verify ownership of the domain, in case you&#39;re concerned. Let me know what you think to discuss further.&lt;/p&gt;

&lt;p&gt;PS: I&#39;m only emailing you because I believe you can benefit from this. I do not intend to email you again unless you respond to this inquiry.&lt;/p&gt;

&lt;p&gt;Regards,&lt;br/&gt;
Faheem.&lt;/p&gt;&lt;/blockquote&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5720696064486235566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/03/i-believe-youre-owner-of-spam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5720696064486235566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5720696064486235566'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/03/i-believe-youre-owner-of-spam.html' title='&quot;I believe you&#39;re the owner of...&quot; spam'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4263193631789944867</id><published>2013-02-15T12:56:00.000+13:00</published><updated>2013-02-15T12:56:16.102+13:00</updated><title type='text'>Debugging NUnit tests</title><content type='html'>&lt;p&gt;I generally use NCrunch or ReSharper to run my NUnit tests, but it seems each test runner has its own quirks. Sometimes, integration tests only fail on the build machine because they run in the command line runner. Debugging these is a little trickier.&lt;/p&gt;

&lt;p&gt;The solution I found that works well is to launch the NUnit GUI and run the tests from there, attaching to the correct process by running the following command in the Package Manager Console (i.e. PowerShell in VS):&lt;/p&gt;

&lt;pre class=&quot;brush:ps&quot;&gt;
($dte.Debugger.LocalProcesses | ? { $_.Name.EndsWith(&quot;nunit-agent.exe&quot;) }).Attach()
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4263193631789944867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/02/debugging-nunit-tests.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4263193631789944867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4263193631789944867'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/02/debugging-nunit-tests.html' title='Debugging NUnit tests'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4577679854562642485</id><published>2013-01-02T14:18:00.000+13:00</published><updated>2013-01-02T14:20:36.610+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Copying Windows Azure SQL Database to a local server</title><content type='html'>&lt;p&gt;The following script will download a SQL Azure database and import it into a local running instance. It assumes the local database does not exist. The import step could also be used to create an off-site backup.&lt;/p&gt;

&lt;p&gt;This script uses the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx&quot;&gt;SqlPackage&lt;/a&gt; tool, which can be downloaded using the Web Platform Installer to install Microsoft SQL Server Data-Tier Application Framework (DACFx).&lt;/p&gt;

&lt;p&gt;You will need to replace the values surrounded in asterisks (*) for the script to work correctly.&lt;/p&gt;

&lt;pre class=&quot;brush:ps&quot;&gt;
param([string][parameter(mandatory)]$DatabaseAdministratorPassword)

$sqlPackage = &#39;C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe&#39;

$bacPacFile = join-path $env:TEMP &#39;Import.bacpac&#39;
try 
{
    &amp; $sqlPackage /a:Export /ssn:*****AZURE_DATABASE_SERVER***** /sdn:*****DATABASE_NAME***** /su:*****AZURE DATABASE ADMIN USER NAME***** /sp:$DatabaseAdministratorPassword /tf:$bacPacFile
    if(!$?) {
        throw &quot;Failed to export database.&quot;
    }
    &amp; $sqlPackage /a:Import /tdn:*****DATABASE_NAME***** /tsn:localhost\sqlexpress /sf:$bacPacFile
    if(!$?) {
        throw &quot;Failed to import database.&quot;
    }
}
finally {
    del $bacPacFile
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4577679854562642485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2013/01/copying-windows-azure-sql-database-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4577679854562642485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4577679854562642485'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2013/01/copying-windows-azure-sql-database-to.html' title='Copying Windows Azure SQL Database to a local server'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3414554293390582076</id><published>2012-12-23T07:11:00.000+13:00</published><updated>2012-12-23T07:18:15.820+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Azure"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Getting more detail from Azure PowerShell Cmdlet 400 errors</title><content type='html'>Some of the Azure PowerShell Cmdlets return less than useful errors:

&lt;pre class=&quot;brush:text&quot;&gt;
New-AzureDeployment : The remote server returned an unexpected response: (400) Bad Request.
At line:1 char:5
+     New-AzureDeployment -Slot $slot -Package &quot;$root\NewSite.Azure\bin\Release\ap ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [New-AzureDeployment], ProtocolException
    + FullyQualifiedErrorId : Microsoft.WindowsAzure.Management.ServiceManagement.HostedServices.NewAzureDeploymentCommand
&lt;/pre&gt;

The way to get more detailed information is on &lt;a href=&quot;http://blogs.msdn.com/b/benjguin/archive/2012/07/03/windows-azure-powershell-the-remote-server-returned-an-unexpected-response-400-bad-request.aspx&quot;&gt;this blog&lt;/a&gt;:

&lt;pre class=&quot;brush:ps&quot;&gt;
(New-Object System.IO.StreamReader($Error[0].Exception.InnerException.Response.GetResponseStream())).ReadToEnd()
&lt;/pre&gt;

I have simply formatted this into a useful PowerShell oneliner. Note that this command can only be run once.

The problem in my case was that I had changed my storage account to camel case, but it must be all lower case.

&lt;pre class=&quot;brush:xml&quot;&gt;
&amp;lt;Error xmlns=&quot;http://schemas.microsoft.com/windowsazure&quot; xmlns:i=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&gt;
  &amp;lt;Code&gt;BadRequest&amp;lt;/Code&gt;
  &amp;lt;Message&gt;The name is not a valid storage account name. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.&amp;lt;/Message&gt;
&amp;lt;/Error&gt;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3414554293390582076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/12/getting-more-detail-from-azure.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3414554293390582076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3414554293390582076'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/12/getting-more-detail-from-azure.html' title='Getting more detail from Azure PowerShell Cmdlet 400 errors'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4739466575717780579</id><published>2012-12-14T13:32:00.002+13:00</published><updated>2013-01-08T14:42:57.111+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Checking if a TCP port is listening in PowerShell (TCP Ping)</title><content type='html'>In older versions of Windows, the telnet command could be used to test a TCP connection to another machine. However, this is not installed by default on newer versions of the O/S.

The solution is to use a .NET class from PowerShell:

&lt;pre class=&quot;brush:ps&quot;&gt;
New-Object System.Net.Sockets.TcpClient machinename, 1337
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4739466575717780579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/12/checking-if-tcp-port-is-listening-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4739466575717780579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4739466575717780579'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/12/checking-if-tcp-port-is-listening-in.html' title='Checking if a TCP port is listening in PowerShell (TCP Ping)'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-9017735047981811791</id><published>2012-12-14T11:30:00.000+13:00</published><updated>2013-03-18T15:14:36.262+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Error configuring CredSSP</title><content type='html'>I was trying to configure CredSSP from a Windows 8 machine to Windows Server 2008 R2, but ran into the issue below:

&lt;br /&gt;
&lt;pre&gt;C:\Windows\system32&amp;gt; Enable-WSManCredSSP -Role Client -DelegateComputer remotepc

CredSSP Authentication Configuration for WS-Management
CredSSP authentication allows the user credentials on this computer to be sent to a remote computer. If you use CredSSP
 authentication for a connection to a malicious or compromised computer, that computer will have access to your user
name and password. For more information, see the Enable-WSManCredSSP Help topic.
Do you want to enable CredSSP authentication?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is &quot;Y&quot;):
Enable-WSManCredSSP : &lt;f:wsmanfault code=&quot;2150858770&quot; machine=&quot;ecargoBartDev.ecargo.net&quot; xmlns:f=&quot;http://schemas.microsoft.com/wbem/wsman/1/wsmanfault&quot;&gt;&lt;f:message&gt;The client cannot connect to the destination specified in the request.
Verify that the service on the destination is running and is accepting requests. Consult the logs and documentation
for the WS-Management service running on the destination, most commonly IIS or WinRM. If the destination is the WinRM
service, run the following command on the destination to analyze and configure the WinRM service: &quot;winrm quickconfig&quot;.
&lt;/f:message&gt;&lt;/f:wsmanfault&gt;
At line:1 char:1
+ Enable-WSManCredSSP -Role Client -DelegateComputer COMPUTER
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.String[]:String[]) [Enable-WSManCredSSP], InvalidOperationExce
   ption
    + FullyQualifiedErrorId : WsManError,Microsoft.WSMan.Management.EnableWSManCredSSPCommand
&lt;/pre&gt;
I was baffled for a while, since WinRM was correctly configured on the remote PC. However, &lt;a href=&quot;http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx&quot;&gt;procmon&lt;/a&gt; showed that the local command was trying to connect to port 47001 &lt;i&gt;on my local machine&lt;/i&gt;, which is the local WinRM service. After starting my local WinRM service, everything worked correctly.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/9017735047981811791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/12/error-configuring-credssp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9017735047981811791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9017735047981811791'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/12/error-configuring-credssp.html' title='Error configuring CredSSP'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4536627138757399310</id><published>2012-12-12T16:50:00.000+13:00</published><updated>2012-12-12T16:51:07.997+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><title type='text'>Git client configuration</title><content type='html'>This is the Git configuration I use for my local repositories.

&lt;pre class=&quot;brush:text&quot;&gt;
[core]
 autocrlf = false
[push]
 default = simple
[rerere]
 enabled = true
[diff]
 tool = p4merge
[difftool &quot;p4merge&quot;]
 cmd = p4merge \&quot;$LOCAL\&quot; \&quot;$REMOTE\&quot;
[merge]
 defaultToUpstream = true
 tool = p4merge
[mergetool &quot;p4merge&quot;]
 cmd = p4merge \&quot;$BASE\&quot; \&quot;$LOCAL\&quot; \&quot;$REMOTE\&quot; \&quot;$MERGED\&quot;
 keepTemporaries = false
 trustExitCode = false
 keepBackup = false
[gc]
 auto = 0
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4536627138757399310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/12/git-client-configuration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4536627138757399310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4536627138757399310'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/12/git-client-configuration.html' title='Git client configuration'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4441668948314117362</id><published>2012-11-22T15:55:00.001+13:00</published><updated>2012-11-22T15:55:41.105+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="jQuery"/><title type='text'>jQuery UI widget pseudo-selectors</title><content type='html'>I stumbled across a very handy feature from jQuery UI today - widget pseudo-selectors.

&lt;a href=&quot;http://www.jquerysdk.com/api/jQuery.widget&quot;&gt;This page&lt;/a&gt; describes the feature well, but I have copied a common scenario here:

&lt;pre class=&quot;brush:js&quot;&gt;
$.widget(&#39;ui.mywidget&#39;,{});
$(&#39;:ui-mywidget&#39;) //find all ui.mywidget instances
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4441668948314117362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/11/jquery-ui-widget-pseudo-selectors.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4441668948314117362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4441668948314117362'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/11/jquery-ui-widget-pseudo-selectors.html' title='jQuery UI widget pseudo-selectors'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6780660726736783010</id><published>2012-11-17T06:09:00.000+13:00</published><updated>2012-11-17T06:09:56.913+13:00</updated><title type='text'>Configuring a Git server</title><content type='html'>To publish an HTTP server, I use &lt;a href=&quot;https://github.com/otac0n/WebGitNet&quot;&gt;WebGitNet&lt;/a&gt; and the following system configuration:

&lt;pre&gt;
receive.denynonfastforwards=true
gc.auto=0
core.logallrefupdates=true
&lt;/pre&gt;

&lt;h4&gt;receive.denynonfastforwards=true&lt;/h4&gt;
Prevents people from accidentally pushing (using -force) a non-fast-forward update. This happened to me when I wanted to push a non-fast-forward update, but did not specify the single branch i.e. I used &lt;code&gt;git push -f&lt;/code&gt;, which by default pushes &lt;I&gt;all&lt;/I&gt; branches using the force flag.

&lt;h4&gt;gc.auto=0&lt;/h4&gt;
There can be a lot of useful information in the &#39;garbage&#39; of a git repository. My policy is to &lt;a href=&quot;http://www.cs.cmu.edu/~davide/howto/git_lose.html&quot;&gt;never delete that garbage&lt;/a&gt;.

&lt;h4&gt;core.logallrefupdates=true&lt;/h4&gt;
The reflog is useful, but unfortunately it is not kept for remote bare repositories. This re-enables the reflog.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6780660726736783010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/11/configuring-git-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6780660726736783010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6780660726736783010'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/11/configuring-git-server.html' title='Configuring a Git server'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4070355650635820629</id><published>2012-11-15T07:26:00.000+13:00</published><updated>2012-11-15T07:26:37.780+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Launching a PowerShell script in 64 bit mode on a 64 bit machine</title><content type='html'>If a 32-bit process launches PowerShell on a 64 bit machine, it will launch powershell.exe from the 32 bit system32 folder rather than the 64 bit one. Some scripts need to run in 64 bit mode, so the solution is to have the script relaunch itself in 64 bit mode if it detects that it has been run in 32 bit mode. This is one way to do it:&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;
$powerShellExe = join-path $env:WINDIR SysNative\WindowsPowerShell\v1.0\powershell.exe
if(test-path ($powerShellExe)) {
    if([System.Runtime.InterOpServices.Marshal]::SizeOf([System.IntPtr]) -eq 4) {
        write-host &quot;Re-launching script in native 64 bit mode...&quot;
        &amp; $powerShellExe $MyInvocation.MyCommand.Definition $PSBoundParameters.Values
        $host.SetShouldExit($LASTEXITCODE) 
        exit
    }
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4070355650635820629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/11/launching-powershell-script-in-64-bit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4070355650635820629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4070355650635820629'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/11/launching-powershell-script-in-64-bit.html' title='Launching a PowerShell script in 64 bit mode on a 64 bit machine'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2402237744106998660</id><published>2012-11-14T13:40:00.000+13:00</published><updated>2012-11-14T13:40:03.346+13:00</updated><title type='text'>Getting an accurate list of dependencies from SSMS</title><content type='html'>The dependency dialog in SQL Server Management Studio does not appear to be particularly reliable, not returning some dependencies.

The solution is to use the &lt;i&gt;sys.dm_sql_referenced_entities&lt;/i&gt; table function:

&lt;pre class=&quot;brush:sql&quot;&gt;
select * from sys.dm_sql_referenced_entities (&amp;lt;ENTITY&gt;, &#39;object&#39;)
&lt;/pre&gt;

</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2402237744106998660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/11/getting-accurate-list-of-dependencies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2402237744106998660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2402237744106998660'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/11/getting-accurate-list-of-dependencies.html' title='Getting an accurate list of dependencies from SSMS'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2548075574320253856</id><published>2012-11-13T06:17:00.000+13:00</published><updated>2012-11-13T06:18:18.477+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MSBuild"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Correctly Executing a PowerShell script from MSBuild</title><content type='html'>It took me a while to find out how to execute a PowerShell script from within an MSBuild script &lt;i&gt;while propagating errors to MSBUILD&lt;/i&gt;. I tried several approaches, including the usual -File argument, but this is what I came up with in the end:

&lt;pre class=&quot;brush:xml&quot;&gt;
&amp;lt;Exec Command=&quot;powershell -Command &amp;amp;quot;&amp;amp;amp;{ .\Deploy.ps1 scriptArg1 scriptArg2 }&amp;amp;quot;&quot; /&gt;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2548075574320253856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/11/correctly-executing-powershell-script.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2548075574320253856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2548075574320253856'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/11/correctly-executing-powershell-script.html' title='Correctly Executing a PowerShell script from MSBuild'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4121803320476664518</id><published>2012-11-06T11:25:00.000+13:00</published><updated>2012-11-13T06:18:36.043+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Configuring a new Windows Server 2012 instance using PowerShell</title><content type='html'>&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Join the domain (prompt for user name and password of domain administrator):&lt;pre class=&quot;brush:ps&quot;&gt;Add-Computer -DomainName {Domain Name}&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Add a domain user as an administrator:&lt;pre class=&quot;brush:ps&quot;&gt;net localgroup administrators {Domain Name}\{User Name} /add&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Name the computer:&lt;pre class=&quot;brush:ps&quot;&gt;Rename-Computer {New Name}&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Enable PowerShell remoting (note: no double hops):&lt;pre class=&quot;brush:ps&quot;&gt;Enable-PSRemoting&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Restart the computer:&lt;pre class=&quot;brush:ps&quot;&gt;Restart-Computer&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4121803320476664518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/11/configuring-new-windows-server-2012.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4121803320476664518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4121803320476664518'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/11/configuring-new-windows-server-2012.html' title='Configuring a new Windows Server 2012 instance using PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-112094085084513733</id><published>2012-10-24T14:49:00.000+13:00</published><updated>2012-10-24T14:49:17.439+13:00</updated><title type='text'>WARNING: The generated type defines no public methods or properties</title><content type='html'>I received the following warning while using the Add-Type CmdLet in PowerShell:

&lt;pre&gt;WARNING: The generated type defines no public methods or properties.&lt;/pre&gt;

Since I was aware that this was the case, I suppressed the warning using the following parameter to Add-Type:
&lt;pre class=&quot;brush:ps&quot;&gt;Add-Type -WarningAction SilentlyContinue ...&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/112094085084513733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/10/warning-generated-type-defines-no.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/112094085084513733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/112094085084513733'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/10/warning-generated-type-defines-no.html' title='WARNING: The generated type defines no public methods or properties'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5335540617005599629</id><published>2012-10-22T18:53:00.000+13:00</published><updated>2012-10-22T18:53:30.865+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><category scheme="http://www.blogger.com/atom/ns#" term="Windows 8"/><title type='text'>Text bootloader in Windows 8</title><content type='html'>Windows 8 installs a new, quite nice looking, graphical bootloader. Unfortunately, this&amp;nbsp;bling comes with a fairly serious drawback&amp;nbsp;-&amp;nbsp;Windows 8&amp;nbsp;needs to boot before the bootloader is displayed on the screen, which can take 20 seconds or so, and then if you have the audacity to want to boot into another operating system, the machine&amp;nbsp;will be rebooted, forcing you to endure another BIOS POST sequence.&lt;br /&gt;
&lt;br /&gt;
The workaround is to enable the text based bootloader using bcdedit (note that the backticks (`) are required in PowerShell to escape the braces):&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;
bcdedit /set `{current`} bootmenupolicy legacy
&lt;/pre&gt;
To switch back to the graphical bootloader, run the following command:
&lt;pre class=&quot;brush:ps&quot;&gt;
bcdedit /set `{current`} bootmenupolicy standard
&lt;/pre&gt;

You&#39;ll need to run these PowerShell commands as an administrator.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5335540617005599629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/10/text-bootloader-in-windows-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5335540617005599629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5335540617005599629'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/10/text-bootloader-in-windows-8.html' title='Text bootloader in Windows 8'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2021860300573606450</id><published>2012-10-19T13:06:00.000+13:00</published><updated>2012-10-19T13:06:08.153+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'></title><content type='html'>After recently importing a Subversion repository into Git, along with the associated .gitignore file, I noticed that git status was performing poorly. The solution was to split the monolithic .gitignore file in the root folder into multiple .gitignore files spread throughout the repository.&lt;br /&gt;
&lt;br /&gt;
I wrote the following PowerShell script to do so:

&lt;pre class=&quot;brush:ps&quot;&gt;
$content = type .gitignore | % { $_.Trim() } | ? { $_.StartsWith(&#39;/&#39;) } | % { $_.SubString(1) }
$content | % {
    $folder = split-path -Parent $_    
    if($folder.length -gt 0) {
        if(-not (test-path $folder)) {
            md $folder | Out-Null
        }
        $pattern = split-path -Leaf $_
        $newPattern = &#39;/&#39; + $pattern
        $ignoreFile = &quot;$folder\.gitignore&quot;
        $exists = $false
        if((test-path $ignoreFile ) -and (type $ignore) -notcontains $newPattern) {
            $exists = $true
        }
        if(!$exists) {
            Add-Content -Force -Path $ignoreFile $newPattern
        }
    }
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2021860300573606450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/10/after-recently-importing-subversion.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2021860300573606450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2021860300573606450'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/10/after-recently-importing-subversion.html' title=''/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3069182752748031649</id><published>2012-10-12T09:52:00.001+13:00</published><updated>2012-10-12T09:52:43.611+13:00</updated><title type='text'>Adding credentials to the Windows credential store from the command line</title><content type='html'>Service users often do not have permission to start GUI applications, so the following tool can be used to store credentials that can be used to access a server, for example to copy a backup onto a remote file share.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://technet.microsoft.com/en-us/library/cc754243%28v=ws.10%29.aspx&quot;&gt;cmdkey.exe&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The syntax to add credentials to the store is:&lt;br /&gt;
&lt;br /&gt;
&lt;code&gt;cmdkey /add:&lt;i&gt;targetname &lt;/i&gt;/user:&lt;i&gt;username &lt;/i&gt;/pass&lt;/code&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3069182752748031649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/10/adding-credentials-to-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3069182752748031649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3069182752748031649'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/10/adding-credentials-to-windows.html' title='Adding credentials to the Windows credential store from the command line'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6216225766682037141</id><published>2012-10-08T16:54:00.000+13:00</published><updated>2013-05-09T13:12:20.975+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Git Cookbook</title><content type='html'>This page lists some useful commands that I use with Git:

&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Show all branches that contain a commit. Useful to see which branches a topic branch has been merged into.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;git branch --all --contains &lt;i&gt;commit&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Show which branches have not been merged into the current or specified branch.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;git branch --all --no-merge [&lt;i&gt;branch]&lt;/i&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Pretty-print history tree&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;git log --oneline --graph --decorate --all&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;List all changes that will be sent with the next push&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;git log --branches --not --remotes&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Update &lt;a href=&quot;http://notes.envato.com/developers/rebasing-merge-commits-in-git/&quot;&gt;from remote&lt;/a&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;git fetch&lt;/li&gt;
&lt;li&gt;git rebase -p&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Get name of remote tracking branch for the current branch&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;git branch -vv | ? { $_ -match &#39;^\*&#39; } | % { $_ -match &#39;\[([^:]+)&#39; | Out-Null; $Matches[1] }&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Get the most recently modified topic branch&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp;git for-each-ref --sort=-committerdate --format=&#39;%(refname)&#39; refs/remotes/origin/topic | select -first 1&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6216225766682037141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/10/git-cookbook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6216225766682037141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6216225766682037141'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/10/git-cookbook.html' title='Git Cookbook'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3642159557976877181</id><published>2012-06-20T09:58:00.000+12:00</published><updated>2012-06-20T09:58:47.162+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Git"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Get status of all Git repositories using PowerShell</title><content type='html'>The following PowerShell one-liner will get the status of all Git repositories:

&lt;pre class=&quot;brush:ps&quot;&gt;
dir -r -i .git -fo | % { pushd $_.fullname; cd ..; write-host -fore yellow (get-location).Path; git status; popd }
&lt;/pre&gt;

Note that this will not work for bare repositories.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3642159557976877181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/06/get-status-of-all-git-repositories.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3642159557976877181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3642159557976877181'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/06/get-status-of-all-git-repositories.html' title='Get status of all Git repositories using PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4028125767005651623</id><published>2012-06-06T22:27:00.000+12:00</published><updated>2012-06-09T21:39:20.882+12:00</updated><title type='text'>Installing (and booting) Windows 8 on a VHD</title><content type='html'>Windows 8 (and Server 2012) greatly simplifies installing Windows 7 / Windows Server 2008 R2 / Windows 8 / Windows Server 2012 to a VHD or VHDX for booting without having to mess around with partitions.

&lt;a href=&quot;http://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f&quot;&gt;Convert-WindowsImage.ps1&lt;/a&gt; is a fantastic tool that you can run from Windows 8 or Server 2012 to install a new operating system without rebooting your machine.

To install Windows 8 Release Preview on a VHDX, I did the following:
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Download and unblock the PowerShell script &lt;a href=&quot;http://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f&quot;&gt;Convert-WindowsImage.ps1&lt;/a&gt;. I couldn&#39;t find the unblock checkbox on the file properties dialog, so I used the Sysinternals streams.exe utility to remove the block: &lt;pre&gt;streams -d Convert-WindowsImage.ps1&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;I then mounted the &lt;a href=&quot;http://windows.microsoft.com/en-US/windows-8/download&quot;&gt;Windows 8&amp;nbsp;ISO image&lt;/a&gt; by double clicking on it in Explorer, taking advantage of the &lt;a href=&quot;http://blogs.msdn.com/b/b8/archive/2011/08/30/accessing-data-in-iso-and-vhd-files.aspx&quot;&gt;belated&amp;nbsp;ISO mounting feature&lt;/a&gt;. In my case, it mounted to E:.&lt;/li&gt;
&lt;li&gt;Next, I ran &lt;a href=&quot;http://gallery.technet.microsoft.com/scriptcenter/Convert-WindowsImageps1-0fe23a8f&quot;&gt;Convert-WindowsImage.ps1&lt;/a&gt;&amp;nbsp;with the following command line: &lt;pre&gt;.\Convert-WindowsImage.ps1 -SourcePath E:\sources\install.wim -VHDFormat VHD -SizeBytes 50GB -VHDPath Windows8RP.vhd -VHDType Fixed -Edition Professional&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Mount the VHDX using diskmgmt.msc. I tried using Mount-DiskImage, but kept running into the following error: &lt;em&gt;&quot;Mount-DiskImage : One or more parameter values passed to the method were invalid.&quot;&lt;/em&gt; My drive was mounted as F:&lt;/li&gt;
&lt;li&gt;Run the following command to add your new VHD to the boot menu:&lt;pre&gt;bcdboot F:\Windows&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Reboot and select the new O/S in the boot menu.&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4028125767005651623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/06/installing-and-booting-windows-8-on-vhd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4028125767005651623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4028125767005651623'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/06/installing-and-booting-windows-8-on-vhd.html' title='Installing (and booting) Windows 8 on a VHD'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3856579270914910444</id><published>2012-04-14T08:23:00.001+12:00</published><updated>2012-10-22T18:59:03.872+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Power"/><title type='text'></title><content type='html'>Redirecting all output from a PowerShell script using the new PowerShell 3.0 asterisk / star / * redirection:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;powershell -Command { .\scriptfile.ps1 *&amp;gt; out.log }

&lt;/pre&gt;
Other types of redirection:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Pipeline: 1&lt;/li&gt;
&lt;li&gt;Error: 2&lt;/li&gt;
&lt;li&gt;Warning: 3&lt;/li&gt;
&lt;li&gt;Verbose: 4&lt;/li&gt;
&lt;li&gt;Debug: 5&lt;/li&gt;
&lt;li&gt;All streams: *&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3856579270914910444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/04/redirecting-all-output-from-powershell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3856579270914910444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3856579270914910444'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/04/redirecting-all-output-from-powershell.html' title=''/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8247916689519340002</id><published>2012-04-05T20:23:00.002+12:00</published><updated>2012-04-05T20:23:48.506+12:00</updated><title type='text'>NuGet and Semantic Versioning</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://docs.nuget.org/docs/release-notes/nuget-1.6&quot;&gt;NuGet version 1.6 introduced support for Semantic Versioning&lt;/a&gt;, however I have since discovered that NuGet only supports &lt;a href=&quot;http://semver.org/spec/v1.0.0.html&quot;&gt;v1.0.0 of the SemVer specification&lt;/a&gt;. Unfortunately, this is much more limiting than the &lt;a href=&quot;http://semver.org/&quot;&gt;latest version&lt;/a&gt;, which supports more and better scenarios such as continuous integration builds.&lt;/p&gt;
&lt;p&gt;Semantic versions in NuGet must match the following regular expression:&lt;/p&gt;
&lt;br /&gt;
&lt;pre&gt;(?&lt;version&gt;\d+(\.\d+){2})(?&lt;release&gt;-[a-z][0-9a-z-]*)?&lt;/release&gt;&lt;/version&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;This means a version number with three components (e.g. 1.0.0) optionally followed by a pre-release version number. The pre-release version number must start with a dash (-) and a letter between a-z, and can then be any number of digits, letters and dashes (-). The regular expression is case insensitive.&lt;/p&gt;
&lt;p&gt;For example,
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;0.1.0&lt;/li&gt;
&lt;li&gt;0.1.0-alpha&lt;/li&gt;
&lt;li&gt;0.1.0-Alpha&lt;/li&gt;
&lt;li&gt;0.1.0-a-2
&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8247916689519340002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/04/nuget-and-semantic-versioning.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8247916689519340002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8247916689519340002'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/04/nuget-and-semantic-versioning.html' title='NuGet and Semantic Versioning'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6246218442715779895</id><published>2012-03-31T08:41:00.000+13:00</published><updated>2012-03-31T08:42:44.804+13:00</updated><title type='text'>B1248 LED Name Badge C# / .NET API</title><content type='html'>&lt;p&gt;I am working on an open source API for the B1248 LED name badge that I got from &lt;a href=&quot;http://codemania.co.nz/&quot;&gt;CodeMania in Auckland, New Zealand&lt;/a&gt;. So far, it is possible to send any ASCII message to the device in the first slot, so it is useful as a display attached to a computer. &lt;/p&gt;

&lt;p&gt;The code is not complete and I am definitely open to contributions!!&lt;/p&gt;

&lt;p&gt;Find the code at BitBucket: &lt;a href=&quot;https://bitbucket.org/bartj/led&quot;&gt;https://bitbucket.org/bartj/led&lt;/a&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6246218442715779895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/03/b1248-led-name-badge-c-net-api.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6246218442715779895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6246218442715779895'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/03/b1248-led-name-badge-c-net-api.html' title='B1248 LED Name Badge C# / .NET API'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3375539009146164361</id><published>2012-03-23T20:42:00.000+13:00</published><updated>2013-10-30T12:30:49.685+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Work with a &quot;shadow copy&quot; of your file system</title><content type='html'>Sometimes it is useful to be able to take a snapshot of the file system as it currently stands while still having programs use / access it. The reason I wrote this PowerShell script is that I want to be able to copy virtual machines around while still accessing them. Unfortunately, copying virtual machines takes a long time due to their size, so it is useful to be able to copy them while they are in use. This script allows me to shut down the virtual machine, start the copy operation, and then restart the virtual machine while the copy is still in progress.&lt;br /&gt;
&lt;br /&gt;
Notes / caveats:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;This script requires administrative privileges.&lt;/li&gt;
&lt;li&gt;The script is naive and does not work if the folder you want to work with is inside a mount point or directory junction (this situation is usually rare).&lt;/li&gt;
&lt;li&gt;The script leaves a symbolic link in the temp folder, so these may accumulate over time.
&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;function CreateShadowCopy([string]$LocationToOpen) {
    if(-not $LocationToOpen -or -not (test-path $LocationToOpen)) {
        $LocationToOpen = get-location
    }
    if(-not (get-item $LocationToOpen).PSIsContainer) {
        $LocationToOpen = split-path -Parent $LocationToOpen
    }
 
    $fullPath = (resolve-path $LocationToOpen).Path
    $fileRoot = [system.io.path]::GetPathRoot($fullPath)
    $shadow = (Get-WmiObject -list win32_shadowcopy).Create($fileRoot, &quot;ClientAccessible&quot;) 
    $shadowRoot = join-path $env:temp $shadow.ShadowID
    $shadowPath = gwmi win32_shadowcopy | ? { $_.Id -eq $shadow.ShadowID } | select -ExpandProperty DeviceObject
    cmd /c mklink /d $shadowRoot $shadowPath\ | out-null
    $rootlessCurrentPath = $fullPath.substring($fileRoot.length)
    join-path $shadowRoot $rootlessCurrentPath
}

$shadowPath = CreateShadowCopy D:\
try {
    pushd $shadowPath

    ls .
    echo &quot;Do stuff...&quot;
}
finally {
    popd
    cmd /c rd $shadowPath
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3375539009146164361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/03/work-with-shadow-copy-of-your-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3375539009146164361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3375539009146164361'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/03/work-with-shadow-copy-of-your-file.html' title='Work with a &quot;shadow copy&quot; of your file system'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7419928859596273507</id><published>2012-01-24T18:40:00.000+13:00</published><updated>2012-01-24T18:40:58.626+13:00</updated><title type='text'>Direct Booking does not successfully book a resource in Outlook 2010</title><content type='html'>The &lt;a href=&quot;http://support.microsoft.com/kb/982774&quot;&gt;Microsoft support article entitled &lt;i&gt;Direct Booking does not successfully book a resource in Outlook 2010&lt;/i&gt;&lt;/a&gt; discusses how to solve a problem booking resources in Outlook 2010.

The following PowerShell one-liner will fix the problem:

&lt;pre class=&quot;brush:ps&quot;&gt;
New-ItemProperty &quot;HKCU:\Software\Microsoft\Office\14.0\Outlook\Options\Calendar&quot; EnableDirectBooking -Value 1 -PropertyType DWORD
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7419928859596273507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/direct-booking-does-not-successfully.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7419928859596273507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7419928859596273507'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/direct-booking-does-not-successfully.html' title='Direct Booking does not successfully book a resource in Outlook 2010'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6443250391780034564</id><published>2012-01-18T19:34:00.000+13:00</published><updated>2012-01-18T19:34:47.455+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Installing printers using PowerShell</title><content type='html'>&lt;p&gt;Our developer team has a wiki page that describes very clearly how to use the Windows 7 UI to install network printers into developer machines. The document is well written, with all steps accompanied by screenshots. However, it is tricky and boring to follow, so I thought there must be a simpler way to add printers using PowerShell - and it turns out there is.&lt;/p&gt;

&lt;pre class=&quot;brush:ps&quot;&gt;
$net = New-Object -Com WScript.Network
$net.AddWindowsPrinterConnection(&#39;\\server\printer&#39;)
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6443250391780034564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/installing-printers-using-powershell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6443250391780034564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6443250391780034564'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/installing-printers-using-powershell.html' title='Installing printers using PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7109774608334440935</id><published>2012-01-09T18:41:00.001+13:00</published><updated>2012-01-09T18:47:28.663+13:00</updated><title type='text'>Different ways of installing Google Chrome on Windows</title><content type='html'>Google Chrome can be installed as:&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.google.com/intl/en/chrome/business/browser/&quot;&gt;A standard MSI for all users on the machine&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/chrome/eula.html?standalone=1.&quot;&gt;A standalone per-user install&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/chrome&quot;&gt;A web-based per-user install&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7109774608334440935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/different-ways-of-installing-google.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7109774608334440935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7109774608334440935'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/different-ways-of-installing-google.html' title='Different ways of installing Google Chrome on Windows'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7916167724096503744</id><published>2012-01-07T15:05:00.000+13:00</published><updated>2012-01-07T15:06:55.176+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Removing old versions of Chrome using PowerShell</title><content type='html'>&lt;p&gt;Google Chrome leaves older versions of itself on disk, which can cause useful vulnerability scanners such as the fantastic &lt;a href=&quot;http://secunia.com/vulnerability_scanning/personal/&quot;&gt;Secunia PSI&lt;/a&gt; to report Chrome as vulnerable although the older version is not in use.&lt;/p&gt;

&lt;p&gt;To automatically remove older versions from the current user, run the following PowerShell one-liner.&lt;/p&gt;

&lt;pre class=&quot;brush:ps&quot;&gt;
dir ~\AppData\Local\Google\Chrome\Application | ? { $_ -match &#39;\d+\.\d+\.\d+\.\d+&#39; } | % { @{ File=$_; Version=(New-Object System.Version $_.Name) } } | sort -Descending Version | select -Skip 1 | % { del -fo -r $_.File.PSPath }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7916167724096503744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/removing-old-versions-of-chrome-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7916167724096503744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7916167724096503744'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/removing-old-versions-of-chrome-using.html' title='Removing old versions of Chrome using PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4132571411963235658</id><published>2012-01-07T11:24:00.001+13:00</published><updated>2012-01-07T20:49:41.388+13:00</updated><title type='text'>Versioning .NET assemblies</title><content type='html'>&lt;p&gt;Providing meaningful version numbers to PE binaries (.EXEs and .DLLs) is a very good way to make sure that you can always find the correct source code that was used to build. Note that this should be used in conjunction with a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/windows/desktop/ms680693(v=vs.85).aspx&quot;&gt;symbol server&lt;/a&gt;, which is so trivially easy to &lt;a href=&quot;http://blogs.msdn.com/b/jimlamb/archive/2009/06/15/symbol-and-source-server-in-tfs-2010.aspx&quot;&gt;set up in TFS 2010&lt;/a&gt; that everyone should be doing it. &lt;/p&gt;

&lt;p&gt;This is my currently recommended way for using the various versions available in .NET assemblies. Note that it is subject to change as new and better ideas come along!&lt;/p&gt;

&lt;br /&gt;
&lt;h3&gt;The AssemblyVersion.cs file&lt;/h3&gt;
&lt;p&gt;Set up a single C# file that you will include in all your assemblies that need to be given the same version number. I currently give all the DLLs in a single releasable product the same version number so future releases of an assembly will have a new version number, regardless of whether any of the code in that DLL has actually changed. I find this the simplest way to ensure consistency of the product through the full SDLC. In this C# file, which could be called AssemblyVersion.cs, your continuous integration (CI) server will generate something like the following code:&lt;/p&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;using System.Reflection;

[assembly: AssemblyVersion(&quot;1.0.2.23456&quot;)]
[assembly: AssemblyInformationalVersion(&quot;1.0.1beta1 ($/Project/Main;223456)&quot;)]
&lt;/pre&gt;
&lt;p&gt;You will need to put this file in a common location and include it as a linked file in each of your projects. This common file replaces the versioning information that is usually in AssemblyInfo.cs, so you will need to remove those attributes from each project that you include AssemblyVersion.cs in.&lt;/p&gt; 

&lt;br /&gt;
&lt;h3&gt;AssemblyVersion.cs in development and production&lt;/h3&gt;
&lt;p&gt;I like to make version number obviously different when building on developer machines, so I typically set the version to 0.0.0.0 or - in case Visual Studio Code Analysis complains - 0.0.0.1. The following AssemblyVersion.cs file would be checked into source control:&lt;/p&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;
using System.Reflection;

[assembly: AssemblyVersion(&quot;0.0.0.0&quot;)]
[assembly: AssemblyInformationalVersion(&quot;development&quot;)]
&lt;/pre&gt;

And the following PowerShell script would be &lt;a href=&quot;http://nzbart.blogspot.com/2010/10/executing-powershell-script-from-tfs.html&quot;&gt;launched from within TFS&lt;/a&gt;, Jenkins, Cruise Control, or your CI server of choice to modify AssemblyVersion.cs.

&lt;pre class=&quot;brush:ps&quot;&gt;
param(
        [parameter(mandatory=$true)][int]$MajorVersion,
        [parameter(mandatory=$true)][int]$MinorVersion,
        [parameter(mandatory=$true)][int]$SourceRevision,
        [parameter(mandatory=$true)][string]$SourceBranch
)

#validate source parameters
if($SourceRevision -lt 0 -or $SourceRevision -gt 6553565535) {
    throw &quot;Invalid SourceRevision.&quot;
}
if($MajorVersion -lt 0 -or $MajorVersion -gt 65535 -or $MinorVersion -lt 0 -or $MinorVersion -gt 65535) {
    throw &quot;Invalid major / minor version.&quot;
}

$scriptFolder = Split-Path -Path $MyInvocation.MyCommand.Definition -Parent
$versionFile = resolve-path (join-path $scriptFolder &#39;AssemblyVersion.cs&#39;) # script must be in the same folder as AssemblyVersion.cs

if(-not (test-path $versionFile)) {
    throw &quot;Unable to find version file.&quot;
}

#calculate Build/Revision version component
if($SourceRevision -le 65535) {
    $rev1 = 0
    $rev2 = $SourceRevision
} 
else {
    $verStr = $SourceRevision.ToString()
    $rev2 = [int][string]::Join(&#39;&#39;, $verStr[-5..-1])
    if($rev2 -gt 65535) {
        $rev2 = [int][string]::Join(&#39;&#39;, $verStr[-4..-1])
    } 
    $rev1 = [int]$verStr.SubString(0, $verStr.length - $rev2.ToString().length)
}

$assemblyVersion = &quot;$MajorVersion.$MinorVersion.$rev1.$rev2&quot;
$humanVersion = $SourceBranch + &#39;:&#39; + $SourceRevision

Write-Host &quot;Setting assembly version to $assemblyVersion and human readable version to &#39;$humanVersion&#39;.&quot;

(type $versionFile) -replace &#39;0.0.0.0&#39;,$assemblyVersion -replace &#39;development&#39;,$humanVersion | Out-File -Encoding UTF8 $versionFile
&lt;/pre&gt;

&lt;br /&gt;
&lt;h3&gt;AssemblyVersionAttribute&lt;/h3&gt;
&lt;p&gt;The Assembly version will by default also be set as the AssemblyFileVersion if the latter is not explicitly specified. One important piece of information I want to include is the revision number of the source code that was used to make the build. Each component in the AssemblyVersion is limited to 65535 (16 bit). Since it won&#39;t take long for 65535 revisions to be committed when &lt;a href=&quot;http://www.codinghorror.com/blog/2008/08/check-in-early-check-in-often.html&quot;&gt;checking in early and often&lt;/a&gt;, I spill over into the build number in a human readable fashion, so version 1.0 built from revision 223456 would be 1.0.2.23456.&lt;/p&gt;

&lt;br/&gt;
&lt;h3&gt;AssemblyInformationalVersionAttribute&lt;/h3&gt;
The AssemblyInformationalVersion attribute is a very useful free text string that will appear in the Product Version field when looking at the details of the DLL in Windows Explorer. I sometimes use a &lt;a href=&quot;http://semver.org/&quot;&gt;semantic version&lt;/a&gt; as the first part of that string, and always include an unambiguous reference to the source code that was used to build it i.e. branch and revision details for whatever source control system is in use.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4132571411963235658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/versioning-net-assemblies.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4132571411963235658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4132571411963235658'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/versioning-net-assemblies.html' title='Versioning .NET assemblies'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-901593569598927848</id><published>2012-01-06T21:00:00.000+13:00</published><updated>2012-01-07T15:07:10.156+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Listing all keyboard shortcuts in Visual Studio 2010</title><content type='html'>&lt;p&gt;The NuGet package manager for Visual Studio comes with a hidden gem - a &lt;a href=&quot;http://docs.nuget.org/docs/start-here/using-the-package-manager-console&quot;&gt;PowerShell console called Package Manager Console&lt;/a&gt;. This console not only allows developers to install and configure NuGet packages, but also has a useful variable called $dte, which is the Visual Studio automation COM object.&lt;/p&gt;

&lt;p&gt;To demonstrate the usefulness of this feature, I thought it would be interesting to list all the keyboard shortcuts that I currently had bound. To do this, I ran the following PowerShell one-liner:&lt;/p&gt;

&lt;pre class=&quot;brush:ps&quot;&gt;
$dte.Commands | ? { $_.Bindings.length -ne 0 -and $_.name.length -ne 0 } | sort Name | select Name, Bindings | % { $b = $_.Name; $_.Bindings | % { $_ -match &#39;(.*)::(.*)&#39; | out-null; new-object psobject -Property @{ Name = $b; Context = $Matches[1]; Key = $Matches[2]} } } | sort Context, Name, Key | select Context, Name, Key | ft -AutoSize
&lt;/pre&gt;

Of course, if you want to grab this information and format it for better printing, just replace the last step in the pipeline (&lt;code&gt;ft -AutoSize&lt;/code&gt;) with &lt;code&gt;ConvertTo-Csv | clip&lt;/code&gt;. This will copy all your shortcuts into the clipboard in CSV format, and you can paste them into Excel for better formatting and printing.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/901593569598927848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/listing-all-keyboard-shortcuts-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/901593569598927848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/901593569598927848'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/listing-all-keyboard-shortcuts-in.html' title='Listing all keyboard shortcuts in Visual Studio 2010'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5256013228692737405</id><published>2012-01-04T20:47:00.001+13:00</published><updated>2012-01-07T15:09:08.091+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Requiring administrative access in Visual Studio 2010 C++ projects</title><content type='html'>In previous versions of Visual Studio, making any changes to the application manifest file for a C++ application required you to code one up manually, removing the advantages of the built-in manifest generation tool. However, in Visual Studio 2010, common tasks such as setting the UAC execution level are now baked into the project settings.&lt;br /&gt;
&lt;br /&gt;
Below is a screenshot of how to set the execution level (&lt;i&gt;requestedExecutionLevel&lt;/i&gt;) or UI protection (&lt;i&gt;uiAccess&lt;/i&gt;) settings in the manifest using the project settings.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUPhciCmAyINGeE_bi3vK41gLnxOyW7RC5P5pHebnj29cVb7v5vB0JreLy10KIOqVdvSL1dhJUKRUhKE3RF4hFW0MJWEr5bDZ6iVS3ddlmaYfksUA6FUa-dVJlFFr5NcmfsgkPSUfuEu0/s1600/ManifestUser.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUPhciCmAyINGeE_bi3vK41gLnxOyW7RC5P5pHebnj29cVb7v5vB0JreLy10KIOqVdvSL1dhJUKRUhKE3RF4hFW0MJWEr5bDZ6iVS3ddlmaYfksUA6FUa-dVJlFFr5NcmfsgkPSUfuEu0/s1600/ManifestUser.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5256013228692737405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/requiring-administrative-access-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5256013228692737405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5256013228692737405'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/requiring-administrative-access-in.html' title='Requiring administrative access in Visual Studio 2010 C++ projects'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUPhciCmAyINGeE_bi3vK41gLnxOyW7RC5P5pHebnj29cVb7v5vB0JreLy10KIOqVdvSL1dhJUKRUhKE3RF4hFW0MJWEr5bDZ6iVS3ddlmaYfksUA6FUa-dVJlFFr5NcmfsgkPSUfuEu0/s72-c/ManifestUser.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8402582590424238169</id><published>2012-01-03T12:58:00.000+13:00</published><updated>2012-03-11T14:22:09.892+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Name files by last write date</title><content type='html'>&lt;p&gt;I have a Samsung HMX-H200BP/XSA camcorder, which I am really happy with. However, according to &lt;a href=&quot;http://www.sno.phy.queensu.ca/~phil/exiftool/&quot;&gt;exiftool&lt;/a&gt;, it does not seem to stamp the record date and time into the movie metadata. Instead, it relies on the last write date.&lt;/p&gt;

&lt;p&gt;The PowerShell command below will bulk rename all the MP4 files in the current folder so that they are named by the date and time taken i.e. the last write date.&lt;/p&gt;

&lt;pre class=&quot;brush:ps&quot;&gt;
dir hdv_*.mp4 | % { ren $_.Name ($_.LastWriteTime.ToString(&#39;yyyy-MM-dd HH-mm&#39;) + &#39;.mp4&#39;) }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8402582590424238169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/name-files-by-last-write-date.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8402582590424238169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8402582590424238169'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/name-files-by-last-write-date.html' title='Name files by last write date'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-203619510620789132</id><published>2012-01-02T20:47:00.000+13:00</published><updated>2012-01-02T20:51:35.439+13:00</updated><title type='text'>Undocumented PowerShell 2 Tail Functionality</title><content type='html'>One feature that I have often thought was missing from PowerShell is the equivalent to the *nix &lt;a href=&quot;http://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html&quot;&gt;tail&lt;/a&gt; functionality, which will display lines as they are added to a log file. I have used the &lt;a href=&quot;http://pscx.codeplex.com/&quot;&gt;PowerShell Community Extensions&lt;/a&gt;&amp;nbsp;(PSCX) Get-FileTail cmdlet, but that can be frustrating because it is not available on all the computers I use, so I wanted to find a built-in equivalent.&lt;br /&gt;
&lt;br /&gt;
It turns out that there is an undocumented built-in tail function. Use the Get-Content (alias = gc) cmdlet with the undocumented -Wait parameter. Apparently, it has performance issues with large files, so you may still need to carry a copy of PSCX around with you on a USB stick, but this should suffice for most scenarios.&lt;br /&gt;
&lt;br /&gt;
Below is the documentation for Get-Content for PowerShell 2.0, with no mention of the -Wait parameter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;
NAME
    Get-Content
    
SYNOPSIS
    Gets the content of the item at the specified location.
    
    
SYNTAX
    Get-Content [-LiteralPath] &lt;string[]&gt; [-Credential &lt;PSCredential&gt;] [-Exclude &lt;string[]&gt;] [-Filter &lt;string&gt;] [-Force
    ] [-Include &lt;string[]&gt;] [-ReadCount &lt;Int64&gt;] [-TotalCount &lt;Int64&gt;] [-UseTransaction] [&lt;CommonParameters&gt;]
    
    Get-Content [-Path] &lt;string[]&gt; [-Credential &lt;PSCredential&gt;] [-Exclude &lt;string[]&gt;] [-Filter &lt;string&gt;] [-Force] [-Inc
    lude &lt;string[]&gt;] [-ReadCount &lt;Int64&gt;] [-TotalCount &lt;Int64&gt;] [-UseTransaction] [&lt;CommonParameters&gt;]
    
    
DESCRIPTION
    The Get-Content cmdlet gets the content of the item at the location specified by the path, such as the text in a fi
    le. It reads the content one line at a time and returns an object for each line.
    

PARAMETERS
    -Credential &lt;PSCredential&gt;
        Specifies a user account that has permission to perform this action. The default is the current user. 
        
        Type a user name, such as &quot;User01&quot; or &quot;Domain01\User01&quot;, or enter a PSCredential object, such as one generated 
        by the Get-Credential cmdlet. If you type a user name, you will be prompted for a password.
        
        This parameter is not supported by any providers that are installed with Windows PowerShell.
        
    -Exclude &lt;string[]&gt;
        Omits the specified items. The value of this parameter qualifies the Path parameter. Enter a path element or pa
        ttern, such as &quot;*.txt&quot;. Wildcards are permitted.
        
    -Filter &lt;string&gt;
        Specifies a filter in the provider&#39;s format or language. The value of this parameter qualifies the Path paramet
        er. The syntax of the filter, including the use of wildcards, depends on the provider. Filters are more efficie
        nt than other parameters, because the provider applies them when retrieving the objects, rather than having Win
        dows PowerShell filter the objects after they are retrieved.
        
    -Force [&lt;SwitchParameter&gt;]
        Overrides restrictions that prevent the command from succeeding, just so the changes do not compromise security
        . For example, Force will override the read-only attribute or create directories to complete a file path, but i
        t will not attempt to change file permissions.
        
    -Include &lt;string[]&gt;
        Retrieves only the specified items. The value of this parameter qualifies the Path parameter. Enter a path elem
        ent or pattern, such as &quot;*.txt&quot;. Wildcards are permitted.
        
    -LiteralPath &lt;string[]&gt;
        Specifies the path to an item. Unlike Path, the value of LiteralPath is used exactly as it is typed. No charact
        ers are interpreted as wildcards. If the path includes escape characters, enclose it in single quotation marks.
         Single quotation marks tell Windows PowerShell not to interpret any characters as escape sequences.
        
    -Path &lt;string[]&gt;
        Specifies the path to an item. Get-Content retrieves the content of the item. Wildcards are permitted. The para
        meter name (&quot;Path&quot; or &quot;FilePath&quot;) is optional.
        
    -ReadCount &lt;Int64&gt;
        Specifies how many lines of content are sent through the pipeline at a time. The default value is 1. A value of
         0 (zero) sends all of the content at one time. 
        
        This parameter does not change the content displayed, but it does affect the time it takes to display the conte
        nt. As the value of ReadCount increases, the time it takes to return the first line increases, but the total ti
        me for the operation decreases. This can make a perceptible difference in very large items.
        
    -TotalCount &lt;Int64&gt;
        Specifies how many lines of content are retrieved. The default is -1 (all lines).
        
    -UseTransaction [&lt;SwitchParameter&gt;]
        Includes the command in the active transaction. This parameter is valid only when a transaction is in progress.
         For more information, see about_Transactions.
        
    &lt;CommonParameters&gt;
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer and OutVariable. For more information, type,
        &quot;get-help about_commonparameters&quot;.
    
    -------------------------- EXAMPLE 1 --------------------------
    
    C:\PS&gt;get-content -Path C:\Chapters\chapter1.txt
    
    Description
    -----------
    This command displays the content of the Chapter1.txt file on the console. It uses the Path parameter to specify th
    e name of the item. Get-Content actually passes the content down the pipeline, but because there are no other pipel
    ine elements, the content is formatted and displayed on the console.
    
    
    
    
    -------------------------- EXAMPLE 2 --------------------------
    
    C:\PS&gt;get-content c:\Logs\Log060912.txt -totalcount 50 | set-content sample.txt
    
    Description
    -----------
    This command gets the first 50 lines of the Log060912.txt file and stores them in the sample.txt file. The command 
    uses the Get-Content cmdlet to get the text in the file. (The name of Path parameter, which is optional, is omitted
    .) The TotalCount parameter limits the retrieval to the first 50 lines. The pipeline operator (|) sends the result 
    to Set-Content, which places it in the sample.txt file.
    
    
    
    
    -------------------------- EXAMPLE 3 --------------------------
    
    C:\PS&gt;(get-content cmdlets.txt -totalcount 5)[-1]
    
    Description
    -----------
    This command gets the fifth line of the Cmdlets.txt text file. It uses the TotalCount parameter to get the first fi
    ve lines and then uses array notation to get the last line (indicated by &quot;-1&quot;) of the resulting set.
    
    
    
    
REMARKS
    To see the examples, type: &quot;get-help Get-Content -examples&quot;.
    For more information, type: &quot;get-help Get-Content -detailed&quot;.
    For technical information, type: &quot;get-help Get-Content -full&quot;.
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/203619510620789132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2012/01/undocumented-powershell-2-tail.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/203619510620789132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/203619510620789132'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2012/01/undocumented-powershell-2-tail.html' title='Undocumented PowerShell 2 Tail Functionality'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5960693770564614504</id><published>2011-12-26T20:47:00.001+13:00</published><updated>2012-02-18T20:59:17.950+13:00</updated><title type='text'>New Zealand radio stations online</title><content type='html'>Below are some New Zealand radio stations that can be listened to live online. Let me know if you find any channels I haven&#39;t listed here or if any of these links don&#39;t work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.95bfm.com/bfm32.m3u&quot;&gt;b FM&lt;/a&gt; (Streaming MP3 - should work in most situations)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;javascript:void window.open(&#39;http://www.thebreeze.co.nz/Portals/0/player/akl-playerControl07.htm&#39;, &#39;mywindow&#39;,&#39;width=470,height=400,toolbar=no,resizable=no&#39;);&quot;&gt;The Breeze&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://radionetworknz-ice.streamguys.com/chonlineak.mp3.m3u&quot;&gt;Classic Hits&lt;/a&gt; (Streaming MP3 - should work in most situations)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://203.97.214.251:8000/listen.pls&quot;&gt;The Cheese&lt;/a&gt; (.PLS file)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://radionetworknz-ice.streamguys.com/coonline.mp3.m3u&quot;&gt;Coast FM&lt;/a&gt; (Streaming MP3 - should work in most situations)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.theedge.co.nz/Listen/MediaPopup/ListenLive.aspx&quot;&gt;The Edge&lt;/a&gt; (requires Flash)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://player.wizz.co.nz/flat/&quot;&gt;Flat FM&lt;/a&gt; (requires Flash)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.georgefm.co.nz/Listen.aspx&quot;&gt;George FM&lt;/a&gt; (requires Flash)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://radionetworknz-ice.streamguys.com/hkonline.mp3.m3u&quot;&gt;Hauraki&lt;/a&gt; (Streaming MP3 - should work in most situations)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kiwifm.co.nz/Portals/0/playercontrol07high.htm?tash=new&quot;&gt;Kiwi FM&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.radiolivesport.co.nz/Portals/0/Popup/listen.htm?tash=new&quot;&gt;Live Sport&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://magicmusicfm.co.nz/index.php/listen-live/windows-media-player.html&quot;&gt;Magic Music FM&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.maifm.co.nz/Home/ListenLive.aspx#popup&quot;&gt;Mai FM&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.morefm.co.nz/Listen/MediaPopup/ListenLive.aspx&quot;&gt;More FM&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://radionetworknz-ice.streamguys.com/zbonlineak.mp3.m3u&quot;&gt;Newstalk ZB&lt;/a&gt; (Streaming MP3 - should work in most situations)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stream.r1.co.nz:8090/listen.pls&quot;&gt;Radio 1 91 FM (Dunedin)&lt;/a&gt; (.PLS file)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.radiolive.co.nz/Portals/0/popup/Listen.htm&quot;&gt;RadioLIVE&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.radionz.co.nz/audio/live/national/adaptive.asx&quot;&gt;Radio New Zealand National&lt;/a&gt; (Windows Media Player)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.radionz.co.nz/audio/live/rnzi/adaptive.asx&quot;&gt;Radio New Zealand International&lt;/a&gt; (Windows Media Player)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.radionz.co.nz/audio/live/concert/adaptive.asx&quot;&gt;Radio New Zealand Concert&lt;/a&gt; (Windows Media Player)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.rdu.org.nz/listen/stream.html&quot;&gt;RDU FM (Christchurch)&lt;/a&gt; (Streaming MP3 - should work in most situations)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.therock.net.nz/Portals/0/listenonline/listen_online.htm&quot;&gt;The Rock&lt;/a&gt; (best in Internet Explorer - requires Windows Media plugin)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wmstream.mediaworks.co.nz/morefmorewa&quot;&gt;Times FM&lt;/a&gt; (Windows Media Player)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://player.wizz.co.nz/war/&quot;&gt;Wellington Access Radio&lt;/a&gt; (requires Flash)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.zmonline.co.nz/player/listenlive/&quot;&gt;ZM&lt;/a&gt; (requires Flash)&lt;/li&gt;

&lt;/ul&gt;
&lt;div&gt;
And the following live TV channels:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.parliament.nz/en-NZ/AboutParl/SeeHear/PTV/defaultwithmaori?media=wmp384withMaori&quot;&gt;Parliament TV&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5960693770564614504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/12/new-zealand-radio-stations-online.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5960693770564614504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5960693770564614504'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/12/new-zealand-radio-stations-online.html' title='New Zealand radio stations online'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7713217567976001939</id><published>2011-12-06T11:32:00.001+13:00</published><updated>2011-12-06T21:56:51.720+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript/EcmaScript"/><title type='text'>Validating a single field using MVC 3 unobtrusive validation</title><content type='html'>I recently ran into a problem using the jQuery autocomplete control with ASP.NET MVC3 unobtrusive validation. Everything worked correctly except for the scenario where the user clicked an option in the drop-down using the mouse. When this happened, the validation event was not fired against the item the user clicked because no keyboard action had taken place. The solution was to fire the validation event in the &lt;i&gt;select&lt;/i&gt; event of the autocomplete control.
&lt;br /&gt;
&lt;br /&gt;
To validate the single field using MVC 3 programatically, I used the following JavaScript:
&lt;br /&gt;
&lt;pre class=&quot;brush:js&quot;&gt;$(&quot;form&quot;).validate().element($(elementToValidate)); 
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7713217567976001939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/12/validating-single-field-using-mvc-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7713217567976001939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7713217567976001939'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/12/validating-single-field-using-mvc-3.html' title='Validating a single field using MVC 3 unobtrusive validation'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4519055181850101820</id><published>2011-11-30T21:12:00.001+13:00</published><updated>2011-11-30T22:09:59.809+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>What&#39;s new in PowerShell 3.0 / Windows 8?</title><content type='html'>After telling some Linux&amp;nbsp;aficionados&amp;nbsp;that PowerShell (&lt;a href=&quot;http://w3.linux-magazine.com/issue/78/Bash_vs._Vista_PowerShell.pdf&quot;&gt;finally&lt;/a&gt;!) allows you to script most parts of the operating system, I was curious to get a feeling for how far Microsoft has backed this scripting environment in the next version of Windows. I strongly believe that lack of a credible scripting environment has really hampered automation of repetitive tasks, and especially deployments.&lt;br /&gt;
&lt;br /&gt;
Thankfully, it looks like Microsoft has put a lot of effort into the next version of PowerShell on Windows 8.&lt;br /&gt;
&lt;br /&gt;
Below are a list of &lt;strong&gt;new&lt;/strong&gt; aliases, functions, and cmdlets. Note that not all these cmdlets are loaded into the PowerShell session by default - you will need to import the appropriate module first.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;a href=http://www.google.co.nz/search?q=%22Add-AppxPackage%22%20PowerShell&gt;Add-AppxPackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-BCDataCacheExtension%22%20PowerShell&gt;Add-BCDataCacheExtension&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-BitLockerKeyProtector%22%20PowerShell&gt;Add-BitLockerKeyProtector&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-BitLockerPassphraseProtector%22%20PowerShell&gt;Add-BitLockerPassphraseProtector&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-BitLockerStartupKey%22%20PowerShell&gt;Add-BitLockerStartupKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-DnsClientNrptRule%22%20PowerShell&gt;Add-DnsClientNrptRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-Driver%22%20PowerShell&gt;Add-Driver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-DtcClusterTMMapping%22%20PowerShell&gt;Add-DtcClusterTMMapping&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-EnrollmentPolicyServer%22%20PowerShell&gt;Add-EnrollmentPolicyServer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-ExternalKeyProtectorInternal%22%20PowerShell&gt;Add-ExternalKeyProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-InitiatorIdToMaskingSet%22%20PowerShell&gt;Add-InitiatorIdToMaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-JobTrigger%22%20PowerShell&gt;Add-JobTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-KdsRootKey%22%20PowerShell&gt;Add-KdsRootKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-NetIpHTTPsCertBinding%22%20PowerShell&gt;Add-NetIpHTTPsCertBinding&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-NetLbfoTeamMember%22%20PowerShell&gt;Add-NetLbfoTeamMember&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-NetSwitchTeamMember%22%20PowerShell&gt;Add-NetSwitchTeamMember&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-OdbcDsn%22%20PowerShell&gt;Add-OdbcDsn&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-Package%22%20PowerShell&gt;Add-Package&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-PartitionAccessPath%22%20PowerShell&gt;Add-PartitionAccessPath&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-PasswordProtectorInternal%22%20PowerShell&gt;Add-PasswordProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-PhysicalDisk%22%20PowerShell&gt;Add-PhysicalDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-Printer%22%20PowerShell&gt;Add-Printer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-PrinterDriver%22%20PowerShell&gt;Add-PrinterDriver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-PrinterPort%22%20PowerShell&gt;Add-PrinterPort&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-ProvisionedAppxPackage%22%20PowerShell&gt;Add-ProvisionedAppxPackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-RecoveryPasswordProtectorInternal%22%20PowerShell&gt;Add-RecoveryPasswordProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-SidProtectorInternal%22%20PowerShell&gt;Add-SidProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-TargetPortToMaskingSet%22%20PowerShell&gt;Add-TargetPortToMaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-TpmAndPinAndStartupKeyProtectorInternal%22%20PowerShell&gt;Add-TpmAndPinAndStartupKeyProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-TpmAndPinProtectorInternal%22%20PowerShell&gt;Add-TpmAndPinProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-TpmAndStartupKeyProtectorInternal%22%20PowerShell&gt;Add-TpmAndStartupKeyProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-TpmProtectorInternal%22%20PowerShell&gt;Add-TpmProtectorInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Add-VirtualDiskToMaskingSet%22%20PowerShell&gt;Add-VirtualDiskToMaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Apply-Unattend%22%20PowerShell&gt;Apply-Unattend&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Backup-BitLockerKeyProtector%22%20PowerShell&gt;Backup-BitLockerKeyProtector&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Backup-Protector%22%20PowerShell&gt;Backup-Protector&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Block-SmbShareAccess%22%20PowerShell&gt;Block-SmbShareAccess&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Clear-BCCache%22%20PowerShell&gt;Clear-BCCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Clear-BitLockerAutoUnlock%22%20PowerShell&gt;Clear-BitLockerAutoUnlock&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Clear-CorruptMountPoint%22%20PowerShell&gt;Clear-CorruptMountPoint&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Clear-Disk%22%20PowerShell&gt;Clear-Disk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Clear-DNSClientCache%22%20PowerShell&gt;Clear-DNSClientCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Clear-KdsCache%22%20PowerShell&gt;Clear-KdsCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Clear-Tpm%22%20PowerShell&gt;Clear-Tpm&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Close-SmbOpenFile%22%20PowerShell&gt;Close-SmbOpenFile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Close-SmbSession%22%20PowerShell&gt;Close-SmbSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22cnsn%22%20PowerShell&gt;cnsn&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Complete-DtcDiagnosticTransaction%22%20PowerShell&gt;Complete-DtcDiagnosticTransaction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Confirm-SecureBootUEFI%22%20PowerShell&gt;Confirm-SecureBootUEFI&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Connect-IscsiDiscoveredTarget%22%20PowerShell&gt;Connect-IscsiDiscoveredTarget&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Connect-PSSession%22%20PowerShell&gt;Connect-PSSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22ConvertFrom-Json%22%20PowerShell&gt;ConvertFrom-Json&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22ConvertFrom-SecureBootPolicy%22%20PowerShell&gt;ConvertFrom-SecureBootPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22ConvertTo-Json%22%20PowerShell&gt;ConvertTo-Json&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22ConvertTo-TpmOwnerAuth%22%20PowerShell&gt;ConvertTo-TpmOwnerAuth&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Copy-NetConnectionSecurityRule%22%20PowerShell&gt;Copy-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Copy-NetFirewallRule%22%20PowerShell&gt;Copy-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Copy-NetMainModeCryptoSet%22%20PowerShell&gt;Copy-NetMainModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Copy-NetMainModeRule%22%20PowerShell&gt;Copy-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Copy-NetPhase1AuthenticationSet%22%20PowerShell&gt;Copy-NetPhase1AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Copy-NetPhase2AuthenticationSet%22%20PowerShell&gt;Copy-NetPhase2AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Copy-NetQuickModeCryptoSet%22%20PowerShell&gt;Copy-NetQuickModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-BC%22%20PowerShell&gt;Disable-BC&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-BCDowngrading%22%20PowerShell&gt;Disable-BCDowngrading&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-BCServeOnBattery%22%20PowerShell&gt;Disable-BCServeOnBattery&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-Bitlocker%22%20PowerShell&gt;Disable-Bitlocker&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-BitLockerAutoUnlock%22%20PowerShell&gt;Disable-BitLockerAutoUnlock&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-DAManualSiteSelection%22%20PowerShell&gt;Disable-DAManualSiteSelection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-Feature%22%20PowerShell&gt;Disable-Feature&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-JobTrigger%22%20PowerShell&gt;Disable-JobTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-MMAgent%22%20PowerShell&gt;Disable-MMAgent&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapter%22%20PowerShell&gt;Disable-NetAdapter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterBinding%22%20PowerShell&gt;Disable-NetAdapterBinding&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterChecksumOffload%22%20PowerShell&gt;Disable-NetAdapterChecksumOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterEncapsulatedPacketTaskOffload%22%20PowerShell&gt;Disable-NetAdapterEncapsulatedPacketTaskOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterIPsecOffload%22%20PowerShell&gt;Disable-NetAdapterIPsecOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterLso%22%20PowerShell&gt;Disable-NetAdapterLso&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterPowerManagement%22%20PowerShell&gt;Disable-NetAdapterPowerManagement&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterQos%22%20PowerShell&gt;Disable-NetAdapterQos&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterRdma%22%20PowerShell&gt;Disable-NetAdapterRdma&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterRsc%22%20PowerShell&gt;Disable-NetAdapterRsc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterRss%22%20PowerShell&gt;Disable-NetAdapterRss&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterSriov%22%20PowerShell&gt;Disable-NetAdapterSriov&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetAdapterVmq%22%20PowerShell&gt;Disable-NetAdapterVmq&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetConnectionSecurityRule%22%20PowerShell&gt;Disable-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetDnsTransitionConfiguration%22%20PowerShell&gt;Disable-NetDnsTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetFirewallRule%22%20PowerShell&gt;Disable-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetIpHTTPsProfile%22%20PowerShell&gt;Disable-NetIpHTTPsProfile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetMainModeRule%22%20PowerShell&gt;Disable-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-NetNatTransitionConfiguration%22%20PowerShell&gt;Disable-NetNatTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-OdbcPerfCounter%22%20PowerShell&gt;Disable-OdbcPerfCounter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-PSTrace%22%20PowerShell&gt;Disable-PSTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-PSWSManCombinedTrace%22%20PowerShell&gt;Disable-PSWSManCombinedTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-ScheduledJob%22%20PowerShell&gt;Disable-ScheduledJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-TpmAutoProvisioning%22%20PowerShell&gt;Disable-TpmAutoProvisioning&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-WdacBidTrace%22%20PowerShell&gt;Disable-WdacBidTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disable-WSManTrace%22%20PowerShell&gt;Disable-WSManTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disconnect-IscsiDiscoveredTarget%22%20PowerShell&gt;Disconnect-IscsiDiscoveredTarget&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Disconnect-PSSession%22%20PowerShell&gt;Disconnect-PSSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Dismount-WindowsImage%22%20PowerShell&gt;Dismount-WindowsImage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22dnsn%22%20PowerShell&gt;dnsn&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BCDistributed%22%20PowerShell&gt;Enable-BCDistributed&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BCDowngrading%22%20PowerShell&gt;Enable-BCDowngrading&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BCHostedClient%22%20PowerShell&gt;Enable-BCHostedClient&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BCHostedServer%22%20PowerShell&gt;Enable-BCHostedServer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BCLocal%22%20PowerShell&gt;Enable-BCLocal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BCServeOnBattery%22%20PowerShell&gt;Enable-BCServeOnBattery&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-Bitlocker%22%20PowerShell&gt;Enable-Bitlocker&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BitLockerAutoUnlock%22%20PowerShell&gt;Enable-BitLockerAutoUnlock&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-BitLockerInternal%22%20PowerShell&gt;Enable-BitLockerInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-DAManualSiteSelection%22%20PowerShell&gt;Enable-DAManualSiteSelection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-Feature%22%20PowerShell&gt;Enable-Feature&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-JobTrigger%22%20PowerShell&gt;Enable-JobTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-MMAgent%22%20PowerShell&gt;Enable-MMAgent&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapter%22%20PowerShell&gt;Enable-NetAdapter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterBinding%22%20PowerShell&gt;Enable-NetAdapterBinding&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterChecksumOffload%22%20PowerShell&gt;Enable-NetAdapterChecksumOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterEncapsulatedPacketTaskOffload%22%20PowerShell&gt;Enable-NetAdapterEncapsulatedPacketTaskOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterIPsecOffload%22%20PowerShell&gt;Enable-NetAdapterIPsecOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterLso%22%20PowerShell&gt;Enable-NetAdapterLso&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterPowerManagement%22%20PowerShell&gt;Enable-NetAdapterPowerManagement&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterQos%22%20PowerShell&gt;Enable-NetAdapterQos&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterRdma%22%20PowerShell&gt;Enable-NetAdapterRdma&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterRsc%22%20PowerShell&gt;Enable-NetAdapterRsc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterRss%22%20PowerShell&gt;Enable-NetAdapterRss&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterSriov%22%20PowerShell&gt;Enable-NetAdapterSriov&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetAdapterVmq%22%20PowerShell&gt;Enable-NetAdapterVmq&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetConnectionSecurityRule%22%20PowerShell&gt;Enable-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetDnsTransitionConfiguration%22%20PowerShell&gt;Enable-NetDnsTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetFirewallRule%22%20PowerShell&gt;Enable-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetIpHTTPsProfile%22%20PowerShell&gt;Enable-NetIpHTTPsProfile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetMainModeRule%22%20PowerShell&gt;Enable-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-NetNatTransitionConfiguration%22%20PowerShell&gt;Enable-NetNatTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-OdbcPerfCounter%22%20PowerShell&gt;Enable-OdbcPerfCounter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-PSTrace%22%20PowerShell&gt;Enable-PSTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-PSWSManCombinedTrace%22%20PowerShell&gt;Enable-PSWSManCombinedTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-Sample%22%20PowerShell&gt;Enable-Sample&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-Sample2%22%20PowerShell&gt;Enable-Sample2&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-Sample3%22%20PowerShell&gt;Enable-Sample3&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-ScheduledJob%22%20PowerShell&gt;Enable-ScheduledJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-TpmAutoProvisioning%22%20PowerShell&gt;Enable-TpmAutoProvisioning&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-WdacBidTrace%22%20PowerShell&gt;Enable-WdacBidTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Enable-WSManTrace%22%20PowerShell&gt;Enable-WSManTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Export-BCCachePackage%22%20PowerShell&gt;Export-BCCachePackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Export-BCSecretKey%22%20PowerShell&gt;Export-BCSecretKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Export-Certificate%22%20PowerShell&gt;Export-Certificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Export-CimCommand%22%20PowerShell&gt;Export-CimCommand&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Export-PfxCertificate%22%20PowerShell&gt;Export-PfxCertificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Format-SecureBootUEFI%22%20PowerShell&gt;Format-SecureBootUEFI&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Format-Volume%22%20PowerShell&gt;Format-Volume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-AppxLastError%22%20PowerShell&gt;Get-AppxLastError&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-AppxPackage%22%20PowerShell&gt;Get-AppxPackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-AppxPackageManifest%22%20PowerShell&gt;Get-AppxPackageManifest&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-AutoEnrollmentPolicy%22%20PowerShell&gt;Get-AutoEnrollmentPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCClientSettings%22%20PowerShell&gt;Get-BCClientSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCContentServerSettings%22%20PowerShell&gt;Get-BCContentServerSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCDataCache%22%20PowerShell&gt;Get-BCDataCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCDataCacheExtension%22%20PowerShell&gt;Get-BCDataCacheExtension&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCHashCache%22%20PowerShell&gt;Get-BCHashCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCHostedCacheServerSettings%22%20PowerShell&gt;Get-BCHostedCacheServerSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCNetworkSettings%22%20PowerShell&gt;Get-BCNetworkSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BCStatus%22%20PowerShell&gt;Get-BCStatus&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BitLockerVolume%22%20PowerShell&gt;Get-BitLockerVolume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-BitLockerVolumeInternal%22%20PowerShell&gt;Get-BitLockerVolumeInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Certificate%22%20PowerShell&gt;Get-Certificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-CertificateNotificationTask%22%20PowerShell&gt;Get-CertificateNotificationTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-CimAssociatedInstance%22%20PowerShell&gt;Get-CimAssociatedInstance&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-CimClass%22%20PowerShell&gt;Get-CimClass&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-CimInstance%22%20PowerShell&gt;Get-CimInstance&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-CimSession%22%20PowerShell&gt;Get-CimSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ClusteredScheduledTask%22%20PowerShell&gt;Get-ClusteredScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ClusteredScheduledTaskInfo%22%20PowerShell&gt;Get-ClusteredScheduledTaskInfo&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ControlPanelItem%22%20PowerShell&gt;Get-ControlPanelItem&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DAClientExperienceSettings%22%20PowerShell&gt;Get-DAClientExperienceSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DAConnectionStatus%22%20PowerShell&gt;Get-DAConnectionStatus&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DAPolicyChange%22%20PowerShell&gt;Get-DAPolicyChange&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DASiteTableEntry%22%20PowerShell&gt;Get-DASiteTableEntry&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Disk%22%20PowerShell&gt;Get-Disk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DNSClient%22%20PowerShell&gt;Get-DNSClient&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DNSClientCache%22%20PowerShell&gt;Get-DNSClientCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DnsClientEffectiveNrptPolicy%22%20PowerShell&gt;Get-DnsClientEffectiveNrptPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DnsClientNrptGlobal%22%20PowerShell&gt;Get-DnsClientNrptGlobal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DnsClientNrptRule%22%20PowerShell&gt;Get-DnsClientNrptRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DNSGlobalSettings%22%20PowerShell&gt;Get-DNSGlobalSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DNSServerAddress%22%20PowerShell&gt;Get-DNSServerAddress&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Driver%22%20PowerShell&gt;Get-Driver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Dtc%22%20PowerShell&gt;Get-Dtc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcAdvancedHostSetting%22%20PowerShell&gt;Get-DtcAdvancedHostSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcAdvancedSetting%22%20PowerShell&gt;Get-DtcAdvancedSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcClusterDefault%22%20PowerShell&gt;Get-DtcClusterDefault&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcClusterTMMapping%22%20PowerShell&gt;Get-DtcClusterTMMapping&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcDefault%22%20PowerShell&gt;Get-DtcDefault&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcLog%22%20PowerShell&gt;Get-DtcLog&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcNetworkSetting%22%20PowerShell&gt;Get-DtcNetworkSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcTransaction%22%20PowerShell&gt;Get-DtcTransaction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcTransactionsStatistics%22%20PowerShell&gt;Get-DtcTransactionsStatistics&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcTransactionsTraceSession%22%20PowerShell&gt;Get-DtcTransactionsTraceSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-DtcTransactionsTraceSetting%22%20PowerShell&gt;Get-DtcTransactionsTraceSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Edition%22%20PowerShell&gt;Get-Edition&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-EncryptableVolume%22%20PowerShell&gt;Get-EncryptableVolume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-EncryptableVolumes%22%20PowerShell&gt;Get-EncryptableVolumes&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-EnrollmentPolicyServer%22%20PowerShell&gt;Get-EnrollmentPolicyServer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ExceptionForHrInternal%22%20PowerShell&gt;Get-ExceptionForHrInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Feature%22%20PowerShell&gt;Get-Feature&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-InitiatorId%22%20PowerShell&gt;Get-InitiatorId&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-InitiatorPort%22%20PowerShell&gt;Get-InitiatorPort&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-IscsiConnection%22%20PowerShell&gt;Get-IscsiConnection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-IscsiDiscoveredTarget%22%20PowerShell&gt;Get-IscsiDiscoveredTarget&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-IscsiPersistentTarget%22%20PowerShell&gt;Get-IscsiPersistentTarget&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-IscsiSession%22%20PowerShell&gt;Get-IscsiSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-IscsiTargetPortal%22%20PowerShell&gt;Get-IscsiTargetPortal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-JobTrigger%22%20PowerShell&gt;Get-JobTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-KdsConfiguration%22%20PowerShell&gt;Get-KdsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-KdsRootKey%22%20PowerShell&gt;Get-KdsRootKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-LogProperties%22%20PowerShell&gt;Get-LogProperties&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-MaskingSet%22%20PowerShell&gt;Get-MaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NCSIPolicyConfiguration%22%20PowerShell&gt;Get-NCSIPolicyConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Net6to4Configuration%22%20PowerShell&gt;Get-Net6to4Configuration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Net6to4State%22%20PowerShell&gt;Get-Net6to4State&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapter%22%20PowerShell&gt;Get-NetAdapter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterAdvancedProperty%22%20PowerShell&gt;Get-NetAdapterAdvancedProperty&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterBinding%22%20PowerShell&gt;Get-NetAdapterBinding&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterChecksumOffload%22%20PowerShell&gt;Get-NetAdapterChecksumOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterEncapsulatedPacketTaskOffload%22%20PowerShell&gt;Get-NetAdapterEncapsulatedPacketTaskOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterHardwareInfo%22%20PowerShell&gt;Get-NetAdapterHardwareInfo&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterIPsecOffload%22%20PowerShell&gt;Get-NetAdapterIPsecOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterLso%22%20PowerShell&gt;Get-NetAdapterLso&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterPowerManagement%22%20PowerShell&gt;Get-NetAdapterPowerManagement&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterQos%22%20PowerShell&gt;Get-NetAdapterQos&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterRdma%22%20PowerShell&gt;Get-NetAdapterRdma&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterRsc%22%20PowerShell&gt;Get-NetAdapterRsc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterRss%22%20PowerShell&gt;Get-NetAdapterRss&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterSriov%22%20PowerShell&gt;Get-NetAdapterSriov&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterSriovVf%22%20PowerShell&gt;Get-NetAdapterSriovVf&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterStatistics%22%20PowerShell&gt;Get-NetAdapterStatistics&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterVmq%22%20PowerShell&gt;Get-NetAdapterVmq&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterVMQQueue%22%20PowerShell&gt;Get-NetAdapterVMQQueue&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAdapterVPort%22%20PowerShell&gt;Get-NetAdapterVPort&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetAddressFilter%22%20PowerShell&gt;Get-NetAddressFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetApplicationFilter%22%20PowerShell&gt;Get-NetApplicationFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetConnectionSecurityRule%22%20PowerShell&gt;Get-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetDnsTransitionConfiguration%22%20PowerShell&gt;Get-NetDnsTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetDnsTransitionMonitoring%22%20PowerShell&gt;Get-NetDnsTransitionMonitoring&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetFirewallProfile%22%20PowerShell&gt;Get-NetFirewallProfile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetFirewallRule%22%20PowerShell&gt;Get-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetInterfaceFilter%22%20PowerShell&gt;Get-NetInterfaceFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetInterfaceTypeFilter%22%20PowerShell&gt;Get-NetInterfaceTypeFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetIPAddress%22%20PowerShell&gt;Get-NetIPAddress&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetIpHTTPsConfiguration%22%20PowerShell&gt;Get-NetIpHTTPsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetIpHTTPsState%22%20PowerShell&gt;Get-NetIpHTTPsState&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetIPInterface%22%20PowerShell&gt;Get-NetIPInterface&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetIPv4Protocol%22%20PowerShell&gt;Get-NetIPv4Protocol&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetIPv6Protocol%22%20PowerShell&gt;Get-NetIPv6Protocol&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetISATAPConfiguration%22%20PowerShell&gt;Get-NetISATAPConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetISATAPState%22%20PowerShell&gt;Get-NetISATAPState&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetLbfoTeam%22%20PowerShell&gt;Get-NetLbfoTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetLbfoTeamMember%22%20PowerShell&gt;Get-NetLbfoTeamMember&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetLbfoTeamNic%22%20PowerShell&gt;Get-NetLbfoTeamNic&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetMainModeCryptoSet%22%20PowerShell&gt;Get-NetMainModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetMainModeRule%22%20PowerShell&gt;Get-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetMainModeSA%22%20PowerShell&gt;Get-NetMainModeSA&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetNatTransitionConfiguration%22%20PowerShell&gt;Get-NetNatTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetNatTransitionMonitoring%22%20PowerShell&gt;Get-NetNatTransitionMonitoring&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetNeighbor%22%20PowerShell&gt;Get-NetNeighbor&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetOffloadGlobalSetting%22%20PowerShell&gt;Get-NetOffloadGlobalSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetPhase1AuthenticationSet%22%20PowerShell&gt;Get-NetPhase1AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetPhase2AuthenticationSet%22%20PowerShell&gt;Get-NetPhase2AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetPrefixPolicy%22%20PowerShell&gt;Get-NetPrefixPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetProtocolPortFilter%22%20PowerShell&gt;Get-NetProtocolPortFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetQosPolicy%22%20PowerShell&gt;Get-NetQosPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetQuickModeCryptoSet%22%20PowerShell&gt;Get-NetQuickModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetQuickModeSA%22%20PowerShell&gt;Get-NetQuickModeSA&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetRoute%22%20PowerShell&gt;Get-NetRoute&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetSecurityFilter%22%20PowerShell&gt;Get-NetSecurityFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetSecuritySettingData%22%20PowerShell&gt;Get-NetSecuritySettingData&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetServiceFilter%22%20PowerShell&gt;Get-NetServiceFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetSwitchTeam%22%20PowerShell&gt;Get-NetSwitchTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetSwitchTeamMember%22%20PowerShell&gt;Get-NetSwitchTeamMember&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetTCPConnection%22%20PowerShell&gt;Get-NetTCPConnection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetTCPSetting%22%20PowerShell&gt;Get-NetTCPSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetTeredoConfiguration%22%20PowerShell&gt;Get-NetTeredoConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetTeredoState%22%20PowerShell&gt;Get-NetTeredoState&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetTransportFilter%22%20PowerShell&gt;Get-NetTransportFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetUDPConnection%22%20PowerShell&gt;Get-NetUDPConnection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-NetUDPSetting%22%20PowerShell&gt;Get-NetUDPSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-OdbcDriver%22%20PowerShell&gt;Get-OdbcDriver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-OdbcDsn%22%20PowerShell&gt;Get-OdbcDsn&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-OdbcPerfCounter%22%20PowerShell&gt;Get-OdbcPerfCounter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Package%22%20PowerShell&gt;Get-Package&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Partition%22%20PowerShell&gt;Get-Partition&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PartitionAccessPath%22%20PowerShell&gt;Get-PartitionAccessPath&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PartitionSupportedSizes%22%20PowerShell&gt;Get-PartitionSupportedSizes&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PfxData%22%20PowerShell&gt;Get-PfxData&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PhysicalDisk%22%20PowerShell&gt;Get-PhysicalDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PrintConfig%22%20PowerShell&gt;Get-PrintConfig&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Printer%22%20PowerShell&gt;Get-Printer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PrinterDriver%22%20PowerShell&gt;Get-PrinterDriver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PrinterPort%22%20PowerShell&gt;Get-PrinterPort&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-PrintJob%22%20PowerShell&gt;Get-PrintJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Protectors%22%20PowerShell&gt;Get-Protectors&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ProvisionedAppxPackage%22%20PowerShell&gt;Get-ProvisionedAppxPackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-RecoveryKeyProtectorsCountInternal%22%20PowerShell&gt;Get-RecoveryKeyProtectorsCountInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ScheduledJob%22%20PowerShell&gt;Get-ScheduledJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ScheduledJobOption%22%20PowerShell&gt;Get-ScheduledJobOption&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ScheduledTask%22%20PowerShell&gt;Get-ScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-ScheduledTaskInfo%22%20PowerShell&gt;Get-ScheduledTaskInfo&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SecureBootUEFI%22%20PowerShell&gt;Get-SecureBootUEFI&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbClientConfiguration%22%20PowerShell&gt;Get-SmbClientConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbClientNetworkInterface%22%20PowerShell&gt;Get-SmbClientNetworkInterface&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbConnection%22%20PowerShell&gt;Get-SmbConnection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbConnectionNetworkInterface%22%20PowerShell&gt;Get-SmbConnectionNetworkInterface&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbOpenFile%22%20PowerShell&gt;Get-SmbOpenFile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbServerConfiguration%22%20PowerShell&gt;Get-SmbServerConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbServerNetworkInterface%22%20PowerShell&gt;Get-SmbServerNetworkInterface&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbSession%22%20PowerShell&gt;Get-SmbSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbShare%22%20PowerShell&gt;Get-SmbShare&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbShareAccess%22%20PowerShell&gt;Get-SmbShareAccess&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbWitnessCluster%22%20PowerShell&gt;Get-SmbWitnessCluster&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbWitnessClusterClient%22%20PowerShell&gt;Get-SmbWitnessClusterClient&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-SmbWitnessClusterResource%22%20PowerShell&gt;Get-SmbWitnessClusterResource&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-StorageAttributes%22%20PowerShell&gt;Get-StorageAttributes&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-StoragePool%22%20PowerShell&gt;Get-StoragePool&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-StorageProvider%22%20PowerShell&gt;Get-StorageProvider&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-StorageSettings%22%20PowerShell&gt;Get-StorageSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-StorageSubSystem%22%20PowerShell&gt;Get-StorageSubSystem&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-TargetPort%22%20PowerShell&gt;Get-TargetPort&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Tpm%22%20PowerShell&gt;Get-Tpm&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-TypeData%22%20PowerShell&gt;Get-TypeData&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-VirtualDisk%22%20PowerShell&gt;Get-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-VirtualDiskSupportedSizes%22%20PowerShell&gt;Get-VirtualDiskSupportedSizes&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Volume%22%20PowerShell&gt;Get-Volume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-WdacBidTrace%22%20PowerShell&gt;Get-WdacBidTrace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-Win32EncryptableVolumeInternal%22%20PowerShell&gt;Get-Win32EncryptableVolumeInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Get-WindowsImage%22%20PowerShell&gt;Get-WindowsImage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Grant-SmbShareAccess%22%20PowerShell&gt;Grant-SmbShareAccess&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Hide-VirtualDisk%22%20PowerShell&gt;Hide-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Import-BCCachePackage%22%20PowerShell&gt;Import-BCCachePackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Import-BCSecretKey%22%20PowerShell&gt;Import-BCSecretKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Import-Certificate%22%20PowerShell&gt;Import-Certificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Import-PfxCertificate%22%20PowerShell&gt;Import-PfxCertificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Import-PSWorkflow%22%20PowerShell&gt;Import-PSWorkflow&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Import-TpmOwnerAuth%22%20PowerShell&gt;Import-TpmOwnerAuth&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Initialize-Disk%22%20PowerShell&gt;Initialize-Disk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Initialize-Tpm%22%20PowerShell&gt;Initialize-Tpm&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Initialize-Volume%22%20PowerShell&gt;Initialize-Volume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Install-Dtc%22%20PowerShell&gt;Install-Dtc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Install-SecureBootPolicy%22%20PowerShell&gt;Install-SecureBootPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Invoke-CimMethod%22%20PowerShell&gt;Invoke-CimMethod&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Invoke-RestMethod%22%20PowerShell&gt;Invoke-RestMethod&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Invoke-WebRequest%22%20PowerShell&gt;Invoke-WebRequest&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22irm%22%20PowerShell&gt;irm&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22iwr%22%20PowerShell&gt;iwr&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Join-DtcDiagnosticResourceManager%22%20PowerShell&gt;Join-DtcDiagnosticResourceManager&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Lock-BitLocker%22%20PowerShell&gt;Lock-BitLocker&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Mount-WindowsImage%22%20PowerShell&gt;Mount-WindowsImage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Move-SmbWitnessClusterClient%22%20PowerShell&gt;Move-SmbWitnessClusterClient&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-CertificateNotificationTask%22%20PowerShell&gt;New-CertificateNotificationTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-CimInstance%22%20PowerShell&gt;New-CimInstance&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-CimSession%22%20PowerShell&gt;New-CimSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-CimSessionOption%22%20PowerShell&gt;New-CimSessionOption&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-DASiteTableEntry%22%20PowerShell&gt;New-DASiteTableEntry&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-DtcDiagnosticTransaction%22%20PowerShell&gt;New-DtcDiagnosticTransaction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-IscsiTargetPortal%22%20PowerShell&gt;New-IscsiTargetPortal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-JobTrigger%22%20PowerShell&gt;New-JobTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-MaskingSet%22%20PowerShell&gt;New-MaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetAdapterAdvancedProperty%22%20PowerShell&gt;New-NetAdapterAdvancedProperty&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetAuthenticationProposal%22%20PowerShell&gt;New-NetAuthenticationProposal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetConnectionSecurityRule%22%20PowerShell&gt;New-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetFirewallRule%22%20PowerShell&gt;New-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetIPAddress%22%20PowerShell&gt;New-NetIPAddress&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetIpHTTPsConfiguration%22%20PowerShell&gt;New-NetIpHTTPsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetLbfoTeam%22%20PowerShell&gt;New-NetLbfoTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetLbfoTeamNic%22%20PowerShell&gt;New-NetLbfoTeamNic&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetMainModeCryptoProposal%22%20PowerShell&gt;New-NetMainModeCryptoProposal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetMainModeCryptoSet%22%20PowerShell&gt;New-NetMainModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetMainModeRule%22%20PowerShell&gt;New-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetNatTransitionConfiguration%22%20PowerShell&gt;New-NetNatTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetNeighbor%22%20PowerShell&gt;New-NetNeighbor&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetPhase1AuthenticationSet%22%20PowerShell&gt;New-NetPhase1AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetPhase2AuthenticationSet%22%20PowerShell&gt;New-NetPhase2AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetPrefixPolicy%22%20PowerShell&gt;New-NetPrefixPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetQosPolicy%22%20PowerShell&gt;New-NetQosPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetQuickModeCryptoProposal%22%20PowerShell&gt;New-NetQuickModeCryptoProposal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetQuickModeCryptoSet%22%20PowerShell&gt;New-NetQuickModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetRoute%22%20PowerShell&gt;New-NetRoute&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetSwitchTeam%22%20PowerShell&gt;New-NetSwitchTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-NetTransportFilter%22%20PowerShell&gt;New-NetTransportFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-Partition%22%20PowerShell&gt;New-Partition&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-PSSessionConfigurationFile%22%20PowerShell&gt;New-PSSessionConfigurationFile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-PSTransportOption%22%20PowerShell&gt;New-PSTransportOption&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-PSWorkflowExecutionOption%22%20PowerShell&gt;New-PSWorkflowExecutionOption&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-ScheduledJobOption%22%20PowerShell&gt;New-ScheduledJobOption&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-ScheduledTask%22%20PowerShell&gt;New-ScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-ScheduledTaskAction%22%20PowerShell&gt;New-ScheduledTaskAction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-ScheduledTaskPrincipal%22%20PowerShell&gt;New-ScheduledTaskPrincipal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-ScheduledTaskSettings%22%20PowerShell&gt;New-ScheduledTaskSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-ScheduledTaskTrigger%22%20PowerShell&gt;New-ScheduledTaskTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-SelfSignedCertificate%22%20PowerShell&gt;New-SelfSignedCertificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-SmbConnection%22%20PowerShell&gt;New-SmbConnection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-SmbShare%22%20PowerShell&gt;New-SmbShare&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-StoragePool%22%20PowerShell&gt;New-StoragePool&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-StorageSubSystemVirtualDisk%22%20PowerShell&gt;New-StorageSubSystemVirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-VirtualDisk%22%20PowerShell&gt;New-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-VirtualDiskClone%22%20PowerShell&gt;New-VirtualDiskClone&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-VirtualDiskSnapshot%22%20PowerShell&gt;New-VirtualDiskSnapshot&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22New-WinEvent%22%20PowerShell&gt;New-WinEvent&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Open-NetGPO%22%20PowerShell&gt;Open-NetGPO&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Optimize-Volume%22%20PowerShell&gt;Optimize-Volume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22oss%22%20PowerShell&gt;oss&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Publish-BCFileHashes%22%20PowerShell&gt;Publish-BCFileHashes&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Publish-BCWebHashes%22%20PowerShell&gt;Publish-BCWebHashes&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22rcsn%22%20PowerShell&gt;rcsn&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Receive-DtcDiagnosticTransaction%22%20PowerShell&gt;Receive-DtcDiagnosticTransaction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Receive-PSSession%22%20PowerShell&gt;Receive-PSSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Register-CimIndicationEvent%22%20PowerShell&gt;Register-CimIndicationEvent&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Register-ClusteredScheduledTask%22%20PowerShell&gt;Register-ClusteredScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Register-IscsiPersistentTarget%22%20PowerShell&gt;Register-IscsiPersistentTarget&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Register-JobEvent%22%20PowerShell&gt;Register-JobEvent&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Register-ScheduledJob%22%20PowerShell&gt;Register-ScheduledJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Register-ScheduledTask%22%20PowerShell&gt;Register-ScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-AppxPackage%22%20PowerShell&gt;Remove-AppxPackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-BCDataCacheExtension%22%20PowerShell&gt;Remove-BCDataCacheExtension&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-BitlockerKeyProtector%22%20PowerShell&gt;Remove-BitlockerKeyProtector&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-CertificateNotificationTask%22%20PowerShell&gt;Remove-CertificateNotificationTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-CimInstance%22%20PowerShell&gt;Remove-CimInstance&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-CimSession%22%20PowerShell&gt;Remove-CimSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-DASiteTableEntry%22%20PowerShell&gt;Remove-DASiteTableEntry&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-DnsClientNrptRule%22%20PowerShell&gt;Remove-DnsClientNrptRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-Driver%22%20PowerShell&gt;Remove-Driver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-DtcClusterTMMapping%22%20PowerShell&gt;Remove-DtcClusterTMMapping&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-EnrollmentPolicyServer%22%20PowerShell&gt;Remove-EnrollmentPolicyServer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-InitiatorId%22%20PowerShell&gt;Remove-InitiatorId&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-InitiatorIdFromMaskingSet%22%20PowerShell&gt;Remove-InitiatorIdFromMaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-IscsiTargetPortal%22%20PowerShell&gt;Remove-IscsiTargetPortal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-JobTrigger%22%20PowerShell&gt;Remove-JobTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-KeyProtectorByTypeInternal%22%20PowerShell&gt;Remove-KeyProtectorByTypeInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-MaskingSet%22%20PowerShell&gt;Remove-MaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetAdapterAdvancedProperty%22%20PowerShell&gt;Remove-NetAdapterAdvancedProperty&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetConnectionSecurityRule%22%20PowerShell&gt;Remove-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetFirewallRule%22%20PowerShell&gt;Remove-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetIPAddress%22%20PowerShell&gt;Remove-NetIPAddress&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetIpHTTPsCertBinding%22%20PowerShell&gt;Remove-NetIpHTTPsCertBinding&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetIpHTTPsConfiguration%22%20PowerShell&gt;Remove-NetIpHTTPsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetLbfoTeam%22%20PowerShell&gt;Remove-NetLbfoTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetLbfoTeamMember%22%20PowerShell&gt;Remove-NetLbfoTeamMember&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetLbfoTeamNic%22%20PowerShell&gt;Remove-NetLbfoTeamNic&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetMainModeCryptoSet%22%20PowerShell&gt;Remove-NetMainModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetMainModeRule%22%20PowerShell&gt;Remove-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetMainModeSA%22%20PowerShell&gt;Remove-NetMainModeSA&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetNatTransitionConfiguration%22%20PowerShell&gt;Remove-NetNatTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetNeighbor%22%20PowerShell&gt;Remove-NetNeighbor&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetPhase1AuthenticationSet%22%20PowerShell&gt;Remove-NetPhase1AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetPhase2AuthenticationSet%22%20PowerShell&gt;Remove-NetPhase2AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetPrefixPolicy%22%20PowerShell&gt;Remove-NetPrefixPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetQosPolicy%22%20PowerShell&gt;Remove-NetQosPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetQuickModeCryptoSet%22%20PowerShell&gt;Remove-NetQuickModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetQuickModeSA%22%20PowerShell&gt;Remove-NetQuickModeSA&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetRoute%22%20PowerShell&gt;Remove-NetRoute&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetSwitchTeam%22%20PowerShell&gt;Remove-NetSwitchTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetSwitchTeamMember%22%20PowerShell&gt;Remove-NetSwitchTeamMember&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-NetTransportFilter%22%20PowerShell&gt;Remove-NetTransportFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-OdbcDsn%22%20PowerShell&gt;Remove-OdbcDsn&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-Package%22%20PowerShell&gt;Remove-Package&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-Partition%22%20PowerShell&gt;Remove-Partition&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-PartitionAccessPath%22%20PowerShell&gt;Remove-PartitionAccessPath&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-PhysicalDisk%22%20PowerShell&gt;Remove-PhysicalDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-Printer%22%20PowerShell&gt;Remove-Printer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-PrinterDriver%22%20PowerShell&gt;Remove-PrinterDriver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-PrinterPort%22%20PowerShell&gt;Remove-PrinterPort&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-PrintJob%22%20PowerShell&gt;Remove-PrintJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-ProvisionedAppxPackage%22%20PowerShell&gt;Remove-ProvisionedAppxPackage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-SmbConnection%22%20PowerShell&gt;Remove-SmbConnection&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-SmbShare%22%20PowerShell&gt;Remove-SmbShare&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-StoragePool%22%20PowerShell&gt;Remove-StoragePool&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-TargetPortFromMaskingSet%22%20PowerShell&gt;Remove-TargetPortFromMaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-TypeData%22%20PowerShell&gt;Remove-TypeData&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-VirtualDisk%22%20PowerShell&gt;Remove-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Remove-VirtualDiskFromMaskingSet%22%20PowerShell&gt;Remove-VirtualDiskFromMaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-Computer%22%20PowerShell&gt;Rename-Computer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-DASiteTableEntry%22%20PowerShell&gt;Rename-DASiteTableEntry&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-MaskingSet%22%20PowerShell&gt;Rename-MaskingSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetAdapter%22%20PowerShell&gt;Rename-NetAdapter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetConnectionSecurityRule%22%20PowerShell&gt;Rename-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetFirewallRule%22%20PowerShell&gt;Rename-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetIpHTTPsConfiguration%22%20PowerShell&gt;Rename-NetIpHTTPsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetLbfoTeam%22%20PowerShell&gt;Rename-NetLbfoTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetMainModeCryptoSet%22%20PowerShell&gt;Rename-NetMainModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetMainModeRule%22%20PowerShell&gt;Rename-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetPhase1AuthenticationSet%22%20PowerShell&gt;Rename-NetPhase1AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetPhase2AuthenticationSet%22%20PowerShell&gt;Rename-NetPhase2AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetQuickModeCryptoSet%22%20PowerShell&gt;Rename-NetQuickModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-NetSwitchTeam%22%20PowerShell&gt;Rename-NetSwitchTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Rename-Printer%22%20PowerShell&gt;Rename-Printer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Repair-SecureBootPolicy%22%20PowerShell&gt;Repair-SecureBootPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Repair-VirtualDisk%22%20PowerShell&gt;Repair-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Repair-Volume%22%20PowerShell&gt;Repair-Volume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Repair-WindowsImage%22%20PowerShell&gt;Repair-WindowsImage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-BC%22%20PowerShell&gt;Reset-BC&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-DAClientExperienceSettings%22%20PowerShell&gt;Reset-DAClientExperienceSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-DASiteTableEntry%22%20PowerShell&gt;Reset-DASiteTableEntry&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-DtcLog%22%20PowerShell&gt;Reset-DtcLog&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NCSIPolicyConfiguration%22%20PowerShell&gt;Reset-NCSIPolicyConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-Net6to4Configuration%22%20PowerShell&gt;Reset-Net6to4Configuration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NetAdapterAdvancedProperty%22%20PowerShell&gt;Reset-NetAdapterAdvancedProperty&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NetDnsTransitionConfiguration%22%20PowerShell&gt;Reset-NetDnsTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NetIpHTTPsConfiguration%22%20PowerShell&gt;Reset-NetIpHTTPsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NetISATAPConfiguration%22%20PowerShell&gt;Reset-NetISATAPConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NetNatTransitionConfiguration%22%20PowerShell&gt;Reset-NetNatTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NetRoute%22%20PowerShell&gt;Reset-NetRoute&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Reset-NetTeredoConfiguration%22%20PowerShell&gt;Reset-NetTeredoConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Resize-Partition%22%20PowerShell&gt;Resize-Partition&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Resize-VirtualDisk%22%20PowerShell&gt;Resize-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Resolve-DnsName%22%20PowerShell&gt;Resolve-DnsName&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Restart-NetAdapter%22%20PowerShell&gt;Restart-NetAdapter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Restart-PrintJob%22%20PowerShell&gt;Restart-PrintJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Resume-BitLocker%22%20PowerShell&gt;Resume-BitLocker&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Resume-Job%22%20PowerShell&gt;Resume-Job&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Resume-PrintJob%22%20PowerShell&gt;Resume-PrintJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Revoke-SmbShareAccess%22%20PowerShell&gt;Revoke-SmbShareAccess&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22rujb%22%20PowerShell&gt;rujb&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Save-Help%22%20PowerShell&gt;Save-Help&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Save-NetGPO%22%20PowerShell&gt;Save-NetGPO&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Save-WindowsImage%22%20PowerShell&gt;Save-WindowsImage&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Send-DtcDiagnosticTransaction%22%20PowerShell&gt;Send-DtcDiagnosticTransaction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-AutoEnrollmentPolicy%22%20PowerShell&gt;Set-AutoEnrollmentPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-BCAuthentication%22%20PowerShell&gt;Set-BCAuthentication&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-BCCache%22%20PowerShell&gt;Set-BCCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-BCMinSMBLatency%22%20PowerShell&gt;Set-BCMinSMBLatency&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-BCSecretKey%22%20PowerShell&gt;Set-BCSecretKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-BitLockerVolumeInternal%22%20PowerShell&gt;Set-BitLockerVolumeInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-CimInstance%22%20PowerShell&gt;Set-CimInstance&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-ClusteredScheduledTask%22%20PowerShell&gt;Set-ClusteredScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DAClientExperienceSettings%22%20PowerShell&gt;Set-DAClientExperienceSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DASiteTableEntry%22%20PowerShell&gt;Set-DASiteTableEntry&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-Disk%22%20PowerShell&gt;Set-Disk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DNSClient%22%20PowerShell&gt;Set-DNSClient&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DnsClientNrptGlobal%22%20PowerShell&gt;Set-DnsClientNrptGlobal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DnsClientNrptRule%22%20PowerShell&gt;Set-DnsClientNrptRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DNSGlobalSettings%22%20PowerShell&gt;Set-DNSGlobalSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcAdvancedHostSetting%22%20PowerShell&gt;Set-DtcAdvancedHostSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcAdvancedSetting%22%20PowerShell&gt;Set-DtcAdvancedSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcClusterDefault%22%20PowerShell&gt;Set-DtcClusterDefault&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcClusterTMMapping%22%20PowerShell&gt;Set-DtcClusterTMMapping&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcDefault%22%20PowerShell&gt;Set-DtcDefault&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcLog%22%20PowerShell&gt;Set-DtcLog&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcNetworkSetting%22%20PowerShell&gt;Set-DtcNetworkSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcTransaction%22%20PowerShell&gt;Set-DtcTransaction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcTransactionsTraceSession%22%20PowerShell&gt;Set-DtcTransactionsTraceSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-DtcTransactionsTraceSetting%22%20PowerShell&gt;Set-DtcTransactionsTraceSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-Edition%22%20PowerShell&gt;Set-Edition&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-InitiatorPort%22%20PowerShell&gt;Set-InitiatorPort&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-IscsiInitiator%22%20PowerShell&gt;Set-IscsiInitiator&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-JobTrigger%22%20PowerShell&gt;Set-JobTrigger&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-KdsConfiguration%22%20PowerShell&gt;Set-KdsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-LogProperties%22%20PowerShell&gt;Set-LogProperties&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-MMAgent%22%20PowerShell&gt;Set-MMAgent&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NCSIPolicyConfiguration%22%20PowerShell&gt;Set-NCSIPolicyConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-Net6to4Configuration%22%20PowerShell&gt;Set-Net6to4Configuration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapter%22%20PowerShell&gt;Set-NetAdapter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterAdvancedProperty%22%20PowerShell&gt;Set-NetAdapterAdvancedProperty&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterBinding%22%20PowerShell&gt;Set-NetAdapterBinding&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterChecksumOffload%22%20PowerShell&gt;Set-NetAdapterChecksumOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterEncapsulatedPacketTaskOffload%22%20PowerShell&gt;Set-NetAdapterEncapsulatedPacketTaskOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterIPsecOffload%22%20PowerShell&gt;Set-NetAdapterIPsecOffload&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterLso%22%20PowerShell&gt;Set-NetAdapterLso&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterPowerManagement%22%20PowerShell&gt;Set-NetAdapterPowerManagement&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterQos%22%20PowerShell&gt;Set-NetAdapterQos&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterRdma%22%20PowerShell&gt;Set-NetAdapterRdma&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterRsc%22%20PowerShell&gt;Set-NetAdapterRsc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterRss%22%20PowerShell&gt;Set-NetAdapterRss&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterSriov%22%20PowerShell&gt;Set-NetAdapterSriov&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAdapterVmq%22%20PowerShell&gt;Set-NetAdapterVmq&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetAddressFilter%22%20PowerShell&gt;Set-NetAddressFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetApplicationFilter%22%20PowerShell&gt;Set-NetApplicationFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetConnectionSecurityRule%22%20PowerShell&gt;Set-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetDnsTransitionConfiguration%22%20PowerShell&gt;Set-NetDnsTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetFirewallProfile%22%20PowerShell&gt;Set-NetFirewallProfile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetFirewallRule%22%20PowerShell&gt;Set-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetInterfaceFilter%22%20PowerShell&gt;Set-NetInterfaceFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetInterfaceTypeFilter%22%20PowerShell&gt;Set-NetInterfaceTypeFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetIPAddress%22%20PowerShell&gt;Set-NetIPAddress&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetIpHTTPsConfiguration%22%20PowerShell&gt;Set-NetIpHTTPsConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetIPInterface%22%20PowerShell&gt;Set-NetIPInterface&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetIPv4Protocol%22%20PowerShell&gt;Set-NetIPv4Protocol&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetIPv6Protocol%22%20PowerShell&gt;Set-NetIPv6Protocol&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetISATAPConfiguration%22%20PowerShell&gt;Set-NetISATAPConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetLbfoTeam%22%20PowerShell&gt;Set-NetLbfoTeam&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetLbfoTeamMember%22%20PowerShell&gt;Set-NetLbfoTeamMember&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetLbfoTeamNic%22%20PowerShell&gt;Set-NetLbfoTeamNic&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetMainModeCryptoSet%22%20PowerShell&gt;Set-NetMainModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetMainModeRule%22%20PowerShell&gt;Set-NetMainModeRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetNatTransitionConfiguration%22%20PowerShell&gt;Set-NetNatTransitionConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetNeighbor%22%20PowerShell&gt;Set-NetNeighbor&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetOffloadGlobalSetting%22%20PowerShell&gt;Set-NetOffloadGlobalSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetPhase1AuthenticationSet%22%20PowerShell&gt;Set-NetPhase1AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetPhase2AuthenticationSet%22%20PowerShell&gt;Set-NetPhase2AuthenticationSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetPrefixPolicy%22%20PowerShell&gt;Set-NetPrefixPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetProtocolPortFilter%22%20PowerShell&gt;Set-NetProtocolPortFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetQosPolicy%22%20PowerShell&gt;Set-NetQosPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetQuickModeCryptoSet%22%20PowerShell&gt;Set-NetQuickModeCryptoSet&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetRoute%22%20PowerShell&gt;Set-NetRoute&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetSecurityFilter%22%20PowerShell&gt;Set-NetSecurityFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetSecuritySettingData%22%20PowerShell&gt;Set-NetSecuritySettingData&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetServiceFilter%22%20PowerShell&gt;Set-NetServiceFilter&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetTCPSetting%22%20PowerShell&gt;Set-NetTCPSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetTeredoConfiguration%22%20PowerShell&gt;Set-NetTeredoConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-NetUDPSetting%22%20PowerShell&gt;Set-NetUDPSetting&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-OdbcDriver%22%20PowerShell&gt;Set-OdbcDriver&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-OdbcDsn%22%20PowerShell&gt;Set-OdbcDsn&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-Partition%22%20PowerShell&gt;Set-Partition&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-PhysicalDisk%22%20PowerShell&gt;Set-PhysicalDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-PrintConfig%22%20PowerShell&gt;Set-PrintConfig&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-Printer%22%20PowerShell&gt;Set-Printer&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-ProductKey%22%20PowerShell&gt;Set-ProductKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-ScheduledJob%22%20PowerShell&gt;Set-ScheduledJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-ScheduledJobOption%22%20PowerShell&gt;Set-ScheduledJobOption&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-ScheduledTask%22%20PowerShell&gt;Set-ScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-SecureBootUEFI%22%20PowerShell&gt;Set-SecureBootUEFI&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-SmbClientConfiguration%22%20PowerShell&gt;Set-SmbClientConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-SmbServerConfiguration%22%20PowerShell&gt;Set-SmbServerConfiguration&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-SmbShare%22%20PowerShell&gt;Set-SmbShare&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-StorageAttributes%22%20PowerShell&gt;Set-StorageAttributes&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-StoragePool%22%20PowerShell&gt;Set-StoragePool&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-StorageSettings%22%20PowerShell&gt;Set-StorageSettings&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-StorageSubSystem%22%20PowerShell&gt;Set-StorageSubSystem&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-TpmOwnerAuth%22%20PowerShell&gt;Set-TpmOwnerAuth&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-VirtualDisk%22%20PowerShell&gt;Set-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Set-Volume%22%20PowerShell&gt;Set-Volume&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Show-BitLockerRequiredActionsInternal%22%20PowerShell&gt;Show-BitLockerRequiredActionsInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Show-BitLockerStatus%22%20PowerShell&gt;Show-BitLockerStatus&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Show-Command%22%20PowerShell&gt;Show-Command&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Show-ControlPanelItem%22%20PowerShell&gt;Show-ControlPanelItem&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Show-NetConnectionSecurityRule%22%20PowerShell&gt;Show-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Show-NetFirewallRule%22%20PowerShell&gt;Show-NetFirewallRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Show-VirtualDisk%22%20PowerShell&gt;Show-VirtualDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22sls%22%20PowerShell&gt;sls&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Start-Dtc%22%20PowerShell&gt;Start-Dtc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Start-DtcDiagnosticResourceManager%22%20PowerShell&gt;Start-DtcDiagnosticResourceManager&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Start-DtcTransactionsTraceSession%22%20PowerShell&gt;Start-DtcTransactionsTraceSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Start-ScheduledTask%22%20PowerShell&gt;Start-ScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Start-Trace%22%20PowerShell&gt;Start-Trace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Stop-Dtc%22%20PowerShell&gt;Stop-Dtc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Stop-DtcDiagnosticResourceManager%22%20PowerShell&gt;Stop-DtcDiagnosticResourceManager&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Stop-DtcTransactionsTraceSession%22%20PowerShell&gt;Stop-DtcTransactionsTraceSession&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Stop-ScheduledTask%22%20PowerShell&gt;Stop-ScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Stop-Trace%22%20PowerShell&gt;Stop-Trace&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22sujb%22%20PowerShell&gt;sujb&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Suspend-BitLocker%22%20PowerShell&gt;Suspend-BitLocker&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Suspend-Job%22%20PowerShell&gt;Suspend-Job&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Suspend-PrintJob%22%20PowerShell&gt;Suspend-PrintJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Switch-Certificate%22%20PowerShell&gt;Switch-Certificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Sync-NetConnectionSecurityRule%22%20PowerShell&gt;Sync-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22TabExpansion2%22%20PowerShell&gt;TabExpansion2&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-BitLocker%22%20PowerShell&gt;Test-BitLocker&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-BitLocker2%22%20PowerShell&gt;Test-BitLocker2&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-Certificate%22%20PowerShell&gt;Test-Certificate&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-Dtc%22%20PowerShell&gt;Test-Dtc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-KdsRootKey%22%20PowerShell&gt;Test-KdsRootKey&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-PhysicalDisk%22%20PowerShell&gt;Test-PhysicalDisk&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-PSSessionConfigurationFile%22%20PowerShell&gt;Test-PSSessionConfigurationFile&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-SecureBootPolicy%22%20PowerShell&gt;Test-SecureBootPolicy&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-SystemEntropyForBitLockerInternal%22%20PowerShell&gt;Test-SystemEntropyForBitLockerInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-TpmForBitLockerInternal%22%20PowerShell&gt;Test-TpmForBitLockerInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Test-TpmProtectorNeededInternal%22%20PowerShell&gt;Test-TpmProtectorNeededInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unblock-File%22%20PowerShell&gt;Unblock-File&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unblock-SmbShareAccess%22%20PowerShell&gt;Unblock-SmbShareAccess&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unblock-Tpm%22%20PowerShell&gt;Unblock-Tpm&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Undo-DtcDiagnosticTransaction%22%20PowerShell&gt;Undo-DtcDiagnosticTransaction&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Uninstall-Dtc%22%20PowerShell&gt;Uninstall-Dtc&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unlock-AdAccountOrGroupInternal%22%20PowerShell&gt;Unlock-AdAccountOrGroupInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unlock-BitLocker%22%20PowerShell&gt;Unlock-BitLocker&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unlock-PasswordInternal%22%20PowerShell&gt;Unlock-PasswordInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unlock-RecoveryKeyInternal%22%20PowerShell&gt;Unlock-RecoveryKeyInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unlock-RecoveryPasswordInternal%22%20PowerShell&gt;Unlock-RecoveryPasswordInternal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unregister-ClusteredScheduledTask%22%20PowerShell&gt;Unregister-ClusteredScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unregister-IscsiPersistentTarget%22%20PowerShell&gt;Unregister-IscsiPersistentTarget&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unregister-ScheduledJob%22%20PowerShell&gt;Unregister-ScheduledJob&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Unregister-ScheduledTask%22%20PowerShell&gt;Unregister-ScheduledTask&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Update-Help%22%20PowerShell&gt;Update-Help&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Update-HostStorageCache%22%20PowerShell&gt;Update-HostStorageCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Update-IscsiDiscoveredTarget%22%20PowerShell&gt;Update-IscsiDiscoveredTarget&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Update-IscsiTargetPortal%22%20PowerShell&gt;Update-IscsiTargetPortal&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Update-NetConnectionSecurityRule%22%20PowerShell&gt;Update-NetConnectionSecurityRule&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Update-StorageProviderCache%22%20PowerShell&gt;Update-StorageProviderCache&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Use-Unattend%22%20PowerShell&gt;Use-Unattend&lt;/a&gt;&lt;br/&gt;
&lt;a href=http://www.google.co.nz/search?q=%22Write-DtcTransactionsTraceSession%22%20PowerShell&gt;Write-DtcTransactionsTraceSession&lt;/a&gt;&lt;br/&gt;

&lt;div style=&quot;display:none&quot;&gt;
gmo -l | select -expandproperty name | % { ipmo $_ }&lt;br/&gt;
gcm | select -ExpandProperty name | sort | clip&lt;br/&gt;
Compare-Object (type .\win7.txt | sort)  (type .\win8.txt | sort) | select -ExpandProperty inputobject | select -Unique | % {&quot;&lt;a href=http://www.google.co.nz/search?q=%22$_%22%20PowerShell&gt;$_&lt;/a&gt;&lt;br/&gt;&quot;} | clip
&lt;br/&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4519055181850101820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/11/whats-new-in-powershell-30-windows-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4519055181850101820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4519055181850101820'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/11/whats-new-in-powershell-30-windows-8.html' title='What&#39;s new in PowerShell 3.0 / Windows 8?'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4544491189343982536</id><published>2011-11-24T06:54:00.001+13:00</published><updated>2011-12-06T21:56:08.460+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET MVC"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>Protecting against CSRF in MVC 3</title><content type='html'>It is important to protect your customers and other users of your website against &lt;a href=&quot;https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)&quot;&gt;CSRF attacks&lt;/a&gt;. To do this in ASP.NET MVC 3, you would normally use the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.mvc.validateantiforgerytokenattribute.aspx&quot;&gt;ValidateAntiForgeryTokenAttribute&lt;/a&gt;. The test below will ensure that all appropriate actions on all controllers have this protection.

&lt;pre class=&quot;brush:csharp&quot;&gt;
[TestMethod]
public void All_post_actions_validate_anti_forgery_tokens()
{
    var modelController = typeof(MyController);  //this can be any one of your controllers in this particular area
    var allControllers = modelController.Assembly.GetTypes().Where(t =&gt; t.Namespace == modelController.Namespace &amp;&amp; t.Name.EndsWith(&quot;Controller&quot;, StringComparison.OrdinalIgnoreCase));
    foreach (var controller in allControllers)
    {
        AssertControllerValidatesAntiForgeryToken(controller);
    }
}

static void AssertControllerValidatesAntiForgeryToken(Type controller)
{
    Console.WriteLine(&quot;Checking &quot; + controller.Name);
    var violations = (
        from method in controller.GetMethods()
        let attributes = method.GetCustomAttributes(true)
        let parameters = method.GetParameters()
        let isProperty = !method.Name.StartsWith(&quot;set_&quot;, StringComparison.OrdinalIgnoreCase) &amp;&amp; !method.Name.StartsWith(&quot;get_&quot;, StringComparison.OrdinalIgnoreCase)
        let isPostMethod = parameters.Length != 0 &amp;&amp; (!attributes.Any(a =&gt; a is ActionMethodSelectorAttribute) || attributes.Any(a =&gt; a is HttpPostAttribute))
        let noAntiForgeryToken = !attributes.Any(a =&gt; a is ValidateAntiForgeryTokenAttribute)
        let excludedMethods = typeof(ControllerBase).GetMethods().Select(m =&gt; m.Name)
        let isExcludedMethod = excludedMethods.Contains(method.Name)
        where isProperty &amp;&amp; isPostMethod &amp;&amp; noAntiForgeryToken &amp;&amp; !isExcludedMethod
        select method.Name).ToArray();

    foreach (var violation in violations)
        Console.WriteLine(&quot;Failed: {0}/{1}&quot;, controller.Name, violation);

    Assert.AreEqual(0, violations.Count());
}         
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4544491189343982536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/11/it-is-important-to-protect-your.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4544491189343982536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4544491189343982536'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/11/it-is-important-to-protect-your.html' title='Protecting against CSRF in MVC 3'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5387312629530163711</id><published>2011-11-13T09:24:00.000+13:00</published><updated>2011-11-13T09:28:36.358+13:00</updated><title type='text'>Printing customised top maps from LINZ</title><content type='html'>Land Information New Zealand (LINZ) has topographical maps that cover New Zealand available for free download.&lt;br /&gt;
&lt;br /&gt;
I am planning a trip over the Tongariro Crossing, and wanted to print a topo map that covers the walk. Unfortunately, as so often happens, the walk traverses two maps. To solve this problem, I decided to merge two maps and then print only the appropriate part of the map.&lt;br /&gt;
&lt;br /&gt;
To merge the maps, the simplest method was to download the two maps in GeoTiff format and merge them using the GDAL tools, which are compiled by Frank Warmerdam into a &lt;a href=&quot;http://fwtools.maptools.org/&quot;&gt;handy Windows package&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;a href=&quot;http://www.gdal.org/gdal_merge.html&quot;&gt;gdal_merge&lt;/a&gt; -v -q -o merged.tif -of GTiff &lt;a href=&quot;http://topo.linz.govt.nz/Topo50_raster_images/GeoTIFFTopo50/BH34_GeoTifv1-01.tif&quot;&gt;BH34_GeoTifv1-01.tif&lt;/a&gt; &lt;a href=&quot;http://topo.linz.govt.nz/Topo50_raster_images/GeoTIFFTopo50/BH35_GeoTif_1-00.tif&quot;&gt;BH35_GeoTif_1-00.tif&lt;/a&gt;&lt;/pre&gt;&lt;br /&gt;
The next step was to crop the appropriate part of the map so that the scale was preserved when I printed it on A3 paper. A key point to note is that the original LINZ GeoTiff is set to 300 DPI or 118.11 pixels/cm. In the drawing tool I used (&lt;a href=&quot;http://www.getpaint.net/&quot;&gt;Paint.NET&lt;/a&gt;), I was able to set the DPI to 300 and then set a crop area of 42 x 29.7 cm to select the area I wanted. Bear in mind that many printers are not able to print onto the full paper size, so a smaller area may be required to preserve the scale.&lt;br/&gt;
&lt;br/&gt;
Note that the -v -q arguments were required for the version of FWTools that I downloaded due to a &lt;a href=&quot;http://trac.osgeo.org/gdal/ticket/3354&quot;&gt;known issue&lt;/a&gt; in GDAL.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5387312629530163711/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/11/printing-customised-top-maps-from-linz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5387312629530163711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5387312629530163711'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/11/printing-customised-top-maps-from-linz.html' title='Printing customised top maps from LINZ'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6904653013753657196</id><published>2011-11-13T07:50:00.003+13:00</published><updated>2012-02-01T17:56:33.325+13:00</updated><title type='text'>Useful Software</title><content type='html'>This is intended to be a general purpose list of useful software I come across, and complements my list of &lt;a href=&quot;http://nzbart.blogspot.com/2010/11/windows-software-i-can-live-without.html&quot;&gt;Windows Software I can&#39;t live without&lt;/a&gt;.&lt;br /&gt;
&lt;table&gt;&lt;tr&gt; &lt;th&gt;&lt;br /&gt;
I want to...&lt;br /&gt;
&lt;/th&gt; &lt;th&gt;&lt;br /&gt;
So I use...&lt;br /&gt;
&lt;/th&gt; &lt;/tr&gt;
&lt;tr&gt; &lt;td&gt;
Join two topo maps in geotiff format.
&lt;/td&gt; &lt;td&gt;
&lt;a href=&quot;http://fwtools.maptools.org/&quot;&gt;GDAL Utilities&lt;/a&gt;
&lt;/td&gt;
&lt;tr&gt;&lt;td&gt;
Draw images (scalable)
&lt;/td&gt; &lt;td&gt;
&lt;a href=&quot;http://inkscape.org/&quot;&gt;Inkscape&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;
Edit photos (scalable)
&lt;/td&gt; &lt;td&gt;
&lt;a href=&quot;http://www.gimp.org/&quot;&gt;Gimp&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;
Bulk manipulation of photos
&lt;/td&gt; &lt;td&gt;
&lt;a href=&quot;http://www.imagemagick.org&quot;&gt;Imagemagick&lt;/a&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;
Automatic rotation of photos from exif data
&lt;/td&gt; &lt;td&gt;
&lt;a href=&quot;http://www.sentex.net/~mwandel/jhead/&quot;&gt;jhead -autorot *.jpg&lt;/a&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finding which files / folders are using my disk space&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://windirstat.info/&quot;&gt;WinDirStat&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Photo editing&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.gimp.org/downloads/&quot;&gt;GIMP&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generating an xsd from an xml file.&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.thaiopensource.com/relaxng/trang.html&quot;&gt;TRANG&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Determining motherboard / RAM configurations&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://www.piriform.com/speccy&quot;&gt;Speccy&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Burn CD / DVD / ISO&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;http://cdburnerxp.se&quot;&gt;CDBurnerXP&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen sharing / assistance&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://join.me/&quot;&gt;join.me&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6904653013753657196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/11/useful-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6904653013753657196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6904653013753657196'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/11/useful-software.html' title='Useful Software'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5869703050617608781</id><published>2011-11-06T16:29:00.001+13:00</published><updated>2011-11-06T16:30:50.659+13:00</updated><title type='text'>Orcon Genius wireless connection drops when using the phone</title><content type='html'>I am using the &lt;a href=&quot;http://www.orcon.net.nz/&quot;&gt;Orcon&lt;/a&gt; Genius, and so far have been pretty happy with the reduced telephone bill and features of the Genius. &lt;br /&gt;
&lt;br /&gt;
However, I did run into an unusual problem where the wireless connection to my laptop would cut out whenever I answered an incoming call on the handset; surprisingly, outgoing calls did not affect the wireless connection.&lt;br /&gt;
&lt;br /&gt;
After troubleshooting with the (very friendly) Orcon technician, the solution turned out to be to change the wireless channel setting from &quot;Auto&quot; to &quot;6&quot;.  &lt;br /&gt;
&lt;br /&gt;
To do this, I:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Pointed my browser at&amp;nbsp;&lt;a href=&quot;http://10.1.1.1/&quot;&gt;http://10.1.1.1&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Entered my password (I believe the default is &#39;admin&#39;, but don&#39;t forget to change it) to log in.&lt;/li&gt;
&lt;li&gt;Clicked on &quot;2. Set up my wireless&quot;.&lt;/li&gt;
&lt;li&gt;Set the drop down box to the right of &quot;Channel&quot; to 6.&lt;/li&gt;
&lt;li&gt;Clicked &quot;Save settings&quot;.&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Problem solved!</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5869703050617608781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/11/orcon-genius-wireless-connection-drops.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5869703050617608781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5869703050617608781'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/11/orcon-genius-wireless-connection-drops.html' title='Orcon Genius wireless connection drops when using the phone'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6225695393816941466</id><published>2011-10-27T06:39:00.001+13:00</published><updated>2011-10-27T06:40:42.157+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Listing all columns in a SQL Server database that have empty strings in them using PowerShell</title><content type='html'>I needed to find all the columns in a database that have empty strings in them so that we could track down the source of this (these?) data. This proved to be fairly straightforward using PowerShell, but is still something that I will jot down here to save time in case I need to do the same again in the future.&lt;br /&gt;
&lt;br /&gt;
To run this one-liner, open SQL Server Management Studio and right click on the database you want to run it on, then choose &lt;i&gt;Start PowerShell&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Modify the following command and run it in the PowerShell window you just opened. Note that it may be possible to write a simpler command than this, but this one is simple and it works.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;dir | % { dir ($_.displayname + &#39;\columns&#39;) } | ? { $_.datatype -match &#39;varchar&#39; } | select parent, datatype, name | % { invoke-sqlcmd -suppressprovidercontextwarning (&quot;select &#39;&quot; + $_.parent + &quot;&#39;, &#39;&quot; + $_.name + &quot;&#39;, count(*) from &quot; + $_.parent + &quot; where `&quot;&quot; + $_.name + &quot;`&quot; = &#39;&#39;&quot;)  } | ? { $_[2] -ne 0 }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6225695393816941466/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/10/listing-all-columns-in-sql-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6225695393816941466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6225695393816941466'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/10/listing-all-columns-in-sql-server.html' title='Listing all columns in a SQL Server database that have empty strings in them using PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4784913182739608439</id><published>2011-10-24T22:18:00.002+13:00</published><updated>2011-10-26T12:41:16.690+13:00</updated><title type='text'>x64 assembly sample program</title><content type='html'>To get a better understanding of how the new &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms235286(v=vs.80).aspx&quot;&gt;Microsoft x64 calling convention&lt;/a&gt; works, I thought it would be a good idea to reacquaint myself with assembly language, this time using &lt;i&gt;ml64.exe&lt;/i&gt;. While I do not write assembly language in my day-to-day job, I still find it surprisingly useful to be able to read and decipher assembly language. Understanding calling conventions and stack usage are a critical part of being able to debug assembly language.&lt;br /&gt;
&lt;br /&gt;
A key takeaway for me from this process is that the x64 convention passes the first four arguments in volatile registers, therefore making it difficult to review the parameters as passed to a function because they will not be stored in memory. Note that space is allocated on the stack for the parameters that are passed via register, but the memory is generally left uninitialised in release-mode builds. The &lt;a href=&quot;http://blogs.msdn.com/b/ntdebugging/archive/2009/01/09/challenges-of-debugging-optimized-x64-code.aspx&quot;&gt;Advanced Windows Debugging and Troubleshooting blog&lt;/a&gt; has a good run-down of the difficulties this poses.&lt;br /&gt;
&lt;br /&gt;
Below is a sample program I wrote, along with the command line to compile it:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;extrn ExitProcess: PROC 
extrn MessageBoxA: PROC
extrn WriteConsoleA: PROC
extrn AllocConsole: PROC
extrn GetStdHandle: PROC

.data
caption db &#39;x64 Assembly Program&#39;, 0
message db &#39;Hello World!&#39;, 0

.code
main proc
  sub rsp, (5 + 1 + 1) * 8 ;5 parameters + return + stdhandle + [written length]; 

  call AllocConsole
  test rax, rax
  jz error

  mov rcx, 0FFFFFFF5h
  call GetStdHandle ;eax = handle

  mov rcx, rax
  lea rdx, message
  mov r8, 12 ; length of string
  lea r9, [rsp + 6 * 8]
  mov qword ptr [rsp + 4 * 8], 0

  call WriteConsoleA

  call DisplayMessage

  add rsp, 56
  ret

error:
  mov rcx, -1
  call ExitProcess
main endp

DisplayMessage proc
  sub rsp, 28h
  mov   rcx, 0 
  lea   rdx, message
  lea   r8, caption
  mov   r9d, 0
  call  MessageBoxA
  add   rsp, 28h
  ret
DisplayMessage endp
end
&lt;/pre&gt;&lt;br /&gt;
This is the command line that can be used to compile the code above:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;ml64.exe /Zi Prog.asm /link /subsystem:windows /defaultlib:kernel32.lib /defaultlib:user32.lib /entry:main
&lt;/pre&gt;&lt;br /&gt;
Note that, in my installation of Visual Studio 2010, &lt;i&gt;ml64.exe&lt;/i&gt; is in the &lt;i&gt;C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64&lt;/i&gt; folder. Make sure that you use the x64 version of the Visual Studio command prompt, otherwise the link process will silently fail.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4784913182739608439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/10/x64-assembly-sample-program.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4784913182739608439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4784913182739608439'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/10/x64-assembly-sample-program.html' title='x64 assembly sample program'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-829295773543796525</id><published>2011-10-16T22:15:00.000+13:00</published><updated>2011-10-16T22:15:07.676+13:00</updated><title type='text'>Backing up a Blogger blog</title><content type='html'>There seems to have been a flurry of activity around 2008 with a lot of tools being written to back up Blogger blogs, but not much since then. After a bit of searching, I found &lt;a href=&quot;http://code.google.com/p/jblogbackup/&quot;&gt;jblogbackup&lt;/a&gt;, which seems to be a reliable, command-line based solution. To get this to work, I needed to do the following:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Download the &lt;a href=&quot;http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html&quot;&gt;Java RTE&lt;/a&gt; and add the &lt;i&gt;bin&lt;/i&gt;&amp;nbsp;folder to my path environment variable.&lt;/li&gt;
&lt;li&gt;Download&amp;nbsp;&lt;a href=&quot;http://code.google.com/p/jblogbackup/&quot;&gt;jblogbackup&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Set the Feedburner feed for my blog to download more than 25 entries by clicking on &quot;Edit Feed Details…&quot; and setting &lt;i&gt;Original Feed&lt;/i&gt; to http://&lt;strong&gt;nzbart&lt;/strong&gt;.blogspot.com/feeds/posts/default?&lt;strong&gt;max-results=999&lt;/strong&gt;. Hopefully 999 entries will last a while.&lt;/li&gt;
&lt;li&gt;Run the tool: &lt;pre class=&quot;brush:ps&quot;&gt;java -jar jblogbackup-onejar-1.1.jar -b BloggerBackup -c -imgthreads 4 -n nzbart&lt;/pre&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/829295773543796525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/10/backing-up-blogger-blog.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/829295773543796525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/829295773543796525'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/10/backing-up-blogger-blog.html' title='Backing up a Blogger blog'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3641440338623657567</id><published>2011-10-12T17:59:00.000+13:00</published><updated>2011-10-12T17:59:42.830+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Converting a short (8.3) file name into a long file name in PowerShell</title><content type='html'>It took me a while to find, but converting a short DOS style (8.3) Windows file name into a long file name in PowerShell is easy. For example, my system temp folder was configured with my user folder as a short name, so I used the following to retrieve the long name:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;(get-item $env:temp).FullName
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3641440338623657567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/10/converting-short-83-file-name-into-long.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3641440338623657567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3641440338623657567'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/10/converting-short-83-file-name-into-long.html' title='Converting a short (8.3) file name into a long file name in PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7780406694091770428</id><published>2011-10-05T21:24:00.001+13:00</published><updated>2011-10-05T21:32:40.011+13:00</updated><title type='text'>Demonstrating the effect of CPU pipelining on performance</title><content type='html'>When writing high performance applications, you may need to understand some of the fundamentals of CPU architecture, such as &lt;a href=&quot;http://en.wikipedia.org/wiki/Pipeline_(computing)&quot;&gt;CPU pipelining&lt;/a&gt;. Often it can be most useful to see the effect of pipelining in a simple example.&lt;br /&gt;
&lt;br /&gt;
The full source code for this example is below, but the most important part is the assembly code and results.&lt;br /&gt;
&lt;br /&gt;
The test uses the Windows high performance timer to see how long it takes to execute a function written in Intel x64 assembly. &lt;br /&gt;
&lt;br /&gt;
The simple loop below sets the rax register to a large number (in this case 2.33 billion, since I am running on a 2.33 GHz processor), and repeatedly decreases it until it hits zero. My console application then printed out the number of milliseconds this took to execute. On my machine, it took roughly 1000 ms to execute, even though it is executing a decrement instruction followed by a jump.&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;.CODE             

runAssemblyCode PROC
  mov rax, 2330 * 1000 * 1000
 start:
  dec rax
  jnz start
  ret 
runAssemblyCode ENDP 
END
&lt;/pre&gt;&lt;br /&gt;
To complicate things even more, here I perform more, independent, operations in the same loop. Instead of 1 decrement, I now do 5 on various different registers. The total time taken is only about 2000 milliseconds.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;.CODE             

runAssemblyCode PROC
  mov rax, 2330 * 1000 * 1000
 start:
  dec rcx
  dec rdx
  dec r9
  dec r10
  dec rax
  jnz start
  ret 
runAssemblyCode ENDP 
END
&lt;/pre&gt;&lt;br /&gt;
As to the finer details of Intel CPU pipelining, I could not explain how to calculate the expected execution time for these examples, but they do demonstrate quite well that a sequence of carefully crafted instructions can execute faster than the clock speed of your CPU would have you believe.&lt;br /&gt;
&lt;br /&gt;
To run this application yourself, simply create a Visual Studio 2010 (or newer) C++ project and create two files - one .ASM file with the assembly above, and one .CPP file with the C++ code below. You will also need to enable the MASM build customisation by right clicking on the project and clicking &lt;i&gt;Build Customisations&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;#include &amp;lt;Windows.h&gt;
#include &amp;lt;memory&gt;
#include &amp;lt;iostream&gt;

using namespace std;

extern &quot;C&quot; void runAssemblyCode();

class Timer
{
public:
    Timer()
    {
        QueryPerformanceFrequency(&amp;_ticksPerSecond);
        Reset();
    }

    void Reset()
    {
        QueryPerformanceCounter(&amp;_startedAt);
    }

    long long GetElapsedMilliseconds()
    {
        LARGE_INTEGER now;
        QueryPerformanceCounter(&amp;now);
        return (now.QuadPart - _startedAt.QuadPart) * 1000 / _ticksPerSecond.QuadPart;
    }

private:
    LARGE_INTEGER _startedAt;
    LARGE_INTEGER _ticksPerSecond;
};

int wmain(int argc, wchar_t* argv[])
{
    Timer timer;

    runAssemblyCode();

    auto elapsed = timer.GetElapsedMilliseconds();
    cout &lt;&lt; elapsed &lt;&lt; endl;

    return 0;
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7780406694091770428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/10/demonstrating-effect-of-cpu-pipelining.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7780406694091770428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7780406694091770428'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/10/demonstrating-effect-of-cpu-pipelining.html' title='Demonstrating the effect of CPU pipelining on performance'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3961465666800337440</id><published>2011-10-04T15:15:00.000+13:00</published><updated>2011-10-04T15:15:43.033+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Problem debugging stored procedures / T-SQL on (local) databases</title><content type='html'>If you run into the following error while trying to debug T-SQL in SQL Server Management Studio, the problem is that the DNS name (local) cannot be resolved:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC_FrVj3TaxB7J1LDZpim506HrZhXGD9cIhqFZ1_zKxEv3x7aKZMIQIw93l6b5wel95PMyaR-N8CeZF2bp3VbIFIRfZSKGAQstR9aJ7VURizJlVO3svM_DnLtjHwyxsLjvEjzzcRjE31I/s1600/error.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;139&quot; width=&quot;400&quot; alt=&quot;Unable to start T-SQL Debugging. Could not connect to computer &#39;(local)&#39;. The requested name is valid, but no data of the requested type was found.&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC_FrVj3TaxB7J1LDZpim506HrZhXGD9cIhqFZ1_zKxEv3x7aKZMIQIw93l6b5wel95PMyaR-N8CeZF2bp3VbIFIRfZSKGAQstR9aJ7VURizJlVO3svM_DnLtjHwyxsLjvEjzzcRjE31I/s1600/error.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The solution is to connect to localhost rather than (local).</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3961465666800337440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/10/problem-debugging-stored-procedures-t.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3961465666800337440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3961465666800337440'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/10/problem-debugging-stored-procedures-t.html' title='Problem debugging stored procedures / T-SQL on (local) databases'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC_FrVj3TaxB7J1LDZpim506HrZhXGD9cIhqFZ1_zKxEv3x7aKZMIQIw93l6b5wel95PMyaR-N8CeZF2bp3VbIFIRfZSKGAQstR9aJ7VURizJlVO3svM_DnLtjHwyxsLjvEjzzcRjE31I/s72-c/error.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2717485541023610340</id><published>2011-10-03T16:22:00.001+13:00</published><updated>2011-10-05T20:57:24.326+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><category scheme="http://www.blogger.com/atom/ns#" term="TFS"/><title type='text'>Comparing TFS source branch with destination branch</title><content type='html'>When a TFS branch is not &quot;enhanced&quot; with visualisations, it can be tricky to determine the version of the source branch. &lt;br /&gt;
&lt;br /&gt;
I recently wanted to find all the changes that had been made in a branch, including some tweaks that had been made when the branch action was initially checked in. The most reliable way to do this is to compare the source branch at the revision that the branch was made with the latest code in the branch. To do this, I wanted to use the following command line:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;tf folderdiff &quot;$/SourceBranch;RevisionThatBranchWasTakenFrom&quot; $/DestinationBranch
&lt;/pre&gt;&lt;br /&gt;
However, I needed a way to determine RevisionThatBranchWasTakenFrom. Since branching in TFS is essentially copying (the metadata of) each file in the source branch to the destination, there is no single concept of the &#39;revision&#39; of the source branch at the point when the branch was made (in contrast to Subversion). The best I could come up with was to find the most recent changeset in the source branch before the branch was made. To do this, I used the &lt;i&gt;tf merges&lt;/i&gt; command on the destination branch, which lists all the files that have been merged into the destination branch. I have made several assumptions, including that there was a single branch into the destination and no subsequent merges:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;tf merges $/SourceBranch /r /showall /format:detailed | % {$_ -match &#39;(\d+) -&gt;&#39; | out-null; $Matches[1]} | sort -Descending | select -first 1
&lt;/pre&gt;&lt;br /&gt;
This PowerShell one-liner will return the highest revision number of all the branched files, assuming that nothing untoward happens and it can parse the output of &lt;i&gt;tf merges&lt;/i&gt;. In our case, I knew that all the changesets in question had four digits, so the string based sort would work fine.  &lt;br /&gt;
&lt;br /&gt;
Now that I had the most recent changeset, I could run the command to get the changes:&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;tf folderdiff &quot;$/SourceBranch;C12345&quot; $/DestinationBranch
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2717485541023610340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/10/comparing-tfs-source-branch-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2717485541023610340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2717485541023610340'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/10/comparing-tfs-source-branch-with.html' title='Comparing TFS source branch with destination branch'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8939740005352818548</id><published>2011-09-25T17:27:00.001+13:00</published><updated>2011-09-25T22:34:33.199+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Test-Website</title><content type='html'>The following function might be useful for checking whether a web page is up or down in PowerShell:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;function Test-Website([string][parameter(mandatory=$true)]$Url, [string]$Content)
{
    $webRequest = [System.Net.WebRequest]::Create($Url) 
    $webRequest.CookieContainer = New-Object System.Net.CookieContainer;
    
    try {
        $response = $webRequest.GetResponse() 
    }
    catch {
        return $false
    }
    
    if($response.StatusCode -ne 200) {
        return $false
    }
    
    $responseStream = $response.GetResponseStream()
    $sr = New-Object IO.StreamReader($responseStream)
    $result = $sr.ReadToEnd()

    return $result -match $Content
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8939740005352818548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/09/test-website.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8939740005352818548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8939740005352818548'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/09/test-website.html' title='Test-Website'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-9018314920386197784</id><published>2011-09-21T14:59:00.000+12:00</published><updated>2011-09-21T14:59:50.238+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>Dump all properties of an object to a string in C#</title><content type='html'>It is often useful to dump all the properties of an object for debugging. This trivial implementation is good, although it only dumps the top level properties:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;static string DumpAllProperties(object obj)
{
    return string.Join(&quot;, &quot;, 
        TypeDescriptor.GetProperties(obj)
            .Cast&lt;PropertyDescriptor&gt;()
            .Select(p =&gt; string.Format(CultureInfo.CurrentCulture, &quot;{0} = {1}&quot;, p.Name, p.GetValue(obj))));
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/9018314920386197784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/09/dump-all-properties-of-object-to-string.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9018314920386197784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9018314920386197784'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/09/dump-all-properties-of-object-to-string.html' title='Dump all properties of an object to a string in C#'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-9096092929431132411</id><published>2011-08-21T11:17:00.001+12:00</published><updated>2011-08-21T11:18:29.304+12:00</updated><title type='text'>Publishing to Arvixe via Visual Studio Publish in two steps</title><content type='html'>For non-mission critical sites, it is sometimes convenient to deploy directly through Visual Studio 2010&#39;s Publish feature. I use this for a couple of simple sites hosted on the very cost effective &lt;a href=&quot;http://www.arvixe.com/&quot;&gt;Arvixe&lt;/a&gt; shared hosting.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Create a remote management password on the Arvixe control panel by opening the control panel, drilling down into your website configuration, and clicking on the &lt;i&gt;Management&lt;/i&gt; tab. Enter a password for remote management and accept the change.&lt;br /&gt;
&lt;/li&gt;

&lt;li&gt;In Visual Studio, right click on the web project and click &lt;i&gt;Publish&lt;/i&gt;. Then fill out the publish dialog as below, and click &lt;i&gt;Publish&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ThXPJ5JmKEI8El3cZBS0BDByD0KuSdIO3VAPoK8uCCqndFqZ-_yIJDvfqVAbZPmrVeJxzubnb4-4-WjINohWGzPhXRL8dR7agTKyifdfX0Y-1B9_2l7FoNJI88RospFJBuZpWDPSMjI/s1600/publish.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ThXPJ5JmKEI8El3cZBS0BDByD0KuSdIO3VAPoK8uCCqndFqZ-_yIJDvfqVAbZPmrVeJxzubnb4-4-WjINohWGzPhXRL8dR7agTKyifdfX0Y-1B9_2l7FoNJI88RospFJBuZpWDPSMjI/s1600/publish.png&quot; width=&quot;423&quot; height=629 /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/9096092929431132411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/08/publishing-to-arvixe-via-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9096092929431132411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9096092929431132411'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/08/publishing-to-arvixe-via-visual-studio.html' title='Publishing to Arvixe via Visual Studio Publish in two steps'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_ThXPJ5JmKEI8El3cZBS0BDByD0KuSdIO3VAPoK8uCCqndFqZ-_yIJDvfqVAbZPmrVeJxzubnb4-4-WjINohWGzPhXRL8dR7agTKyifdfX0Y-1B9_2l7FoNJI88RospFJBuZpWDPSMjI/s72-c/publish.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8698956963540626989</id><published>2011-08-11T16:07:00.001+12:00</published><updated>2012-01-02T14:41:27.850+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Sound for Ubuntu 10.04 on the Compaq Presario CQ56</title><content type='html'>After installing Ubuntu 10.04, and then every time the kernel updated, I had no sound. The operating system seems to detect the card, and I can set the volume, but no sound is played through the speaker.&lt;br /&gt;
&lt;br /&gt;
I hope the next point release gets a fix for this, but in the meantime, this page has the solution for next time I need to update the kernel:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://wiki.ubuntu.com/Audio/InstallingLinuxAlsaDriverModules&quot;&gt;InstallingLinuxAlsaDriverModules&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The technique I use is to execute the following three lines at the command line, and then reboot:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:bash&quot;&gt;sudo add-apt-repository ppa:ubuntu-audio-dev/ppa
sudo apt-get update
sudo apt-get install linux-alsa-driver-modules-$(uname -r)
&lt;/pre&gt;
&lt;br /&gt;
Don&#39;t forget to reboot!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note that you may hit the following error, which means that the package has not been created for the newer version of the kernel. The solution is usually to wait a few weeks for the package to be created and try again.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:text&quot;&gt;
Couldn&#39;t find package linux-alsa-driver-modules-2.6.32-37-generic
&lt;/pre&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8698956963540626989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/08/sound-for-ubuntu-1004-on-compaq.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8698956963540626989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8698956963540626989'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/08/sound-for-ubuntu-1004-on-compaq.html' title='Sound for Ubuntu 10.04 on the Compaq Presario CQ56'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5050456965015634318</id><published>2011-08-09T23:05:00.001+12:00</published><updated>2011-08-09T23:06:42.128+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Which browsers should I test in?</title><content type='html'>I needed to answer the question &quot;Which browsers should I test in?&quot;, but was frustrated by how difficult this was to answer in Google Analytics. After months of frustration and not being able to easily give solid figures from our websites, I knocked up a one-page site that aggregates the Analytics data of the logged in user and allows them to play around with various scenarios to decide which browsers to test in. Most importantly, this &lt;i&gt;uses data from the target market&lt;/i&gt;, not from a generic or randomised sites.&lt;br /&gt;
&lt;br /&gt;
Please note that this site uses the Google GData JavaScript API, so none of your Analytics data is sent to my servers.&lt;br /&gt;
&lt;br /&gt;
The site is here: &lt;br /&gt;
&lt;a href=&quot;http://browsertest.info&quot;&gt;browsertest.info&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5050456965015634318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/08/which-browsers-should-i-test-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5050456965015634318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5050456965015634318'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/08/which-browsers-should-i-test-in.html' title='Which browsers should I test in?'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1644040013126851169</id><published>2011-08-05T23:26:00.001+12:00</published><updated>2011-08-08T17:17:01.033+12:00</updated><title type='text'>One day sales site - example of jQuery widgets and QUnit unit tests</title><content type='html'>I have made a small site that uses some Javascript features such as drag and drop so that I could try writing QUnit unit tests. The tests were refreshingly easy to write, including testing things such as dragging and dropping by simulating mouse clicks.&lt;br /&gt;
&lt;br /&gt;
The site allows users to view &lt;a href=&quot;http://www.nzonedaysales.info&quot;&gt;popular one-day sale sites in New Zealand&lt;/a&gt;, and the tests can be found &lt;a href=&quot;http://www.nzonedaysales.info/Tests/Main.html&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1644040013126851169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/08/one-day-sales-site-example-of-jquery.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1644040013126851169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1644040013126851169'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/08/one-day-sales-site-example-of-jquery.html' title='One day sales site - example of jQuery widgets and QUnit unit tests'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3722029431783326331</id><published>2011-07-31T19:04:00.002+12:00</published><updated>2012-01-13T00:21:57.434+13:00</updated><title type='text'>Microsoft Money Deluxe: &quot;There has been an error reading or writing the file &#39;.&#39;&quot;</title><content type='html'>I ran into the following error using Microsoft Money Deluxe (version 14.0.120.1105) while trying to view the Account Transactions report:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;There has been an error reading or writing the file &#39;.&#39;
&lt;/pre&gt;
&lt;br /&gt;
A quick Google search turned up &lt;a href=&quot;http://support.microsoft.com/kb/281865&quot;&gt;KB281865&lt;/a&gt; on Microsoft&#39;s site, but that only helped by confirming that this is a known issue. I was seemingly unable to get into the configuration dialog box to effect the fix, so not sure what to do. &lt;br /&gt;
&lt;br /&gt;
The fix that worked for me was to view the report and wait for the error dialog saying &lt;i&gt;There has been an error reading or writing the file &#39;.&#39;&lt;/i&gt;&lt;br /&gt;
to appear. Then, I positioned my mouse over the &lt;i&gt;Customize...&lt;/i&gt; button and hit enter to dismiss the error dialog. Immediately after closing the dialog, I clicked the &lt;i&gt;Customize...&lt;/i&gt; button, and the report customisation dialog popped up. After resetting the report using the &lt;i&gt;Reset&lt;/i&gt; button, I was good to go!&lt;br /&gt;
&lt;br /&gt;
Note that the Money 2005 Deluxe comes out of the box as version 14.0.120.805, so upgrading to version&amp;nbsp;14.0.120.1105 requires the installation of a QFE (aka SP1). This used to be downloaded automatically by money, but now must be downloaded directly from Microsoft &lt;a href=&quot;http://www.microsoft.com/download/en/search.aspx?q=money%202005%20qfe&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3722029431783326331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/07/microsoft-money-deluxe-there-has-been.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3722029431783326331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3722029431783326331'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/07/microsoft-money-deluxe-there-has-been.html' title='Microsoft Money Deluxe: &quot;There has been an error reading or writing the file &#39;.&#39;&quot;'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5821251039082853814</id><published>2011-07-03T20:01:00.000+12:00</published><updated>2011-07-16T10:53:11.760+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="ReSharper (R#)"/><title type='text'>Installing ReSharper 6 causes several error dialogs</title><content type='html'>I recently installed ReSharper 6 (6.0.2202.688) into Microsoft Visual Studio 2010 and was greeted with some error dialogs:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY7CJgIgjOk_RraMvOkSJ_2glDPkkkjE1kAqsUkrrkQZY8b1Kpa-7FlHeDRjs-6NGuiV2oByMyA7BzV7Pz194dO1WNof2kMBlZTf7AfKnf14TGwHHhEGc_C40GOd8zLjPl_BGO992AOMc/s1600/Error1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY7CJgIgjOk_RraMvOkSJ_2glDPkkkjE1kAqsUkrrkQZY8b1Kpa-7FlHeDRjs-6NGuiV2oByMyA7BzV7Pz194dO1WNof2kMBlZTf7AfKnf14TGwHHhEGc_C40GOd8zLjPl_BGO992AOMc/s1600/Error1.png&quot;  alt=&quot;The &#39;RadLangSvc.Package, RadLangSvc.VS, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91&#39; package did not load correctly.
The problem may have been caused by a configuration change or by the installation of another extension. You can get more information by running the application together with the /log parameter on the command line, and then examining the file &#39;C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\10.0\ActivityLog.xml&#39;.&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPMOHo4j3Kh4S88rmrqcCfl9fuZyN1mSUW77CwTEbd6FGqUM72CRZunAqkYOOBGrnuiBcdMkNRUw0hD11Fjm0RNyCQXtruEhnGdj8gmpev-OYkuK2vU9GbzMd5scOykZcu5CCoL_U_uqw/s1600/Error2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPMOHo4j3Kh4S88rmrqcCfl9fuZyN1mSUW77CwTEbd6FGqUM72CRZunAqkYOOBGrnuiBcdMkNRUw0hD11Fjm0RNyCQXtruEhnGdj8gmpev-OYkuK2vU9GbzMd5scOykZcu5CCoL_U_uqw/s1600/Error2.png&quot; alt=&quot;The &#39;Language Package&#39; package did not load correctly.
The problem may have been caused by a configuration change or by the installation of another extension. You can get more information by running the application together with the /log parameter on the command line, and then examining the file &#39;C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\10.0\ActivityLog.xml&#39;.&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
It looks as though &lt;a href=&quot;http://connect.microsoft.com/VisualStudio/feedback/details/532121/tons-of-package-did-not-load-correctly-errors&quot;&gt;this is a known issue&lt;/a&gt;, caused by a conflict between some plugins, Visual Studio 2010, and SQL Server 2008 R2.&lt;br /&gt;
&lt;br /&gt;
The solution for me was to install &lt;i&gt;\WCU\DAC\DACProjectSystemSetup_enu.msi&lt;/i&gt; from the Visual Studio 2010 installation media.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5821251039082853814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/07/installing-resharper-6-causes-several.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5821251039082853814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5821251039082853814'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/07/installing-resharper-6-causes-several.html' title='Installing ReSharper 6 causes several error dialogs'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgY7CJgIgjOk_RraMvOkSJ_2glDPkkkjE1kAqsUkrrkQZY8b1Kpa-7FlHeDRjs-6NGuiV2oByMyA7BzV7Pz194dO1WNof2kMBlZTf7AfKnf14TGwHHhEGc_C40GOd8zLjPl_BGO992AOMc/s72-c/Error1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5849015118071553578</id><published>2011-07-03T15:32:00.000+12:00</published><updated>2011-07-16T10:53:39.084+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Using the File Checksum Integrity Verifier (fciv.exe) to ensure file integrity</title><content type='html'>&lt;p&gt;The &lt;a href=&quot;http://support.microsoft.com/kb/841290&quot;&gt;File Checksum Integrity Verifier (fciv.exe)&lt;/a&gt; can be used to calculate and verify that file contents have not changed.&lt;/p&gt;&lt;br /&gt;
&lt;h3&gt;Calculating Hashes&lt;/h3&gt;&lt;p&gt;The following PowerShell command line will calculate the hashes for the current folder and all subfolders, saving the results into ..\Hashes.xml.&lt;/p&gt;&lt;pre&gt;fciv -add (resolve-path .) -bp (resolve-path .) -r -xml ..\Hashes.xml -sha1
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Verifying Hashes&lt;/h3&gt;&lt;p&gt;The purpose of calculating a hash is to compare it at a later date to see whether the file has changed or not.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Use the following command to list all the hashes in the databases.&lt;/p&gt;&lt;pre&gt;fciv.exe -list -xml ..\Hashes.xml -sha1
&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;This command will verify the file content.&lt;/p&gt;&lt;pre&gt;fciv.exe -v . -r -xml ..\Hashes.xml -sha1
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5849015118071553578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/07/using-file-checksum-integrity-verifier.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5849015118071553578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5849015118071553578'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/07/using-file-checksum-integrity-verifier.html' title='Using the File Checksum Integrity Verifier (fciv.exe) to ensure file integrity'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2750674559959412081</id><published>2011-07-02T20:24:00.000+12:00</published><updated>2011-07-16T10:53:54.563+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><title type='text'>NLog logging levels</title><content type='html'>NLog logging uses the following levels:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Trace: 0&lt;/li&gt;
&lt;li&gt;Debug: 1&lt;/li&gt;
&lt;li&gt;Info: 2&lt;/li&gt;
&lt;li&gt;Warn: 3&lt;/li&gt;
&lt;li&gt;Error: 4&lt;/li&gt;
&lt;li&gt;Fatal: 5&lt;/li&gt;
&lt;li&gt;Off: 6&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2750674559959412081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/07/nlog-logging-levels.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2750674559959412081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2750674559959412081'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/07/nlog-logging-levels.html' title='NLog logging levels'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8648763539639365069</id><published>2011-07-01T13:12:00.002+12:00</published><updated>2011-07-03T19:52:36.938+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TFS"/><title type='text'>TFS/MSBuild error with null character in compiler output</title><content type='html'>I ran into the following error on the TFS build server, which is building a MicroFocus Cobol.NET program: &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp6irzzOHi-o7aPeNYZQD5REE6huRd3hM_YbQdHpHa00ZrziXwGZ9_ZObETRvvR9XnVNsFvn-8NYenC1o0kh9bAxnOe-qBrC32BBuZwzgI7p-oGHigHTmuug8KPEIttn2HUAtASciwnPo/s1600/msbuilderror.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; width=&quot;100%&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp6irzzOHi-o7aPeNYZQD5REE6huRd3hM_YbQdHpHa00ZrziXwGZ9_ZObETRvvR9XnVNsFvn-8NYenC1o0kh9bAxnOe-qBrC32BBuZwzgI7p-oGHigHTmuug8KPEIttn2HUAtASciwnPo/s1600/msbuilderror.png&quot; alt=&quot;MSBUILD : error MSB4015: The build stopped unexpectedly because the &amp;quot;WorkflowCentralLogger&amp;quot; logger failed unexpectedly during shutdown. System.ArgumentException: &#39;.&#39;, hexadecimal value 0x00, is an invalid character. at System.Xml.XmlConvert.VerifyCharData(String data, ExceptionType invCharExceptionType, ExceptionType invSurrogateExceptionType) at System.Xml.XmlCharCheckingWriter.WriteString(String text) at System.Xml.XmlWriter.WriteAttributeString(String localName, String value) at Microsoft.TeamFoundation.Build.Client.InformationField.ToXml(XmlWriter writer, String element) at Microsoft.TeamFoundation.Build.Client.Helper.ToXml(XmlWriter writer, String element, InformationField[] array) at Microsoft.TeamFoundation.Build.Client.InformationAddRequest.ToXml(XmlWriter writer, String element) at Microsoft.TeamFoundation.Build.Client.Helper.ToXml(XmlWriter writer, String element, InformationChangeRequest[] array) at Microsoft.TeamFoundation.Build.Client.BuildWebService.UpdateBuildInformation(InformationChangeRequest[] changes)&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Based on the stack trace, it looks like there was a problem converting the build output to XML, so it was just a matter of finding the culprit. A quick search through the build output using PowerShell located the offending \0 character (which it is not possible to represent in XML), so I loaded the build log into NotePad++ to confirm:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1DPHsZKHT2OOdyR03Cf817Hs8R5avC2TLWLY0qUQ6RbXde6Ai6FPGoIAiGxf3ht5U1Jp8g3rI5OF9rkNHMmL-QW_xb9hbbNix7Kyl1zRm8GApb4YZIW88fyoaYL_3fQ_ICQ9aucXnt-Y/s1600/nulchar.PNG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left:1em; margin-right:1em&quot;&gt;&lt;img border=&quot;0&quot; width=479 src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1DPHsZKHT2OOdyR03Cf817Hs8R5avC2TLWLY0qUQ6RbXde6Ai6FPGoIAiGxf3ht5U1Jp8g3rI5OF9rkNHMmL-QW_xb9hbbNix7Kyl1zRm8GApb4YZIW88fyoaYL_3fQ_ICQ9aucXnt-Y/s1600/nulchar.PNG&quot;  alt=&quot;NUL char in NotePad++&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Hopefully this will help anyone else who may run into this issue in TFS.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8648763539639365069/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/07/tfsmsbuild-error-with-null-character-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8648763539639365069'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8648763539639365069'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/07/tfsmsbuild-error-with-null-character-in.html' title='TFS/MSBuild error with null character in compiler output'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgp6irzzOHi-o7aPeNYZQD5REE6huRd3hM_YbQdHpHa00ZrziXwGZ9_ZObETRvvR9XnVNsFvn-8NYenC1o0kh9bAxnOe-qBrC32BBuZwzgI7p-oGHigHTmuug8KPEIttn2HUAtASciwnPo/s72-c/msbuilderror.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5388332876815991887</id><published>2011-06-29T11:38:00.004+12:00</published><updated>2011-07-16T10:54:38.813+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Securing passwords in PowerShell</title><content type='html'>It is sometimes necessary to use plaintext passwords in PowerShell scripts, but obviously not a good idea to have those passwords stored in cleartext on disk. The solution is to use the PowerShell &lt;a href=&quot;http://technet.microsoft.com/en-us/library/dd347656.aspx&quot;&gt;ConvertTo-SecureString&lt;/a&gt; and &lt;a href=&quot;http://technet.microsoft.com/en-us/library/dd315356.aspx&quot;&gt;ConvertFrom-SecureString&lt;/a&gt; cmdlets to encrypt the password, save it to a file, and then decrypt it in memory when required. I ported &lt;a href=&quot;http://blogs.msdn.com/b/fpintos/archive/2009/06/12/how-to-properly-convert-securestring-to-string.aspx&quot;&gt;this function&lt;/a&gt; to PowerShell for properly converting the SecureString to a string. &lt;br /&gt;
&lt;br /&gt;
The code below uses the default encryption method, which is specific to the logged in user (or, more precisely, the user that is running the code). Note that, for machines that have joined a domain, a domain administrator can decrypt your data by resetting your password. No other users can decrypt your data.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Encrypt password and save to a file&lt;/h3&gt;&lt;pre class=&quot;brush:ps&quot;&gt;$secureStringPassword = Read-Host &quot;Enter the password&quot; -AsSecureString
$encryptedPassword = ConvertFrom-SecureString $secureStringPassword
Set-Content -Path Password.bin -Value $encryptedPassword
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;Load and decrypt the password in memory&lt;/h3&gt;&lt;pre class=&quot;brush:ps&quot;&gt;function ConvertToUnsecureString(
    [System.Security.SecureString][parameter(mandatory=$true)]$SecurePassword)
{
    $unmanagedString = [System.IntPtr]::Zero;
    try
    {
        $unmanagedString = [Runtime.InteropServices.Marshal]::SecureStringToGlobalAllocUnicode($SecurePassword)
        return [Runtime.InteropServices.Marshal]::PtrToStringUni($unmanagedString)
    }
    finally
    {
        [Runtime.InteropServices.Marshal]::ZeroFreeGlobalAllocUnicode($unmanagedString)
    }
}

$encryptedPassword = Get-Content -Path Password.bin
$secureStringPassword = ConvertTo-SecureString -String $encryptedPassword
$password = ConvertToUnsecureString $secureStringPassword 
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5388332876815991887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/06/securing-passwords-in-powershell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5388332876815991887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5388332876815991887'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/06/securing-passwords-in-powershell.html' title='Securing passwords in PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1532153892335403809</id><published>2011-06-27T21:10:00.000+12:00</published><updated>2011-07-16T10:54:50.980+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Security"/><title type='text'>Adding Google OpenID authentication to your ASP.NET MVC3 site</title><content type='html'>This is a very simple example of &lt;a href=&quot;https://docs.google.com/uc?id=0B2KXEz09Z8huZmIzZDA0OTMtOTg0NS00ODZiLTk0Y2UtMTE0YTFhMjY1Yzhh&amp;export=download&amp;hl=en_US&quot;&gt;an ASP.NET MVC3 application that uses the DotNetOpenAuth project to authorise users against Google OpenID&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1532153892335403809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/06/adding-google-openid-authentication-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1532153892335403809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1532153892335403809'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/06/adding-google-openid-authentication-to.html' title='Adding Google OpenID authentication to your ASP.NET MVC3 site'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3449340036069315112</id><published>2011-06-12T11:31:00.000+12:00</published><updated>2011-07-16T10:55:25.018+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Imaging"/><title type='text'>Convert DICOM medical images to png or jpg</title><content type='html'>We received our baby scans on CD in DICOM format which can be viewed in the viewer on disk. I wanted to convert these to a more popular format - either png (lossless) or jpg (lossy).&lt;br /&gt;
&lt;br /&gt;
I used &lt;a href=&quot;http://www.imagemagick.org&quot;&gt;ImageMagick&lt;/a&gt; through PowerShell to convert all the images and save them into a separate folder:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;mogrify -format png *; md Converted; move *.png Converted
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3449340036069315112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/06/convert-dicom-medical-images-to-png-or.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3449340036069315112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3449340036069315112'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/06/convert-dicom-medical-images-to-png-or.html' title='Convert DICOM medical images to png or jpg'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1501739587966762435</id><published>2011-05-04T11:03:00.000+12:00</published><updated>2011-07-16T10:55:51.657+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Overriding Internet Explorer Compatibility Mode for intranet sites</title><content type='html'>Many corporate environments (including my own) have the &quot;Display intranet sites in Compatibility View&quot; setting enabled. This means that, even if you use the new &lt;code&gt;&amp;lt;doctype html&gt;&lt;/code&gt; tag, your intranet site will render in Compatibility Mode. This means that Internet Explorer 8 will render your site in Internet Explorer 7 mode.&lt;br /&gt;
&lt;br /&gt;
I found a &lt;a href=&quot;http://hsivonen.iki.fi/doctype/ie8-mode.pdf&quot;&gt;fantastic summary of the decision tree that Internet Explorer uses when deciding how to render a page&lt;/a&gt;. Using this information, I tried adding the following tag to each page:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:html&quot;&gt;&amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=Edge&quot;/&gt;
&lt;/pre&gt;&lt;br /&gt;
This tag will override the Compatibility Mode settings and the browser will render in the most standards compliant way.&lt;br /&gt;
&lt;br /&gt;
The downside of this tag is that it is not standard HTML, and will fail HTML validation.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1501739587966762435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/05/overriding-internet-explorer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1501739587966762435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1501739587966762435'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/05/overriding-internet-explorer.html' title='Overriding Internet Explorer Compatibility Mode for intranet sites'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3152166970579222188</id><published>2011-05-02T21:24:00.004+12:00</published><updated>2011-07-16T10:56:19.785+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Setting up a Google App Engine development environment on Ubuntu 11.04</title><content type='html'>&lt;ol&gt;&lt;li&gt;Install Ubuntu 11.04.&lt;/li&gt;
&lt;li&gt;sudo add-apt-repository ppa:fkrull/deadsnakes&lt;/li&gt;
&lt;li&gt;sudo apt-get update&lt;/li&gt;
&lt;li&gt;sudo apt-get dist-upgrade&lt;/li&gt;
&lt;li&gt;sudo apt-get install eclipse python2.5&lt;/li&gt;
&lt;li&gt;Launch Eclipse and install PyDev from http://pydev.org/updates&lt;/li&gt;
&lt;li&gt;Download Google App Engine from &lt;a href=&quot;http://code.google.com/appengine/downloads.html&quot;&gt;http://code.google.com/appengine/downloads.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Expand app engine code into source code folder&lt;/li&gt;
&lt;li&gt;Create a new &lt;em&gt;PyDev Google App Engine Project&lt;/em&gt; (Ctrl+N)&lt;/li&gt;
&lt;li&gt;Set up run configuration&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Name your run configuration.&lt;/li&gt;
&lt;li&gt;Under &quot;Project&quot;, add your Google App Engine Python project.&lt;/li&gt;
&lt;li&gt;Under &quot;Main Module&quot;, enter the location of the &quot;dev_appserver.py&quot; script.&lt;/li&gt;
&lt;li&gt;Change to the &quot;Arguments&quot; tab and enter &quot;${project_loc}/src&quot; as first argument. After this argument, you may add all available additional arguments listed on the Dev Webserver documentation page. (Here, for example we changed the port where GAE is listening to 9999.)&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Run the project.&lt;/li&gt;
&lt;li&gt;Optionally use lib/django_1_2/django/bin/django-admin.py to create a new Django project. You will need to install Django first by running &lt;code&gt;sudo python2.5 setup.py install&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3152166970579222188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/05/setting-up-google-app-engine.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3152166970579222188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3152166970579222188'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/05/setting-up-google-app-engine.html' title='Setting up a Google App Engine development environment on Ubuntu 11.04'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3264047117791365840</id><published>2011-04-28T12:43:00.002+12:00</published><updated>2011-07-16T10:56:33.989+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>&quot;SHOWPLAN permission denied&quot; in Database Engine Tuning Advisor</title><content type='html'>I recently ran into an issue while trying to tune a database used by an ASP.NET website. The error displayed in the Database Engine Tuning Advisor was:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;[Microsoft][SQL Server Native Client 10.0][SQL Server]SHOWPLAN permission denied in database &#39;&lt;i&gt;database&lt;/i&gt;&#39;.&lt;/blockquote&gt;&lt;br /&gt;
After a lot of digging, I managed to track down an &lt;a href=&quot;http://www.ureader.com/msg/11621241.aspx&quot;&gt;obscure post&lt;/a&gt; that mentioned DTA runs statements as the user who originally executed the statement - in this case the site&#39;s application pool user. This user is locked down and does not have SHOWPLAN permission, even though I, as administrator do have permission.&lt;br /&gt;
&lt;br /&gt;
The solution in the development database (where security is not a major concern) was to grant SHOWPLAN permission to the application pool user:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;grant showplan to [domain\user]
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3264047117791365840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/04/showplan-permission-denied-in-database.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3264047117791365840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3264047117791365840'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/04/showplan-permission-denied-in-database.html' title='&quot;SHOWPLAN permission denied&quot; in Database Engine Tuning Advisor'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3040469291868190662</id><published>2011-04-27T14:24:00.000+12:00</published><updated>2011-07-16T10:56:42.292+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Generating random date data in SQL Server 2005</title><content type='html'>The statement below will generate random dates between 1 January 2010 and 27 Apr 2011. &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:sql&quot;&gt;select cast(cast(&#39;1 Jan 2010&#39; as datetime) as int); --returns 40177
select cast(cast(&#39;27 Apr 2011&#39; as datetime) as int) - cast(cast(&#39;1 Jan 2010&#39; as datetime) as int); --returns 481

update transactions
set requesteddatetimeutc = cast((RAND(convert(varbinary,newid()))*481 + 40177) as datetime);
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3040469291868190662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/04/generating-random-date-data-in-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3040469291868190662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3040469291868190662'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/04/generating-random-date-data-in-sql.html' title='Generating random date data in SQL Server 2005'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8925319692889766263</id><published>2011-04-25T08:31:00.000+12:00</published><updated>2011-07-16T10:57:14.951+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Setting the current culture of a website</title><content type='html'>Rather than relying on the settings of the server, it can be prudent to set the current culture of your ASP.NET application using the following setting:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;  ...
  &amp;lt;system.web&gt;
    ...
    &amp;lt;globalization culture=&quot;en-NZ&quot; uiCulture=&quot;en-NZ&quot; /&gt;
    ...
  &amp;lt;/system.web&gt;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8925319692889766263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/04/setting-current-culture-of-website.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8925319692889766263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8925319692889766263'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/04/setting-current-culture-of-website.html' title='Setting the current culture of a website'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2805654334517844545</id><published>2011-04-21T15:36:00.000+12:00</published><updated>2011-07-16T10:57:30.652+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Misleading error message in PowerShell script: &quot;Invalid assignment expression. The left hand side of an assignment operator needs to be something that can be assigned to like a variable or a property&quot;</title><content type='html'>I recently ran into the following error message while modifying a PowerShell script:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Invalid assignment expression. The left hand side of an assignment operator needs to be something that can be assigned to like a variable or a property&lt;/blockquote&gt;&lt;br /&gt;
The cause of the error was that I had added a line of code in front of my param declaration:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;Set-StrictMode -Version 2

param(
    [string][parameter(mandatory=$true )] $WebsitePhysicalPath,
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2805654334517844545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/04/misleading-error-message-in-powershell.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2805654334517844545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2805654334517844545'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/04/misleading-error-message-in-powershell.html' title='Misleading error message in PowerShell script: &quot;Invalid assignment expression. The left hand side of an assignment operator needs to be something that can be assigned to like a variable or a property&quot;'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4770694116174259534</id><published>2011-04-19T13:54:00.001+12:00</published><updated>2011-07-16T10:57:52.450+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><title type='text'>Serialise value to XML in one line of C#</title><content type='html'>This one-liner is useful in the immediate window of Visual Studio to serialise an object to XML:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;new XmlSerializer(OBJECT.GetType()).Serialize(new System.IO.StreamWriter(@&quot;c:\temp\x.xml&quot;), OBJECT);
&lt;/pre&gt;&lt;br /&gt;
&lt;em&gt;Note that this is not production ready because it does not dispose of objects that should be disposed!&lt;/em&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4770694116174259534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/04/serialise-value-to-xml-in-one-line-of-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4770694116174259534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4770694116174259534'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/04/serialise-value-to-xml-in-one-line-of-c.html' title='Serialise value to XML in one line of C#'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8421655919853409242</id><published>2011-04-17T10:07:00.000+12:00</published><updated>2011-04-17T10:07:21.117+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Event log permissions in Server 2008</title><content type='html'>Configuring the permissions for an event log in Server 2003 and earlier required processing the SDDL at this registry entry:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD
&lt;/pre&gt;&lt;br /&gt;
To get the SDDL in Server 2008, use the following PowerShell:&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;$currentSddl = ([xml](wevtutil.exe gl $logName /f:xml)).channel.channelAccess
&lt;/pre&gt;&lt;br /&gt;
And to write it back:&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;wevtutil sl $logName /ca:$newSddl
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8421655919853409242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/04/event-log-permissions-in-server-2008.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8421655919853409242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8421655919853409242'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/04/event-log-permissions-in-server-2008.html' title='Event log permissions in Server 2008'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8008715325939482772</id><published>2011-03-22T12:20:00.003+13:00</published><updated>2011-03-22T12:34:50.612+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>Setting up Unity in a new project</title><content type='html'>Using the Common Service Locator and Unity is fairly simple with Nuget. This post records the steps in case I need them again.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Add the CommonServiceLocator and Unity packages to the project using Nuget.&lt;/li&gt;
&lt;li&gt;Add the following initialisation code (for example in Application_Start):&lt;br /&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;UnityContainer container = new UnityContainer();
            
//configure container
...

var unityServiceLocator = new UnityServiceLocator(container);
ServiceLocator.SetLocatorProvider(() =&amp;gt; unityServiceLocator);
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Use the IServiceLocator and ServiceLocator interface and class for DI and service location, respectively.&lt;br /&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8008715325939482772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/03/setting-up-unity-in-new-project.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8008715325939482772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8008715325939482772'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/03/setting-up-unity-in-new-project.html' title='Setting up Unity in a new project'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2493181702650646619</id><published>2011-03-21T06:43:00.002+13:00</published><updated>2011-03-21T06:44:18.039+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Retrieving streamed Flash video on Linux</title><content type='html'>&lt;a href=&quot;http://www.commandlinefu.com/commands/view/7991/recover-tmp-flash-videos-deleted-immediately-by-the-browser-plugin&quot;&gt;This blog post on commandlinefu.com&lt;/a&gt; shows a fantastic one-liner to retrieve a streaming Flash file as it is being played. It seems that Flash writes to a file, but then deletes that file even as it is being used.&lt;br /&gt;
&lt;br /&gt;
Reproduced here in case the other blog disappears one day:&lt;br /&gt;
&lt;pre&gt;for h in `find /proc/*/fd -ilname &quot;/tmp/Flash*&quot; 2&gt;/dev/null`; do ln -s &quot;$h&quot; `readlink &quot;$h&quot; | cut -d&#39; &#39; -f1`; done
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2493181702650646619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/03/retrieving-streamed-flash-video-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2493181702650646619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2493181702650646619'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/03/retrieving-streamed-flash-video-on.html' title='Retrieving streamed Flash video on Linux'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-245769495956632708</id><published>2011-03-08T08:14:00.004+13:00</published><updated>2011-03-09T22:01:11.707+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Finding all explicit ACLs in NTFS</title><content type='html'>Sometimes file permissions can become a little messed up, so this script will list all the explicitly set (i.e. not inherited) ACEs. I suggest that you use the Out-GridView, Format-Table, or ConvertTo-Csv Cmdlets to better visualise the result.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;function Get-ExplicitAcl
{
    [CmdletBinding()]
    param([string]$Path, [switch]$Recurse)
 
    Process
    {
        $allFiles = Get-ChildItem $Path -Recurse:$Recurse | select -ExpandProperty FullName
        $allFiles += Get-Item $Path | select -ExpandProperty FullName
        $result = $allFiles | % {
            $current = $_
            try 
            {
                $acl = get-acl -path $current
                if($acl)
                {
                    $dacl = $acl.GetAccessRules($true, $false, [System.Security.Principal.NTAccount])
                    foreach($ace in $dacl)
                    {
                        $detail = new-object psobject -Property @{ 
                            Path = $current;
                            FileSystemRights = $ace.FileSystemRights;
                            AccessControlType = $ace.AccessControlType;
                            IdentityReference = $ace.IdentityReference;
                            InheritanceFlags = $ace.InheritanceFlags;
                            PropagationFlags = $ace.PropagationFlags;
                        }
                        $detail | select Path, AccessControlType, IdentityReference, FileSystemRights, InheritanceFlags, PropagationFlags
                    }
                }
            }
            catch [System.UnauthorizedAccessException]
            {
                Write-Error &quot;Failed to read DACL from $current.FullName.&quot;    
            }
        }
        $result | sort path
    }
}&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/245769495956632708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/03/finding-all-explicit-acls-in-ntfs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/245769495956632708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/245769495956632708'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/03/finding-all-explicit-acls-in-ntfs.html' title='Finding all explicit ACLs in NTFS'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7493703574808916139</id><published>2011-02-24T16:46:00.002+13:00</published><updated>2011-02-24T16:49:20.308+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Creating a basic PowerShell script module</title><content type='html'>It is convenient to put frequently used functions into a PowerShell module. To do this, simply go to (after creating it, if need be) a folder called &lt;i&gt;Documents\WindowsPowerShell\Modules&lt;/i&gt; (for the paths you can use, run this command: &lt;code&gt;echo $env:PSModulePath&lt;/code&gt;).&lt;br /&gt;
&lt;br /&gt;
Create a folder by the name of the module you want to create e.g. &lt;i&gt;Utilities&lt;/i&gt;. Within that folder, create a .psm1 file by the same name as that folder e.g. &lt;i&gt;Utilities.psm1&lt;/i&gt;. Any function you create in the .psm1 file will be imported when you import the module.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Additional information:&lt;/b&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;i&gt;gmo -ListAvailable&lt;/i&gt; should list your new module, along with others installed in your system.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;ipmo Utilities&lt;/i&gt; will load your module (if it is called &lt;i&gt;Utilities&lt;/i&gt;).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;rmo Utilities&lt;/i&gt;&amp;nbsp;will unload your module (if it is called&amp;nbsp;&lt;i&gt;Utilities&lt;/i&gt;).&lt;/li&gt;
&lt;li&gt;&lt;i&gt;gcm -Module Utilities&lt;/i&gt;&amp;nbsp;will list all the functions exported by your module once it is loaded (if it is called&amp;nbsp;&lt;i&gt;Utilities&lt;/i&gt;).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://technet.microsoft.com/en-us/library/dd819504.aspx&quot;&gt;&lt;i&gt;Export-ModuleMember&lt;/i&gt;&lt;/a&gt; allows you to choose which functions you export from your module.&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7493703574808916139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/02/creating-basic-powershell-script-module.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7493703574808916139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7493703574808916139'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/02/creating-basic-powershell-script-module.html' title='Creating a basic PowerShell script module'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7764800736439716682</id><published>2011-02-24T16:23:00.004+13:00</published><updated>2011-02-24T16:57:32.481+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>PowerShell script to find and open solution (.sln) files</title><content type='html'>Finding and opening Visual Studio solutions in multiple projects and branches can be painful at times. This simple script may help:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;param([int]$OpenId)

$it = 0
$sln = dir -Filter *.sln -Recurse | 
    sort FullName |
    % { New-Object psobject -Property @{ Id = ++$it; Name = $_.Name; FullName = resolve-path -relative $_.FullName } }

if($OpenId)
{
    if($OpenId -lt 0 -or $OpenId -gt $sln.length)
    {
        throw &quot;Invalid Id.&quot;
    }

    &amp;amp; $sln[$OpenId - 1].FullName
}
else
{
    $sln
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7764800736439716682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/02/powershell-script-to-find-and-open.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7764800736439716682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7764800736439716682'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/02/powershell-script-to-find-and-open.html' title='PowerShell script to find and open solution (.sln) files'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-614901969637426680</id><published>2011-02-20T19:05:00.003+13:00</published><updated>2011-03-06T21:15:57.821+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Copying video from the JVC GR-D850AA using firewire on Linux</title><content type='html'>It seems that our JVC GR-D850A works on Vista, but not on Windows 7, so I thought this might be something that Linux could solve for me.&lt;br /&gt;
&lt;br /&gt;
I started up &lt;a href=&quot;http://www.kinodv.org/&quot;&gt;Kino&lt;/a&gt; on my Linux Mint Debian Edition partition, and was able to fast forward and rewind the tape, but I only saw a black screen when playing. CLI application dvgrab to the rescue.&lt;br /&gt;
&lt;br /&gt;
To copy the video and split into timestamped files, I ran this command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;dvgrab -buffers 1000 -rewind -autosplit -format avi -timestamp video
&lt;/pre&gt;&lt;br /&gt;
I needed the buffering because I was streaming over a network. &lt;br /&gt;
&lt;br /&gt;
Note that dv1 format seems to crash mplayer. Another useful command is this, which streams the video directly into mplayer:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;dvgrab - | mplayer -
&lt;/pre&gt;&lt;br /&gt;
To control the tape, you can use the dvcont command:&lt;br /&gt;
&lt;pre&gt;dvcont stop
dvcont rewind
dvcont status
&lt;/pre&gt;&lt;br /&gt;
Using mencoder and find, the following command will convert a folder of AVI files into XVID format, saving them into a subdirectory called &lt;i&gt;small&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;find . -name &quot;*.avi&quot; -type f -exec mencoder {} -ovc xvid -oac mp3lame -xvidencopts fixed_quant=3 -o small/{} \;
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/614901969637426680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/02/copying-video-from-jvc-gr-d850aa-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/614901969637426680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/614901969637426680'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/02/copying-video-from-jvc-gr-d850aa-using.html' title='Copying video from the JVC GR-D850AA using firewire on Linux'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5158068730499723063</id><published>2011-02-09T11:58:00.001+13:00</published><updated>2011-10-03T15:07:50.291+13:00</updated><title type='text'>Getting TFS Power Tools 2010 working on a 64 bit machine</title><content type='html'>If you install the &lt;a href=&quot;http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f/&quot;&gt;Team Foundation Server Power Tools&lt;/a&gt; on x64 Windows, the TFS cmdlets will only be accessible in x86 PowerShell, not x64. This is because the installer is x86 and installs the required registry entries to the x86 registry. We can copy those entries by running the following command as an administrator from the 64 bit console:  &lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;copy HKLM:\SOFTWARE\Wow6432Node\Microsoft\PowerShell\1\PowerShellSnapIns\Microsoft.TeamFoundation.PowerShell HKLM:\SOFTWARE\Microsoft\PowerShell\1\PowerShellSnapIns\Microsoft.TeamFoundation.PowerShell -r
&lt;/pre&gt;&lt;br /&gt;
Then, to load the TFS Power Tools snapin (unfortunately, &lt;i&gt;not&lt;/i&gt; a module), run:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;Add-PSSnapin Microsoft.TeamFoundation.PowerShell
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5158068730499723063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/02/getting-tfs-power-tools-2010-working-on.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5158068730499723063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5158068730499723063'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/02/getting-tfs-power-tools-2010-working-on.html' title='Getting TFS Power Tools 2010 working on a 64 bit machine'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1803865129249139968</id><published>2011-01-28T09:01:00.000+13:00</published><updated>2011-01-28T09:01:09.972+13:00</updated><title type='text'>Getting the current page URI in classic ASP</title><content type='html'>This JScript gets the current URI in a classic ASP server page:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:js&quot;&gt;function getSv(name) { return Request.ServerVariables(name) }
var currentUri = ((getSv(&quot;HTTPS&quot;) == &quot;off&quot;) ? &quot;http&quot; : &quot;https&quot;) + &quot;://&quot; + getSv(&quot;SERVER_NAME&quot;) + getSv(&quot;SCRIPT_NAME&quot;)
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1803865129249139968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/getting-current-page-uri-in-classic-asp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1803865129249139968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1803865129249139968'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/getting-current-page-uri-in-classic-asp.html' title='Getting the current page URI in classic ASP'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8079174520339730055</id><published>2011-01-27T16:41:00.000+13:00</published><updated>2011-01-27T16:41:53.795+13:00</updated><title type='text'>Logging to Windows Event Log using JScript</title><content type='html'>This handy function allows you to log to the Windows Event Log using JScript, for example from a classic ASP web page:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:js&quot;&gt;function Log(message) {
    var shell = new ActiveXObject(&quot;WScript.Shell&quot;)
    shell.Exec(&#39;eventcreate /id 1 /l [LOG] /SO [SOURCE] /T ERROR /D &quot;&#39; + String(message).replace(&#39;&quot;&#39;, &#39;&quot;&quot;&#39;) + &#39;&quot;&#39;)
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8079174520339730055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/logging-to-windows-event-log-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8079174520339730055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8079174520339730055'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/logging-to-windows-event-log-using.html' title='Logging to Windows Event Log using JScript'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8716188759162687674</id><published>2011-01-25T12:20:00.000+13:00</published><updated>2011-01-25T12:20:19.562+13:00</updated><title type='text'>Killing all processes that have a DLL loaded</title><content type='html'>To kill all the tasks or processes that have a DLL loaded or open, use &lt;a href=&quot;http://technet.microsoft.com/en-us/library/bb491009.aspx&quot;&gt;taskkill.exe&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;PS C:\&gt; taskkill.exe /im * /t /f /fi &quot;modules eq [YOURMODULENAME.DLL]&quot;
SUCCESS: The process with PID 7664 (child process of PID 2572) has been terminated.
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8716188759162687674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/killing-all-processes-that-have-dll.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8716188759162687674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8716188759162687674'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/killing-all-processes-that-have-dll.html' title='Killing all processes that have a DLL loaded'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6183737223796775399</id><published>2011-01-25T11:35:00.004+13:00</published><updated>2011-07-02T17:49:25.901+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Saving the output of a windows batch file (.cmd file) to a file</title><content type='html'>Sometimes it is useful to save the output of a Windows batch file to a file as well as display it to the screen. This is a possible solution:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;@echo off
setlocal
set logfile=Log.log
if not &quot;%1&quot; == &quot;/nolog&quot; (
  (
    date /t &amp; time /t
    call %0 /nolog
  ) &gt;&gt; %logfile% 2&gt;&amp;1
  type %logfile%
  endlocal
  exit /b
) 

... your batch file starts here...
&lt;/pre&gt;&lt;br /&gt;
It is much easier to achieve this in a PowerShell script by using the &lt;a href=&quot;http://technet.microsoft.com/en-us/library/dd347721.aspx&quot;&gt;Start-Transcript&lt;/a&gt; cmdlet. &lt;a href=&quot;http://technet.microsoft.com/en-us/library/dd347705.aspx&quot;&gt;Tee-Object&lt;/a&gt; may also be handy, because it can display the output onto the screen as well as writing to a file.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6183737223796775399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/saving-output-of-windows-batch-file-cmd.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6183737223796775399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6183737223796775399'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/saving-output-of-windows-batch-file-cmd.html' title='Saving the output of a windows batch file (.cmd file) to a file'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7610789058460498350</id><published>2011-01-24T21:02:00.002+13:00</published><updated>2011-01-24T21:06:56.493+13:00</updated><title type='text'>NTP (time synchronisation) servers for New Zealand</title><content type='html'>The &lt;a href=&quot;http://msl.irl.cri.nz/services/time-and-frequency/ntp-server-information&quot;&gt;New Zealand government has two NTP servers for public use&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
msltime1.irl.cri.nz&lt;br /&gt;
msltime2.irl.cri.nz</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7610789058460498350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/ntp-servers-for-new-zealand.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7610789058460498350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7610789058460498350'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/ntp-servers-for-new-zealand.html' title='NTP (time synchronisation) servers for New Zealand'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-9002608291118654357</id><published>2011-01-23T14:15:00.000+13:00</published><updated>2011-01-23T14:15:52.263+13:00</updated><title type='text'>Bulk lossless automatic rotation of photos on Windows</title><content type='html'>Some cameras &#39;know&#39; what angle the camera was being held at when the photo was taken, and this information is written to the image&#39;s EXIF data. It is possible to rotate images with this information so that they are correctly oriented.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Download &lt;a href=&quot;http://www.sentex.net/~mwandel/jhead/jhead.exe&quot;&gt;jhead&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;http://sylvana.net/jpegcrop/jpegtran.exe&quot;&gt;jpegtran&lt;/a&gt;&amp;nbsp;into the same folder (preferably on the path).&lt;/li&gt;
&lt;li&gt;Run jhead -autorot *.jpg&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/9002608291118654357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/bulk-lossless-automatic-rotation-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9002608291118654357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/9002608291118654357'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/bulk-lossless-automatic-rotation-of.html' title='Bulk lossless automatic rotation of photos on Windows'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3620686581128101811</id><published>2011-01-15T21:00:00.003+13:00</published><updated>2011-01-15T21:28:42.053+13:00</updated><title type='text'>Diagnosing slow Windows 7 boot times</title><content type='html'>To see what your machine is doing during boot up, use the tool xperfboot.exe from the &lt;a href=&quot;http://msdn.microsoft.com/en-us/windows/bb980924&quot;&gt;Windows SDK&lt;/a&gt; or as a download from the &lt;a href=&quot;http://msdn.microsoft.com/en-us/performance/default&quot;&gt;Windows Performance Analysis Developer Centre&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Run this command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;xbootmgr –trace rebootCycle -resultPath %temp%\boot&lt;/pre&gt;&lt;br /&gt;
This will reboot your machine twice.&lt;br /&gt;
&lt;br /&gt;
xperfview can then be used to view the output:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;xperfview %temp%\boot\boot_BASE+CSWITCH_1.etl&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3620686581128101811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/diagnosing-slow-windows-7-boot-times.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3620686581128101811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3620686581128101811'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/diagnosing-slow-windows-7-boot-times.html' title='Diagnosing slow Windows 7 boot times'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8041299659013025908</id><published>2011-01-14T23:08:00.004+13:00</published><updated>2012-09-24T08:15:05.396+12:00</updated><title type='text'>The Hamachi server has denied your login request</title><content type='html'>I ran into this problem after upgrading an older version of &lt;a href=&quot;https://secure.logmein.com/products/hamachi2/download.aspx&quot;&gt;Hamachi&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;The Hamachi server has denied your login request.&lt;/pre&gt;
&lt;br /&gt;

&lt;br/&gt;
&lt;hr/&gt;
&lt;h3&gt;Simple Solution&lt;/h3&gt;
&lt;p&gt;This page is very popular, so I wrote an application that will reset the Hamachi configuration. The application is the simplest solution, but the steps below do the same job. &lt;a href=&quot;https://bitbucket.org/bartj/hamachireset/downloads/HamachiReset.exe&quot; onclick=&quot;_gaq.push([&#39;_trackEvent&#39;,&#39;Download&#39;,&#39;HamachiReset&#39;,this.href]);&quot;&gt;&lt;strong&gt;Download the application here&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;https://bitbucket.org/bartj/hamachireset&quot;&gt;source is on BitBucket&lt;/a&gt;).&lt;/p&gt; 
&lt;p&gt;You may need to restart your computer after running this program. &lt;em&gt;&lt;s&gt;Please let me know in the comments below whether the application fixes your problem.&lt;/s&gt;It looks like this program does not work on all operating systems and fix this error for all people. Your mileage may vary - feel free to contribute to the source code with your own situation.&lt;/em&gt;&lt;/p&gt;
&lt;hr/&gt;
&lt;br/&gt;
&lt;br/&gt;

The way I solved this problem was to delete the Hamachi configuration files. &lt;a href=&quot;http://technet.microsoft.com/en-us/sysinternals/bb896645&quot;&gt;Procmon&lt;/a&gt; was able to locate the configuration folders:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Depending on your system, one of:
&lt;pre&gt;%WinDir%\System32\Config\SystemProfile\AppData\Local\LogMeIn Hamachi&lt;/pre&gt;
&lt;pre&gt;%USERPROFILE%\..\LocalService\Local Settings\Application Data\LogMeIn Hamachi&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;And:
&lt;pre&gt;%USERPROFILE%\Local Settings\Application Data\LogMeIn Hamachi&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
Below are steps you could use to clear the corrupted configuration on Windows.
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start an elevated command prompt.&lt;/strong&gt; In Windows 7 and Vista, press the Windows key or click on the Start menu, then type &lt;strong&gt;cmd&lt;/strong&gt; into the text field at the bottom of the Start menu. Right click on the &lt;i&gt;cmd&lt;/i&gt; icon at the top of the Start menu and click &lt;i&gt;Run as administrator&lt;/i&gt; - you will need to either enter an administrator password or accept the dialog that pops up next. If you do this correctly, a black window called the command prompt will pop up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copy this command line.&lt;/strong&gt; Double click the command below to select it, and then press Ctrl+C or right click and select Copy to copy the command into the clipboard of your computer. &lt;pre class=&quot;brush:plain&quot;&gt;cmd /c rd /s/q &quot;%USERPROFILE%\..\LocalService\Local Settings\Application Data\LogMeIn Hamachi&quot; &amp;amp; rd /s/q &quot;%USERPROFILE%\Local Settings\Application Data\LogMeIn Hamachi&quot; &amp;amp; rd /s/q &quot;%WinDir%\System32\Config\SystemProfile\AppData\Local\LogMeIn Hamachi&quot;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run the command line.&lt;/strong&gt; Paste the command into the black window and hit enter to run it. It should reset your Hamachi configuration files and fix the problem.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Please let me know by commenting below if this works or not for your particular situation, along with the version of Hamachi you are running if you know it.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8041299659013025908/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/hamachi-server-has-denied-your-login.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8041299659013025908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8041299659013025908'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/hamachi-server-has-denied-your-login.html' title='The Hamachi server has denied your login request'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8735985201967180086</id><published>2011-01-08T20:37:00.001+13:00</published><updated>2011-01-08T22:12:43.367+13:00</updated><title type='text'>Trinity Rescue Kit (TRK) 3.4 does not resolve DNS out of the box</title><content type='html'>If you boot the Trinity Rescue Kit (TRK) 3.4 build 367 and try to run a tool that requires the internet, such as a virus scan, you may get an error like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;Neither DNS nor proxy parameters for wget found so no internet connection, cannot fetch AV engine&lt;/pre&gt;&lt;br /&gt;
Attempting to ping google.com from a shell returns this error:&lt;br /&gt;
&lt;pre&gt;ping: unknown host google.com&lt;/pre&gt;&lt;br /&gt;
The solution seems to be to launch dhcpcd from the command line:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9xUAxCQvdg4dyqgpiPjirnUBxQPOXavyX6Y0COqTkPtGmNuFInkBMigyCAFeCXlb3M1lsAvr4ApjHvDQ5Whd6NAR-wqbt7nrbcCHBQds21XlQJAETX79RI4bQZR-H3aWc9MZ9VZo6PJ0/s1600/Untitled.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img style=&quot;max-width:100%&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9xUAxCQvdg4dyqgpiPjirnUBxQPOXavyX6Y0COqTkPtGmNuFInkBMigyCAFeCXlb3M1lsAvr4ApjHvDQ5Whd6NAR-wqbt7nrbcCHBQds21XlQJAETX79RI4bQZR-H3aWc9MZ9VZo6PJ0/s1600/Untitled.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8735985201967180086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/trinity-rescue-kit-trk-34-does-not.html#comment-form' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8735985201967180086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8735985201967180086'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/trinity-rescue-kit-trk-34-does-not.html' title='Trinity Rescue Kit (TRK) 3.4 does not resolve DNS out of the box'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9xUAxCQvdg4dyqgpiPjirnUBxQPOXavyX6Y0COqTkPtGmNuFInkBMigyCAFeCXlb3M1lsAvr4ApjHvDQ5Whd6NAR-wqbt7nrbcCHBQds21XlQJAETX79RI4bQZR-H3aWc9MZ9VZo6PJ0/s72-c/Untitled.png" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3782337267104395294</id><published>2011-01-08T16:39:00.006+13:00</published><updated>2011-01-08T21:34:18.395+13:00</updated><title type='text'>Setting up my PXE boot server</title><content type='html'>This is basically a summary for my own records of my PXE boot configuration in case I want to rebuild it. It is quite specific to the distributions I want to access via PXE and to my configuration, so other guides will probably be more useful for readers.&lt;br /&gt;
&lt;br /&gt;
Structure:&lt;br /&gt;
&lt;pre&gt;.
|-- debian
|   `-- testing
|       `-- amd64
|           |-- &lt;b&gt;initrd.gz&lt;/b&gt;
|           `-- &lt;b&gt;linux&lt;/b&gt;
|-- &lt;b&gt;menu.c32&lt;/b&gt;
|-- &lt;b&gt;pxelinux.0&lt;/b&gt;
|-- pxelinux.cfg
|   |-- &lt;b&gt;default&lt;/b&gt;
|   `-- &lt;b&gt;trinity&lt;/b&gt;
`-- &lt;b&gt;trinity&lt;/b&gt;
    |-- &lt;i&gt;...lots of files..&lt;/i&gt;.
&lt;/pre&gt;&lt;br /&gt;
With files sourced from:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://ftp.uk.debian.org/debian/dists/testing/main/installer-amd64/current/images/netboot/debian-installer/amd64/&quot;&gt;Debian distribution from the Debian ftp servers&lt;/a&gt;&amp;nbsp;(the folder structure was manually created)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://syslinux.zytor.com/wiki/index.php/The_Syslinux_Project&quot;&gt;menu.c32 and pxelinux.0 from Syslinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trinityhome.org/&quot;&gt;The trinity folder is an extraction of the iso from the Trinity Rescue Kit (TRK)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trinityhome.org/&quot;&gt;&lt;/a&gt;The content of the default and trinity configuration files below&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The folder structure is mounted (or directly in) /var/lib/tftpboot, and it is exported using NFS (for TRK) by the following configuration line in /etc/exports:&lt;/p&gt;&lt;pre class=&quot;brush:plain&quot;&gt;/var/lib/tftpboot/trinity *(ro,no_root_squash,no_subtree_check)
&lt;/pre&gt;&lt;br /&gt;
&lt;p&gt;The folder structure is also exposed using tftpd-hpa (not tftpd) and the DHCP server is using Tomato on my router with the following configuration line in Advanced -&gt; DHCP / DNS -&gt; Dnsmasq custom configuration:&lt;/p&gt;&lt;pre class=&quot;brush:plain&quot;&gt;dhcp-boot=pxelinux.0,,192.168.1.13
&lt;/pre&gt;&lt;br /&gt;
There is some duplication between the two files, but I was happy enough to get them working as I wanted. If I had more time, I would look into &lt;a href=&quot;http://syslinux.zytor.com/wiki/index.php/Comboot/menu.c32&quot;&gt;MENU INCLUDE&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
This is the configuration file called &lt;i&gt;default&lt;/i&gt;.&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;default menu.c32
prompt 0

menu title Welcome to My Network Boot Menu
menu color tabmsg 37;40      #80ffffff #00000000
menu color hotsel 30;47      #40000000 #20ffffff
menu color sel 30;47      #40000000 #20ffffff
menu color scrollbar 30;47      #40000000 #20ffffff

MENU WIDTH 75
MENU MARGIN 5
MENU PASSWORDMARGIN 3
MENU ROWS 18
MENU TABMSGROW 22
MENU CMDLINEROW 22
MENU ENDROW 24
MENU PASSWORDROW 11
MENU TIMEOUTROW 23

label 1
menu label Debian Install
kernel debian/testing/amd64/linux
append vga=normal initrd=debian/testing/amd64/initrd.gz  --

label 2
menu label Debian Expert Install
kernel debian/testing/amd64/linux
append priority=low vga=normal initrd=debian/testing/amd64/initrd.gz  --

label 3
menu label Debian Rescue
kernel debian/testing/amd64/linux
append vga=normal initrd=debian/testing/amd64/initrd.gz rescue/enable=true --

label 4
menu label Trinity
kernel menu.c32
append pxelinux.cfg/trinity
&lt;/pre&gt;&lt;br /&gt;
The following configuration file was generated by trk3/mkpxelinux in the TRK, but I modified it to find kernel.trk and initrd.trk in the trinity sub-folder, then renamed it to &lt;i&gt;trinity&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
VIM commands:&lt;br /&gt;
&lt;pre&gt;:%s/kernel\.trk/trinity\/kernel.trk/g
:%s/initrd\.trk/trinity\/initrd.trk/g
:%s/vesamenu\.c32/menu.c32/g
&lt;/pre&gt;&lt;br /&gt;
This is the configuration file called &lt;i&gt;trinity&lt;/i&gt;.&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;default menu.c32
prompt 0

menu title     build 367
menu color tabmsg 37;40      #80ffffff #00000000
menu color hotsel 30;47      #40000000 #20ffffff
menu color sel 30;47      #40000000 #20ffffff
menu color scrollbar 30;47      #40000000 #20ffffff

MENU WIDTH 75
MENU MARGIN 5
MENU PASSWORDMARGIN 3
MENU ROWS 18
MENU TABMSGROW 22
MENU CMDLINEROW 22
MENU ENDROW 24
MENU PASSWORDROW 11
MENU TIMEOUTROW 23


label trk3
menu label  Run ^Trinity Rescue Kit 3.4 (default mode, with text menu)
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp  splash=verbose pci=conf1 trkmenu
timeout 100

label 1
menu label ^1 : TRK 3.4 in failsafe mode (No menu, VGA, noacpi, noapic)
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose acpi=off noapic pci=conf1 vga=1

label 2
menu label ^2 : TRK 3.4 running from RAM (best &gt;= 512mb, 256mb min)
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 trkinmem trkmenu

label 3
menu label ^3 : TRK 3.4 - Run &#39;mclone&#39; in client mode (!)
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 mclone

label 4
menu label ^4 : TRK 3.4 in simple VGA mode (debugging of kernel output)
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=1 pci=conf1 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=off trkmenu

label 5
kernel trinity/kernel.trk
menu label ^5 : TRK 3.4 with Belgian keyboard (use menu for other)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 keyb_be trkmenu

label 6
kernel trinity/kernel.trk
menu label ^6 : TRK 3.4 - Virusscan all drives (Clamav, non interactive)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 virusscan

label 7
kernel trinity/kernel.trk
menu label ^7 : TRK 3.4 - Try more pcmcia and usb nics (when not detected)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 pcmcia trkmenu

label 8
kernel trinity/kernel.trk
menu label ^8 : TRK 3.4 - Try more SCSI drivers (when disks not detected)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 scsidrv trkmenu

label 9
kernel trinity/kernel.trk
menu label ^9 : TRK 3.4 with a secure shell server enabled
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 sshd

label 10
kernel trinity/kernel.trk
menu label 10: TRK 3.4 - E^xecute local scripts on harddrive of PC
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 locscr

label 11
menu label 11: TRK 3.4 as bootserve^r to boot other TRK clients
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 trkbootnet trkmenu

label 12
kernel trinity/kernel.trk
menu label 12: TRK 3.4 - Fileshare all drives as ^guest, no security
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 smbguest trkmenu

label 0
kernel trinity/kernel.trk
menu label 13: TRK 3.4 - ^Single user mode (no menu)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 runlevel 1

label noacpi
kernel trinity/kernel.trk
menu label 14: TRK 3.4 - Acpi=off, noapic  PCI=^bios (Alternate boot 1)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose acpi=off noapic pci=bios trkmenu

label pcinormal
kernel trinity/kernel.trk
menu label 15: TRK 3.4 - ^Acpi=off, noapic PCI=any (Alternate boot 2)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose acpi=off noapic trkmenu

label pciconf1
kernel trinity/kernel.trk
menu label 16: TRK 3.4 - ^PCI=conf2 (Alternate boot 3)
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf2 trkmenu

label debug
menu label 17: TRK 3.4 - ^Verbose startup for debugging (no menu)
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 debugging

label 18
menu label 18: TRK 3.4 - SSH, boot- and guest ^fileserver, run from RAM
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 sshd trkinmem smbguest trkbootnet trkmenu

label 19
menu label 19: TRK 3.4 - Run from RAM, run m^clone as client
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 trkinmem mclone

label 20
menu label 20: TRK 3.4 with prox^yserver support enabled
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 proxy trkmenu

label 21
menu label 21: TRK 3.4 - All devices set to read-only
kernel trinity/kernel.trk
append initrd=trinity/initrd.trk ramdisk_size=65536 root=/dev/ram0 vga=788 trknfs=192.168.1.13:/var/lib/tftpboot/trinity ip=::::::dhcp splash=verbose pci=conf1 allro

label t
menu label 22: ^Memory tester: Memtest86+ v1.65
kernel memtest.x86
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3782337267104395294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/setting-up-my-pxe-boot-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3782337267104395294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3782337267104395294'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/setting-up-my-pxe-boot-server.html' title='Setting up my PXE boot server'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3732158162448955528</id><published>2011-01-08T15:38:00.000+13:00</published><updated>2011-01-08T15:38:05.813+13:00</updated><title type='text'>Problem PXE booting Trinity Rescue Kit (TRK) 3.4</title><content type='html'>After reconfiguring my PXE boot system to boot the Trinity rescue kit, partly by following the &lt;a href=&quot;http://trinityhome.org/Home/index.php?wpid=33&amp;front_id=12&quot;&gt;official guide&lt;/a&gt;, I ran into the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;Looks like we &#39;re booting from network, mounting xxxx:/yyy on /trk
/trk/trk3/trkramfs: Permission denied
Something&#39;s wrong in startup, dropping to a shell, stop booting
&lt;/pre&gt;&lt;br /&gt;
The solution is to modify the permissions on the file trkramfs:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;chmod +rx trkramfs
&lt;/pre&gt;&lt;br /&gt;
I am not sure why this problem would occur in the latest build.&lt;br /&gt;
&lt;br /&gt;
I was using the Trinity Rescue Kit 3.4 build 367.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3732158162448955528/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/problem-pxe-booting-trinity-rescue-kit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3732158162448955528'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3732158162448955528'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/problem-pxe-booting-trinity-rescue-kit.html' title='Problem PXE booting Trinity Rescue Kit (TRK) 3.4'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-896457908143638620</id><published>2011-01-07T14:57:00.000+13:00</published><updated>2011-01-07T14:57:38.105+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Keeping track of system freezes with PowerShell</title><content type='html'>A colleague has been having some problems with her Windows 7 x64 machines freezing and requiring a forced shut-down. Unfortunately, these are not logged in the reliability monitor, but they are logged in the event log. I used PowerShell to process the event log to find start-up and shut-down events:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;#Based on information from http://support.microsoft.com/kb/196452

$results = @()

function GetResult($time, $message)
{
    return New-Object psobject -Property @{ Time = $time; Message = $message };
}

Get-EventLog System | ? { $_.Source -eq &quot;EventLog&quot; -and 6006,6008,6009 -contains $_.EventId } | % {
    $item = $_
    switch($_.EventID)
    {
        6006 { $results += (GetResult $item.TimeGenerated &quot;Clean shutdown&quot;) }
        6008 
        { 
            if(-not ($item.Message -match &quot;^The previous system shutdown at (.*) on (.*) was unexpected.$&quot;))
            {
                throw &quot;Invalid format.&quot;
            }
            $c = ($matches[2] -replace &#39;\u200E&#39;,&#39;&#39;) + &quot; &quot; + ($matches[1] -replace &#39;\u200E&#39;,&#39;&#39;);  #not sure why, but it includes the unicode character &#39;LEFT-TO-RIGHT MARK&#39;
            $dt = [datetime]::parse($c)
            $results += (GetResult $dt &quot;Dirty shutdown&quot;)
        }
        6009 { $results += (GetResult $item.TimeGenerated &quot;Start-up&quot;) }
    }
}

$results | sort Time -Descending
&lt;/pre&gt;&lt;br /&gt;
Running the script will create output similar to this:&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;.\ShutdownEvent.ps1

Message        Time
-------        ----
Start-up       7/01/2011 13:34:38
Dirty shutdown 7/01/2011 13:18:22
Start-up       7/01/2011 08:18:25
Clean shutdown 6/01/2011 16:44:41
Start-up       6/01/2011 08:19:52
Clean shutdown 5/01/2011 16:42:38
Start-up       5/01/2011 08:18:23
Clean shutdown 31/12/2010 16:21:51
Start-up       31/12/2010 08:50:07
Clean shutdown 30/12/2010 16:36:55
Start-up       30/12/2010 08:49:39
Clean shutdown 29/12/2010 16:37:34
Start-up       29/12/2010 08:50:48
Clean shutdown 24/12/2010 09:52:04
Start-up       24/12/2010 08:46:15
Clean shutdown 23/12/2010 13:25:19
Start-up       23/12/2010 08:02:46
Clean shutdown 22/12/2010 16:37:40
Start-up       22/12/2010 08:02:18
Clean shutdown 21/12/2010 16:35:55
Start-up       21/12/2010 08:02:13
Clean shutdown 20/12/2010 16:32:50
Start-up       20/12/2010 08:01:52
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
You can also filter the output, for example to only show dirty shut-down events:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;.\ShutdownEvent.ps1 | ? { $_.Message -match &#39;Dirty.*&#39; }

Message        Time
-------        ----
Dirty shutdown 7/01/2011 13:18:22
Dirty shutdown 16/09/2010 08:23:41
Dirty shutdown 9/09/2010 11:04:31
Dirty shutdown 19/07/2010 11:35:27
Dirty shutdown 14/07/2010 13:52:24
Dirty shutdown 8/07/2010 13:40:26
Dirty shutdown 7/05/2010 08:22:57
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/896457908143638620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/keeping-track-of-system-freezes-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/896457908143638620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/896457908143638620'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/keeping-track-of-system-freezes-with.html' title='Keeping track of system freezes with PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-155782892471398637</id><published>2011-01-06T16:03:00.002+13:00</published><updated>2011-01-06T16:05:42.703+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><title type='text'>Capturing both output and error streams from a .NET process</title><content type='html'>MSDN documents a well-known problem that needs to be worked around when reading output from a console process started using System.Diagnostics.Process:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;The code example avoids a deadlock condition by calling p.StandardOutput.ReadToEnd before p.WaitForExit. A deadlock condition can result if the parent process calls p.WaitForExit before p.StandardOutput.ReadToEnd and the child process writes enough text to fill the redirected stream. The parent process would wait indefinitely for the child process to exit. The child process would wait indefinitely for the parent to read from the full StandardOutput stream.&lt;/blockquote&gt;&lt;br /&gt;
The example in MSDN is:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;// Start the child process.
 Process p = new Process();
 // Redirect the output stream of the child process.
 p.StartInfo.UseShellExecute = false;
 p.StartInfo.RedirectStandardOutput = true;
 p.StartInfo.FileName = &quot;Write500Lines.exe&quot;;
 p.Start();
 // Do not wait for the child process to exit before
 // reading to the end of its redirected stream.
 // p.WaitForExit();
 // Read the output stream first and then wait.
 string output = p.StandardOutput.ReadToEnd();
 p.WaitForExit();
&lt;/pre&gt;&lt;br /&gt;
The problem with this example is that it only reads from stdout - not from stderr. One solution, using the new .NET TPL (Task Parallel Library), is to launch two tasks that read the output and error streams.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:csharp&quot;&gt;ProcessStartInfo psInfo = new ProcessStartInfo
{
    Arguments = @&quot;/c dir C:\&quot;,
    FileName = @&quot;C:\Windows\system32\cmd.exe&quot;,
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    UseShellExecute = false
};

Process proc = Process.Start(psInfo);
string stderr = null, stdin = null;
Parallel.Invoke(() =&gt; stdin = proc.StandardOutput.ReadToEnd(),
    () =&gt; stderr = proc.StandardError.ReadToEnd());
proc.WaitForExit();
&lt;/pre&gt;&lt;br /&gt;
There is one caveat with this approach - Parallel.Invoke does not seem to guarantee that both tasks will run in parallel. I will need to investigate this some more.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/155782892471398637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/capturing-both-output-and-error-streams.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/155782892471398637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/155782892471398637'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/capturing-both-output-and-error-streams.html' title='Capturing both output and error streams from a .NET process'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5961224488231806441</id><published>2011-01-05T08:42:00.000+13:00</published><updated>2011-01-05T08:42:42.691+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Booting into the MBR of another drive using GRUB 2</title><content type='html'>I wanted to try dual booting Linux and Windows on my machine, whose existing Windows hard drive is fully encrypted with Truecrypt. To avoid complications with Truecrypt, I put another physical disk in the machine with the intention of installing Linux on that. I wanted to be sure that the install did not touch the Truecrypt disk, including the MBR on that disk. The intention is that the new disk will become the boot disk and it will either load Linux or boot from the MBR on the&amp;nbsp;Truecrypt disk.&lt;br /&gt;
&lt;br /&gt;
The first trick is to make sure that the Linux installer does not overwrite the MBR on the Truecrypt disk, potentially rendering it unbootable. During the &quot;expert install&quot; of Debian based distros (including Ubuntu), it is important to install Grub 2 and then instruct Grub &lt;strong&gt;not&lt;/strong&gt; to install to the MBR of the first hard disk. The installer will then give you the option to specify the drive whose MBR to modify - at this stage, choose the Linux disk, rather than the Trurcrypt disk.&lt;br /&gt;
&lt;br /&gt;
After setting the Linux disk to be the boot disk in BIOS, edit &lt;em&gt;/etc/grub.d/40_custom&lt;/em&gt; as the root user and add the following lines to the end:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:plain&quot;&gt;menuentry &quot;Other Disk&quot; {
&amp;nbsp;&amp;nbsp; &amp;nbsp;set root = (hd1)
&amp;nbsp;&amp;nbsp; &amp;nbsp;chainloader +1
}
&lt;/pre&gt;&lt;br /&gt;
The key here is to set root to the Truecrypt hard drive. Do not specify a partition, because we want to boot using the MBR of the disk. Booting into grub and using &lt;em&gt;ls&lt;/em&gt; at the grub command prompt will give you a list of all the available drives.&lt;br /&gt;
&lt;br /&gt;
After modifying &lt;em&gt;40_custom&lt;/em&gt;, run &lt;em&gt;update-grub&lt;/em&gt;, and reboot. You should be able to boot into Linux or into the Truecrypt drive using the &lt;em&gt;Other Disk&lt;/em&gt; menu entry.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5961224488231806441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/booting-into-mbr-of-another-drive-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5961224488231806441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5961224488231806441'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/booting-into-mbr-of-another-drive-using.html' title='Booting into the MBR of another drive using GRUB 2'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1314825047478688233</id><published>2011-01-04T13:07:00.000+13:00</published><updated>2011-01-04T13:07:32.023+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Change index from clustered to nonclustered in SQL Server 2008</title><content type='html'>&lt;ol&gt;&lt;li&gt;Open the database in SQL Server Management Studio.&lt;/li&gt;
&lt;li&gt;Right-click on the table that has the clustered index and select &lt;i&gt;Design.&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;Right click on a blank space on the design view and select &lt;i&gt;Indexes/Keys&lt;/i&gt;&amp;nbsp;from the context menu.&lt;/li&gt;
&lt;li&gt;Select the index that you want to modify in the list on the left.&lt;/li&gt;
&lt;li&gt;Change the value of the property &lt;i&gt;Create As Clustered&lt;/i&gt;&amp;nbsp;from &lt;i&gt;Yes&lt;/i&gt; to &lt;i&gt;No&lt;/i&gt;.&lt;/li&gt;
&lt;li&gt;Click close, then save the table design view.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1314825047478688233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/change-index-from-clustered-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1314825047478688233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1314825047478688233'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/change-index-from-clustered-to.html' title='Change index from clustered to nonclustered in SQL Server 2008'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2231317451144284187</id><published>2011-01-03T17:35:00.033+13:00</published><updated>2011-01-03T18:48:48.709+13:00</updated><title type='text'>Using the AJAX minifier as an MSBuild task to compress JavaScript</title><content type='html'>&lt;style type=&#39;text/css&#39;&gt;
body {
 font: normal 11px auto &quot;Trebuchet MS&quot;, Verdana, Arial, Helvetica, sans-serif;
 color: #4f6b72;
 background: #E6EAE9;
}

a {
 color: #c75f3e;
}

#mytable {
 width: 700px;
 padding: 0;
 margin: 0;
}

caption {
 padding: 0 0 5px 0;
 width: 700px;  
 font: italic 11px &quot;Trebuchet MS&quot;, Verdana, Arial, Helvetica, sans-serif;
 text-align: right;
}

th {
 font: bold 11px &quot;Trebuchet MS&quot;, Verdana, Arial, Helvetica, sans-serif;
 color: #4f6b72;
 border-right: 1px solid #C1DAD7;
 border-bottom: 1px solid #C1DAD7;
 border-top: 1px solid #C1DAD7;
 letter-spacing: 2px;
 text-transform: uppercase;
 text-align: left;
 padding: 6px 6px 6px 12px;
 background: #CAE8EA url(images/bg_header.jpg) no-repeat;
}

th.nobg {
 border-top: 0;
 border-left: 0;
 border-right: 1px solid #C1DAD7;
 background: none;
}

td {
 border-right: 1px solid #C1DAD7;
 border-bottom: 1px solid #C1DAD7;
 background: #fff;
 padding: 6px 6px 6px 12px;
 color: #4f6b72;
}


td.alt {
 background: #F5FAFA;
 color: #797268;
}

th.spec {
 border-left: 1px solid #C1DAD7;
 border-top: 0;
 background: #fff url(images/bullet1.gif) no-repeat;
 font: bold 10px &quot;Trebuchet MS&quot;, Verdana, Arial, Helvetica, sans-serif;
}

th.specalt {
 border-left: 1px solid #C1DAD7;
 border-top: 0;
 background: #f5fafa url(images/bullet2.gif) no-repeat;
 font: bold 10px &quot;Trebuchet MS&quot;, Verdana, Arial, Helvetica, sans-serif;
 color: #797268;
}
&lt;/style&gt;&lt;br /&gt;
&lt;br /&gt;
It is possible to us the &lt;a href=&quot;http://ajaxmin.codeplex.com/&quot;&gt;AJAX Minifier&lt;/a&gt; to generate compact Ecmascript (JavaScript) and CSS files.&lt;br /&gt;
&lt;br /&gt;
Add the following to your .csproj file within the &lt;code&gt;Project&lt;/code&gt; tag. &lt;a href=&quot;http://www.asp.net/ajaxlibrary/ajaxminquickstart.ashx&quot;&gt;This page gives more detail&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;Target Name=&quot;AfterBuild&quot;&gt;
  &amp;lt;ItemGroup&gt;
    &amp;lt;JS Include=&quot;**\*.original.js&quot; /&gt;
    &amp;lt;CSS Include=&quot;**\*.original.css&quot; /&gt;
  &amp;lt;/ItemGroup&gt;
  &amp;lt;AjaxMin JsSourceFiles=&quot;@(JS)&quot; JsSourceExtensionPattern=&quot;\.original.js$&quot; JsTargetExtension=&quot;.js&quot; 
            CssSourceFiles=&quot;@(CSS)&quot; CssSourceExtensionPattern=&quot;\.original.css$&quot; CssTargetExtension=&quot;.css&quot;
            JsOutputMode=&quot;MultipleLines&quot; JsCombineDuplicateLiterals=&quot;true&quot;/&gt;
&amp;lt;/Target&gt;
&lt;/pre&gt;&lt;br /&gt;
The documentation is good except that it does not detail all the options for the MSBuild task. I list them for version 4.0 below, with descriptions copied from various places including the source code and &lt;a href=&quot;http://www.asp.net/ajaxlibrary/AjaxMinDLL.ashx&quot;&gt;documentation&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;table&gt;&lt;tr&gt;&lt;th&gt;Option&lt;/th&gt;&lt;th&gt;Effect&lt;/th&gt;&lt;th&gt;Default&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsCollapseToLiteral&lt;/td&gt;&lt;td&gt;Collapse new Array() to [] and new Object() to {}.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsCombineDuplicateLiterals&lt;/td&gt;&lt;td&gt;Combine duplicate literals within function scopes to local variables.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsEnsureFinalSemicolon&lt;/td&gt;&lt;td&gt;Appends a semi-colon to the end of the minified JavaScript.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsEvalTreatment&lt;/td&gt;&lt;td&gt;Normally an eval statement can contain anything, including references to local variables and functions. If it is expected to do so, when the tool encounters an eval statement, that scope and all parent scopes cannot take advantage of local variable and function renaming because things could break when the eval is evaluated and the references are looked up. To reduce the amount of resulting minification but make sure that all possible references in evaluated code will hold true, use the &lt;i&gt;MakeAllSafe&lt;/i&gt; value. However, sometimes the developer knows that he’s not referencing local variables in his eval (like when only evaluating JSON objects), and this switch can be set to &lt;i&gt;Ignore&lt;/i&gt; to make sure you get the maximum reduction in resulting code size. Or alternatively, if the developer knows the code being evaluated will only access local variables and functions in the current scope and nowhere else, the &lt;i&gt;MakeImmediateSafe&lt;/i&gt; value can be specified and all parent scopes will still rename their locals. Very dangerous setting; should only be used when you are certain of all possible behavior of evaluated code. &lt;/td&gt;&lt;td&gt;Ignore&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsIndentSize&lt;/td&gt;&lt;td&gt;For the multi-line output feature, how many spaces to use when indenting a block (see OutputMode).&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsInlineSafeStrings&lt;/td&gt;&lt;td&gt;Break up string literals containing &amp;lt;/script&amp;gt; so inline code won&#39;t break.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsLocalRenaming&lt;/td&gt;&lt;td&gt;Renaming of locals. There are a couple settings: &lt;i&gt;KeepAll&lt;/i&gt; is the default and doesn’t rename variables or functions at all. &lt;i&gt;CrunchAll&lt;/i&gt; renames everything it can. In between there is &lt;i&gt;KeepLocalizationVars&lt;/i&gt;, which renames everything it can except for variables starting with L_. Those are left as-is so localization efforts can continue on the minified code.&lt;/td&gt;&lt;td&gt;CrunchAll&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsMacSafariQuirks&lt;/td&gt;&lt;td&gt;There are two quirks that Safari on the Mac (not the PC) needed: throw statements always seem to require a terminating semicolon; and if statements that only contains a single function declaration need to surround that function declaration with curly-braces. Basically, if you want your code to always work in Safari, set this to true. If you don’t care about Safari (for instance, in a corporate environment where the browser your users can use is highly restricted), setting this value to false might save a few bytes.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsOutputMode&lt;/td&gt;&lt;td&gt;&lt;i&gt;SingleLine&lt;/i&gt; minifies everything to a single line. &lt;i&gt;MultipleLines&lt;/i&gt; breaks the minified code into multiple lines for easier reading (won’t drive you insane trying to debug a single line). The only difference between the two outputs is whitespace. (see also: IndentSize).&lt;/td&gt;&lt;td&gt;SingleLine&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsRemoveFunctionExpressionNames&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsRemoveUnneededCode&lt;/td&gt;&lt;td&gt;Should be set to true for maximum minification. Removes unreferenced local functions (not global functions, though), unreferenced function parameters, quotes around object literal field names that won’t be confused with reserved words, and it does some interesting things with switch statements. For instance, if the default case is empty (just a break), it removes it altogether. If there is no default case, it also removes other empty case statements. It also removes break statements after return statements (unreachable code). &lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;JsStripDebugStatements&lt;/td&gt;&lt;td&gt;removes “debugger” statements, any calls into certain namespaces like $Debug, Debug, Web.Debug or Msn.Debug. also strips calls to the WAssert function.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2231317451144284187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2011/01/using-ajax-minifier-as-msbuild-task.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2231317451144284187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2231317451144284187'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2011/01/using-ajax-minifier-as-msbuild-task.html' title='Using the AJAX minifier as an MSBuild task to compress JavaScript'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7128848124364826845</id><published>2010-12-28T13:44:00.000+13:00</published><updated>2010-12-28T14:18:10.512+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="WiX"/><title type='text'>WiX 3.5 in Visual Studio 2010 undefined preprocessor variable when solution folders used</title><content type='html'>I ran into a problem with the WiX 3.5 installer in Visual Studio 2010 when trying to add a reference to a project in a solution folder. The folder structure looked like this:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Client&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;WiXProject&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;References&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Common _Common\Common_&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;li&gt;Common&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;Common&lt;/li&gt;
&lt;/ul&gt;&lt;/ul&gt;The installer built fine when I set &lt;i&gt;Harvest&lt;/i&gt; to &lt;i&gt;True&lt;/i&gt;, but, since I wanted more control over the installer, I wanted to manually edit the &lt;i&gt;wxs&lt;/i&gt; file like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;file diskid=&quot;1&quot; id=&quot;Common&quot; name=&quot;$(var.Common.TargetFileName)&quot; source=&quot;$(var.Common.TargetPath)&quot;&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Unfortunately, Votive (the WiX integration with Visual Studio) does not seem to correctly handle references to projects in solution folders. The workaround I used was to unload the WiX project and edit the line as highlighted:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml;highlight:[2]&quot;&gt;    &lt;ProjectReference Include=&quot;..\Common\Common.csproj&quot;&gt;
      &lt;Name&gt;Common _Common\Common_&lt;/Name&gt;
      &lt;Project&gt;{89f6f5f2-5aeb-4501-9f4f-9073d7dedd4c}&lt;/Project&gt;
      &lt;Private&gt;True&lt;/Private&gt;
      &lt;DoNotHarvest&gt;True&lt;/DoNotHarvest&gt;
      &lt;RefProjectOutputGroups&gt;Binaries;Content;Satellites&lt;/RefProjectOutputGroups&gt;
      &lt;RefTargetDir&gt;INSTALLLOCATION&lt;/RefTargetDir&gt;
    &lt;/ProjectReference&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:xml;highlight:[2]&quot;&gt;    &lt;ProjectReference Include=&quot;..\Common\Common.csproj&quot;&gt;
      &lt;Name&gt;Common&lt;/Name&gt;
      &lt;Project&gt;{89f6f5f2-5aeb-4501-9f4f-9073d7dedd4c}&lt;/Project&gt;
      &lt;Private&gt;True&lt;/Private&gt;
      &lt;DoNotHarvest&gt;True&lt;/DoNotHarvest&gt;
      &lt;RefProjectOutputGroups&gt;Binaries;Content;Satellites&lt;/RefProjectOutputGroups&gt;
      &lt;RefTargetDir&gt;INSTALLLOCATION&lt;/RefTargetDir&gt;
    &lt;/ProjectReference&gt;
&lt;/pre&gt;&lt;br /&gt;
When I reloaded the project, my &lt;i&gt;wxs&lt;/i&gt; file worked as originally configured because the variable &lt;code&gt;var.Common.TargetFileName&lt;/code&gt; was now defined.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7128848124364826845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/12/wix-35-in-visual-studio-2010-undefined.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7128848124364826845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7128848124364826845'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/12/wix-35-in-visual-studio-2010-undefined.html' title='WiX 3.5 in Visual Studio 2010 undefined preprocessor variable when solution folders used'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4461155478997995444</id><published>2010-12-20T20:16:00.002+13:00</published><updated>2010-12-28T14:19:17.935+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Virtualisation"/><title type='text'>Virtual Server 2005 R2 minimum host user permissions</title><content type='html'>&lt;a href=&quot;http://technet.microsoft.com/en-us/library/cc708357(WS.10).aspx&quot;&gt;This page on MSDN&lt;/a&gt; lists the following permissions required for a user to run a virtual machine:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;On the .vmc file: Read Data, Write Data and Execute File&lt;/li&gt;
&lt;li&gt;On the .vhd file: Read Data, Read Attributes, Read Extended Attributes, and Write Data&lt;/li&gt;
&lt;li&gt;On the .vnc file if a virtual machine is connected to a virtual network: Execute File, Read Data, Read Attributes and Read Permissions&lt;/li&gt;
&lt;li&gt;On the folder containing the .vmc file, for a virtual machine to have the ability to save state: List Folder and Write/Create File&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Unfortunately, this list is not complete. They also need:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;On the .vmc file: Read Permissions&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
The error you may see when you attempt to start a VM configured according to the MSDN page is:&lt;br /&gt;
&lt;br /&gt;
&lt;p style=&quot;color:red;text-align:center&quot;&gt;The following error occurred:&lt;br /&gt;
The virtual machine could not be started. The virtual machine could not be started. Access was denied.&lt;/p&gt;&lt;br /&gt;
Using these permissions, you can create a local user who belongs to no groups and only has the permissions provided above - security through least privilege.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4461155478997995444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/12/virtual-machine-2005-r2-minimum-host.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4461155478997995444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4461155478997995444'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/12/virtual-machine-2005-r2-minimum-host.html' title='Virtual Server 2005 R2 minimum host user permissions'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-791289224287522480</id><published>2010-12-19T19:16:00.000+13:00</published><updated>2010-12-28T14:20:57.685+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><category scheme="http://www.blogger.com/atom/ns#" term="Virtualisation"/><title type='text'>Installing Debian 5 (Lenny) on Microsoft Virtual Server 2005 R2 SP1</title><content type='html'>If you run into a kernel panic installing Debian 5 (Lenny) on Microsoft Virtual Server 2005 R2 SP1 (32 bit host and client), try this:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Launch the Debian CD.&lt;/li&gt;
&lt;li&gt;Press TAB on the Install option to edit the command line.&lt;/li&gt;
&lt;li&gt;Change &lt;pre&gt;vga=normal&lt;/pre&gt;to &lt;pre&gt;vga=791&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Add the following: &lt;pre&gt;noapic nolapic noreplace-paravirt&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Install as normal.&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/791289224287522480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/12/installing-debian-5-lenny-on-microsoft.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/791289224287522480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/791289224287522480'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/12/installing-debian-5-lenny-on-microsoft.html' title='Installing Debian 5 (Lenny) on Microsoft Virtual Server 2005 R2 SP1'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1051980299383033160</id><published>2010-12-19T18:27:00.001+13:00</published><updated>2011-01-08T22:13:49.919+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Virtualisation"/><title type='text'>Problem selecting drop down options in MS Virtual Server 2005 R2</title><content type='html'>I ran into problems when trying to create a new virtual machine on Microsoft Virtual Server 2005 R2 SP1. Clicking on the drop-down lists (such as network selection) did not have any effect. This is how the lists appeared:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig4Et772Buo6Jy4OF8V8tgSUO85H_rcROPy1lxVBVHjDkXgfwK3f7jJjqsRZ5fLtn4dR3Eo8NIHdrXahBrQMw2s_dHZu9RDsQu0jfYDTBUAZyXJ5s0U2km-tuj4cjjdw7QqyHVbnJPgFU/s1600/img.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img style=&quot;max-width:100%&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig4Et772Buo6Jy4OF8V8tgSUO85H_rcROPy1lxVBVHjDkXgfwK3f7jJjqsRZ5fLtn4dR3Eo8NIHdrXahBrQMw2s_dHZu9RDsQu0jfYDTBUAZyXJ5s0U2km-tuj4cjjdw7QqyHVbnJPgFU/s1600/img.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem turned out to be that I needed to turn on compatibility mode for the site in Internet Explorer 8. After doing that, this is how the drop-down list looked:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-V_q2zRl1DC0JhFuytE3SFtZX04NVs4hbUn4ZCqQJGR9W6BMUL8Bp4RAuvwJJ5fzJIHy0a3oG4Bqt9FJIMj_gP6I5m9Yh_U0KtIF_T_k0vgEgycfvZP8nfCAIcE4qGek0tF1VMOKCu_w/s1600/img.png&quot; imageanchor=&quot;1&quot; style=&quot;&quot;&gt;&lt;img style=&quot;max-width:100%&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-V_q2zRl1DC0JhFuytE3SFtZX04NVs4hbUn4ZCqQJGR9W6BMUL8Bp4RAuvwJJ5fzJIHy0a3oG4Bqt9FJIMj_gP6I5m9Yh_U0KtIF_T_k0vgEgycfvZP8nfCAIcE4qGek0tF1VMOKCu_w/s1600/img.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1051980299383033160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/12/problem-selecting-drop-down-options-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1051980299383033160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1051980299383033160'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/12/problem-selecting-drop-down-options-in.html' title='Problem selecting drop down options in MS Virtual Server 2005 R2'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig4Et772Buo6Jy4OF8V8tgSUO85H_rcROPy1lxVBVHjDkXgfwK3f7jJjqsRZ5fLtn4dR3Eo8NIHdrXahBrQMw2s_dHZu9RDsQu0jfYDTBUAZyXJ5s0U2km-tuj4cjjdw7QqyHVbnJPgFU/s72-c/img.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-90415619416541395</id><published>2010-12-16T21:06:00.000+13:00</published><updated>2010-12-28T14:21:23.385+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Linux"/><title type='text'>Dynamic linking of shared libraries in Linux</title><content type='html'>To list the classes, functions, and methods exported by a shared library (.so), use this command:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;nm -C --defined-only -g lib&lt;i&gt;library&lt;/i&gt;.so
&lt;/pre&gt;&lt;br /&gt;
To view a list of shared libraries required by a program:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;ldd &lt;i&gt;program&lt;/i&gt;
&lt;/pre&gt;&lt;br /&gt;
Tested on Ubuntu 10.10. Note that the equivalent functionality in Windows would be provided by dumpbin.exe.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/90415619416541395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/12/dynamic-linking-of-shared-libraries-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/90415619416541395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/90415619416541395'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/12/dynamic-linking-of-shared-libraries-in.html' title='Dynamic linking of shared libraries in Linux'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6514853560494849918</id><published>2010-12-16T18:42:00.000+13:00</published><updated>2010-12-16T18:42:40.186+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Boost"/><category scheme="http://www.blogger.com/atom/ns#" term="C++"/><title type='text'>Boost serial ports and new C++0x (C++1x) features</title><content type='html'>I recently spent some time writing my first small application on Linux (Ubuntu 10.10 using GCC 4.5 and the Boost libraries). The plan is to try writing some cross-platform, portable C++, while trying out the new C++0x features that have been implemented in GCC 4.5.&lt;br /&gt;
&lt;br /&gt;
This application uses the asio (asynchronous I/O) features in the Boost libraries along with the Boost serial_port implementation to read and display input from a serial port (e.g. GPS NMEA data). I also used experimental C++0x threading libraries and lambdas and tried the Boost implementation of the observer pattern - sockets and signals. I have yet to test this code on any other platform.  &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;main.cpp&lt;/h3&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;#include &quot;headers.h&quot;
#include &quot;SerialPort.h&quot;
using namespace std;
using namespace boost::asio;

int main()
{
        //allow inter-mixing of wcout and cout calls (apparently non-standard)
        ios::sync_with_stdio(false);

        string portName = &quot;/dev/ttyUSB1&quot;;

        io_service ioService;
        io_service::work work(ioService);
        thread ioThread([&amp;amp;ioService] () { ioService.run(); });

        SerialPort port(portName, 4800, ioService);
        port.LineReceived.connect([] (std::vector&amp;lt;char&amp;gt; const &amp;amp; line)
            {
                cout &amp;lt;&amp;lt; &amp;amp;line[0] &amp;lt;&amp;lt; endl;
            });

        wcout &amp;lt;&amp;lt; L&quot;Listening on port: &quot; &amp;lt;&amp;lt; endl;
        cout &amp;lt;&amp;lt; portName &amp;lt;&amp;lt; endl;
        wcout &amp;lt;&amp;lt; L&quot;Press enter to stop listening...&quot; &amp;lt;&amp;lt; endl;
        wstring result;
        getline(wcin, result);
        wcout &amp;lt;&amp;lt; L&quot;Exiting...&quot; &amp;lt;&amp;lt; endl;

        ioService.stop();
        ioThread.join();
}
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;headers.h&lt;/h3&gt;&lt;i&gt;Separated for precompilation.&lt;/i&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:cpp&quot;&gt;#include &amp;lt;boost/asio.hpp&amp;gt;
#include &amp;lt;boost/signal.hpp&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;thread&amp;gt;
#include &amp;lt;functional&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;SerialPort.h&lt;/h3&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;#ifndef SERIALPORT_H
#define SERIALPORT_H

class SerialPort
{
public:
    SerialPort(std::string const &amp;amp; portName, int portSpeed, boost::asio::io_service &amp;amp; ioService);

    boost::signal&amp;lt;void(std::vector&amp;lt;char&amp;gt; const &amp;amp;)&amp;gt; LineReceived;

private:
    void OnBytesRead(boost::system::error_code const &amp;amp;error, size_t bytesReceived);
    void BeginListening();

    std::vector&amp;lt;char&amp;gt; _readBuffer;
    std::vector&amp;lt;char&amp;gt; _currentLine;
    boost::asio::serial_port _port;
};

#endif // SERIALPORT_H
&lt;/pre&gt;&lt;br /&gt;
&lt;h3&gt;SerialPort.cpp&lt;/h3&gt;&lt;pre class=&quot;brush:cpp&quot;&gt;#include &quot;headers.h&quot;
#include &quot;SerialPort.h&quot;
using namespace std;
using namespace boost::asio;

SerialPort::SerialPort(string const &amp;amp; portName, int const portSpeed, io_service &amp;amp; ioService)
    : _readBuffer(1000),
      _port(ioService, portName)

{
    _port.set_option(serial_port_base::baud_rate(portSpeed));

    BeginListening();
}

void SerialPort::BeginListening()
{
    _port.async_read_some(buffer(&amp;amp;_readBuffer[0], _readBuffer.size()),
        [this](boost::system::error_code const &amp;amp;error, size_t bytesReceived)
        {
            this-&amp;gt;OnBytesRead(error, bytesReceived);
        });
}

void SerialPort::OnBytesRead(boost::system::error_code const &amp;amp;error, size_t bytesReceived)
{
    if(error)
    {
        return;
    }

    for(size_t i = 0; i != bytesReceived; ++i)
    {
        char currentChar = _readBuffer[i];
        switch(currentChar)
        {
        case &#39;\r&#39;:
            break;
        case &#39;\n&#39;:
            LineReceived(_currentLine);
            _currentLine.clear();
            break;
        default:
            _currentLine.push_back(currentChar);
        }
    }

    BeginListening();
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6514853560494849918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/12/boost-serial-ports-and-new-c0x-c1x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6514853560494849918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6514853560494849918'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/12/boost-serial-ports-and-new-c0x-c1x.html' title='Boost serial ports and new C++0x (C++1x) features'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3678344752085369881</id><published>2010-11-24T10:28:00.001+13:00</published><updated>2010-12-28T14:21:51.944+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="WCF"/><title type='text'>What exceptions can a WCF channel throw?</title><content type='html'>It seems that expected exceptions from a WCF channel include:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;TimeoutException&lt;/li&gt;
&lt;li&gt;CommunicationException - FaultException, FaultException&lt;T&gt;, EndpointNotFoundException etc.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa354510.aspx&quot;&gt;MSDN describes the exceptions that are caused by communication errors&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Also from &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.communicationexception.aspx&quot;&gt;MSDN&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;When implementing custom channels and binding elements, it is strongly recommended that your components throw only System.TimeoutException or CommunicationException-derived objects. In the case where your components throw a recoverable exception that is specific to the component, wrap that exception inside a CommunicationException object.&lt;/blockquote&gt;&lt;br /&gt;
MSDN also describes how to &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms733721.aspx&quot;&gt;specify and handle faults in WCF contracts and services&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3678344752085369881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/what-exceptions-can-wcf-channel-throw.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3678344752085369881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3678344752085369881'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/what-exceptions-can-wcf-channel-throw.html' title='What exceptions can a WCF channel throw?'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8880902668255250987</id><published>2010-11-20T09:22:00.001+13:00</published><updated>2010-11-20T09:22:37.572+13:00</updated><title type='text'>Checking your credit rating in New Zealand for free</title><content type='html'>Check your own credit rating details for free in New Zealand at two major credit rating companies:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://www.mycreditfile.co.nz/&quot;&gt;Veda Advantage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dnb.co.nz/Credit_Reporting/Order_my_consumer_report/index.aspx&quot;&gt;Dun and Bradstreet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Charges only apply to their &#39;express&#39; services.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8880902668255250987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/checking-your-credit-rating-in-new.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8880902668255250987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8880902668255250987'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/checking-your-credit-rating-in-new.html' title='Checking your credit rating in New Zealand for free'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5015790128653875921</id><published>2010-11-19T10:42:00.000+13:00</published><updated>2010-11-19T10:42:18.713+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>PowerShell Profile</title><content type='html'>Some handy functions I put into my PowerShell profile.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;#Change background colour of window if PowerShell is launched &quot;As Administrator&quot; under UAC
&amp; {
    $wid=[System.Security.Principal.WindowsIdentity]::GetCurrent()
    $prp=new-object System.Security.Principal.WindowsPrincipal($wid)
    $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator
    $IsAdmin=$prp.IsInRole($adm)
    if ($IsAdmin)
    {
        (get-host).UI.RawUI.Backgroundcolor=&quot;DarkRed&quot;
        clear-host
    }
}

#Create an alias &#39;ed&#39; to launch Visual Studio as your file editor
function Edit-WithDevenv([string]$Path)
{
    &amp; devenv /edit $Path 
}
new-alias ed edit-withdevenv
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5015790128653875921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/powershell-profile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5015790128653875921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5015790128653875921'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/powershell-profile.html' title='PowerShell Profile'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7947743924124557217</id><published>2010-11-19T10:36:00.000+13:00</published><updated>2010-11-19T11:19:09.863+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MSBuild"/><title type='text'>MSBuild</title><content type='html'>Links to &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/5dy88c2e(v=VS.100).aspx&quot;&gt;elements&lt;/a&gt; and &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/7z253716(v=VS.100).aspx&quot;&gt;tasks&lt;/a&gt;, including &lt;a href=&quot;http://msbuildtasks.tigris.org/&quot;&gt;the community tasks&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms164313.aspx&quot;&gt;Well known metadata&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7947743924124557217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/msbuild.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7947743924124557217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7947743924124557217'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/msbuild.html' title='MSBuild'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3147016004230721109</id><published>2010-11-19T10:30:00.002+13:00</published><updated>2011-07-16T12:47:21.377+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight"/><title type='text'>Using ASP.NET authentication in Silverlight with RIA Services</title><content type='html'>The first step is to set up the database you wish to authenticate against (ignore this if you are using Windows authentication, which wouldn&#39;t apply for most websites).&lt;br /&gt;
&lt;br /&gt;
If you are not using the default DB, add this to the configuration section in your web.config:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;connectionStrings&amp;gt;
    &amp;lt;clear/&amp;gt;
    &amp;lt;add name=&amp;quot;LocalSqlServer&amp;quot; connectionString=&amp;quot;data source=(local); Integrated Security=SSPI;Initial Catalog=ASPNET;&amp;quot; providerName=&amp;quot;System.Data.SqlClient&amp;quot; /&amp;gt;
&amp;lt;/connectionStrings&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
(Thanks to &lt;a href=&quot;http://centricle.com/tools/html-entities/&quot;&gt;centricle.com&lt;/a&gt; for the html encoding utility.)&lt;br /&gt;
&lt;br /&gt;
To add the default ASP.NET authentication tables to the database, use &lt;i&gt;aspnet_regsql&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.asp.net/LEARN/moving-to-asp.net-2.0/module-08.aspx&quot;&gt;asp.net&lt;/a&gt; has a good introduction to setting up ASP.NET authentication.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://blog.davidyack.com/journal/2009/7/29/ria-services-staying-logged-in.html&quot;&gt;This blog entry&lt;/a&gt; shows how to modify the silverlight business templates to use ASP.NET forms authentication with &quot;stay logged in&quot; feature.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3147016004230721109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/using-aspnet-authentication-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3147016004230721109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3147016004230721109'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/using-aspnet-authentication-in.html' title='Using ASP.NET authentication in Silverlight with RIA Services'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7001025298485214106</id><published>2010-11-19T10:30:00.001+13:00</published><updated>2010-11-19T11:19:23.217+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight"/><title type='text'>RIA tid-bits</title><content type='html'>&lt;b&gt;Server side:&lt;/b&gt;&lt;br /&gt;
DomainService (with [EnableClientAccess])&lt;br /&gt;
&lt;br /&gt;
[ServiceOperation] for generic operations&lt;br /&gt;
&lt;br /&gt;
[Query] or Get...(args); returning T, IEnumerable&lt;t&gt; or IQueryable&lt;t&gt;&lt;br /&gt;
Use HasSideEffects = true to send query as post.&lt;br /&gt;
[Insert] or Insert...(args)&lt;br /&gt;
[Update] or Update...(args)&lt;br /&gt;
[Delete] or Delete...(args)&lt;br /&gt;
Resolve is used for optimistic concurrency resolution.&lt;br /&gt;
[Custom] methods return void and take an entity as the first parameter but is not one of the above. They are change tracked etc.&lt;br /&gt;
[ServiceOperation] are more like web methods.&lt;br /&gt;
&lt;br /&gt;
Entities may inherit from entity, but must have a key if used in an IEnumerable collection.&lt;br /&gt;
&lt;br /&gt;
[Include] is used to link classes together, for example Job and JobNotes. This will ensure the code generator will copy JobNotes to the client project. This can also be used for data denormalisation on the Job class&#39;s metadata class:&lt;br /&gt;
[Include(&quot;NoteDateTime&quot;, &quot;DateTime&quot;)]&lt;br /&gt;
public JobNotes JobNotes; &lt;br /&gt;
This will result in a new property on the Job class on the client called NoteDateTime and only serialise the DateTime of the job note, not the detail.&lt;br /&gt;
&lt;br /&gt;
[MetadataType] can be used to specify another class whose attributes are merged with the main class. Attributes on properties in the metadata class are merged with those on the main class. This is useful for modifying the attributes on compiler generated code through partial classes.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Client side:&lt;/b&gt;&lt;br /&gt;
Perform linq operations to filter (if required) the query, using the query as IEnumerable, then use the DomainContext&#39;s Load methods to load the data asynchronously.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;DataGrid / DataForm / FieldLabel:&lt;/b&gt;&lt;br /&gt;
[Bindable] specifies whether a property is bindable or not.&lt;br /&gt;
[Display(Name, Description)]&lt;br /&gt;
&lt;br /&gt;
Validation:&lt;br /&gt;
[StringLength]&lt;br /&gt;
[Required]&lt;br /&gt;
[Range]&lt;br /&gt;
[RegularExpression]&lt;br /&gt;
[CustomValidation]&lt;br /&gt;
[DataType]&lt;br /&gt;
Custom validation attributes can be made by deriving from ValidationAttribute.&lt;br /&gt;
&lt;br /&gt;
Authorisation:&lt;br /&gt;
[RequiresAuthentication]&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Shared code:&lt;/b&gt;&lt;br /&gt;
Code file should be called &lt;i&gt;xxxxx&lt;/i&gt;.shared.cs, then use [Shared].&lt;br /&gt;
Use [CustomValidation] for validation code (see &lt;a href=&quot;http://blogs.microsoft.co.il/blogs/bursteg/archive/2009/04/14/net-ria-services-custom-validation.aspx&quot;&gt;this&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
A useful application of shared code is to add a partial class that extends the functionality of a generated class, i.e. to add a new calculated property. This class will then be copied to the client and the calculated property will be in both client and server code.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;More detail:&lt;/b&gt;&lt;br /&gt;
See &lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/dd695920.aspx&quot;&gt;this page&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7001025298485214106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/ria-tid-bits.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7001025298485214106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7001025298485214106'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/ria-tid-bits.html' title='RIA tid-bits'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5251093229873073546</id><published>2010-11-19T10:27:00.000+13:00</published><updated>2010-11-19T11:24:00.922+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration / Build"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>PowerShell script to get a list of all assemblies required by a .NET executable</title><content type='html'>&lt;pre class=&quot;brush:ps&quot;&gt;param ([string][parameter(mandatory=$true)]$path)

function GetReferencedAssemblies([reflection.assembly][parameter(mandatory=$true)]$top)
{
    $script:found += $top.Location

    $ref = $top.getreferencedassemblies() 
    $ref | % {
        $name = $_.name
        $loaded = $null
        try
        {
            $loaded = [reflection.assembly]::load($_) 
        }
        catch
        {
            $loaded = [reflection.assembly]::loadfrom((resolve-path ($name + &#39;.dll&#39;)))
        }

        if($script:found -notcontains $loaded.Location -and -not $loaded.GlobalAssemblyCache)
        {
            GetReferencedAssemblies $loaded
        }
    }
}

$path = resolve-path $path -ErrorAction stop
pushd (split-path $path)
try
{
    $found = @()
    $top = [reflection.assembly]::loadfrom($path)
    GetReferencedAssemblies $top
    $found
}
finally
{
    popd
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5251093229873073546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/powershell-script-to-get-list-of-all.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5251093229873073546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5251093229873073546'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/powershell-script-to-get-list-of-all.html' title='PowerShell script to get a list of all assemblies required by a .NET executable'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5877974313591904246</id><published>2010-11-19T10:24:00.000+13:00</published><updated>2010-11-19T11:19:51.892+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Networking"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>PowerShell script to get the IPv4 address of a server</title><content type='html'>Possible usage:&lt;br /&gt;
&lt;pre&gt;Get-HostIp servername | clip
&lt;/pre&gt;&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;function Get-HostIp([string][parameter(mandatory=$true)]$HostName)
{
 resolve-host $HostName | select -expandproperty addresslist -First 1 | select -ExpandProperty ipaddresstostring
}&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5877974313591904246/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/powershell-script-to-get-ipv4-address.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5877974313591904246'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5877974313591904246'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/powershell-script-to-get-ipv4-address.html' title='PowerShell script to get the IPv4 address of a server'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3758802050648922474</id><published>2010-11-19T10:17:00.001+13:00</published><updated>2011-01-02T23:27:24.845+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration / Build"/><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Generate DB script using PowerShell</title><content type='html'>This is an example script that can be used to dump a SQL Server database schema into a creation script. The advantages of this method over using SQL Server Management Studio include:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Scriptable. Can be included in a build or commit script.&lt;/li&gt;
&lt;li&gt;Repeatable. SQL Server Management Studio generated scripts vary from run to run, so it can be difficult to make comparisons with previous versions of the schema in source control.&lt;/li&gt;
&lt;li&gt;Repeatable. Using the SQL Server Management Studio GUI to create scripts relies on everyone ticking the same boxes to generate consistent and correct DB scripts.&lt;/li&gt;
&lt;li&gt;Configurable. This script ignores objects (e.g. tables and triggers) with names starting with &#39;test&#39;.&lt;br /&gt;
&lt;/ul&gt;&lt;pre class=&quot;brush: ps;&quot;&gt;&amp;lt;#
.SYNOPSIS
.NOTES
Author: 
#&amp;gt;

$root = resolve-path ((split-path -path $MyInvocation.MyCommand.Definition -Parent) + &#39;\..\..&#39;);
$serverURL = &#39;SQL2005&#39;
$databaseName = &quot;DBToDump&quot;;
$scriptFile = &quot;$root\Scripts\Create.sql&quot;

#================== GetObjectsFromDB ===================
function GetObjectsFromDB(
[parameter(mandatory=$true)]$Database, 
[parameter(mandatory=$true)][string]$ObjectType)
{
    $objects = [Microsoft.SqlServer.Management.Smo.SqlSmoObject[]]($database.$ObjectType | Where-object {$_.IsSystemObject -ne $true -and $_.IsFixedRole -ne $true -and $_.Name -notmatch &#39;^test&#39; } );
    if($objects)
    {
        ,$objects
    }
    else
    {
        ,@()
    }
}
#=======================================================

[System.Reflection.Assembly]::LoadWithPartialName(&quot;Microsoft.SqlServer.SMO&quot;) | out-null
$server = new-object Microsoft.SqlServer.Management.Smo.Server ($serverURL);
$server.SetDefaultInitFields([Microsoft.SqlServer.Management.SMO.StoredProcedure], &quot;IsSystemObject&quot;)
$db = $server.Databases[$databaseName];

if(Test-Path $scriptFile)
{
    del $scriptFile
}

$scripter = new-object Microsoft.SqlServer.Management.Smo.Scripter ($server);
$options = $scripter.Options
$options.ScriptDrops = $false
$options.IncludeIfNotExists = $false
$options.ScriptData = $false
$options.NoCommandTerminator = $false
$options.FileName = $scriptFile
$options.SchemaQualify = $true
$options.ToFileOnly = $true
$options.AppendToFile = $true
$options.DriAllConstraints = $true
$options.Indexes = $true
$options.ClusteredIndexes = $true
$options.Statistics = $true
$options.IncludeDatabaseRoleMemberships = $true
$options.TargetServerVersion = [Microsoft.SqlServer.Management.Smo.SqlServerVersion]::Version90
$options.NoFileGroup = $true
$options.DriAll = $true

echo &quot;Scripting database...&quot;
$scripter.EnumScript($db)

#don&#39;t script collation for DB objects since it has been done for the database as a whole
$options.NoCollation = $true

#switch to newly created DB
&quot;
USE [$databaseName]
GO
&quot; | out-file -append $scriptFile -ErrorAction stop

$objects = GetObjectsFromDB $db &quot;Schemas&quot;
$objects += GetObjectsFromDB $db &quot;Roles&quot;
$objects += GetObjectsFromDB $db &quot;Tables&quot;
$objects += GetObjectsFromDB $db &quot;UserDefinedFunctions&quot;
$objects += GetObjectsFromDB $db &quot;StoredProcedures&quot;
$objects += GetObjectsFromDB $db &quot;Views&quot;

$scripter.EnumScript($objects)

echo &quot;Done.&quot;

#set permissions (not sure how to script the ones I want without including test permissions)
&quot;
GRANT EXECUTE ON SCHEMA::[app] TO [application] AS [dbo]
GO
GRANT SELECT ON SCHEMA::[cfg] TO [application] AS [dbo]
GO
GRANT SELECT ON SCHEMA::[cfg] TO [support] AS [dbo]
GO
GRANT SELECT ON SCHEMA::[dbo] TO [support] AS [dbo]
GO
GRANT UPDATE ON SCHEMA::[cfg] TO [support] AS [dbo]
GO
GRANT SELECT ON SCHEMA::[sup] TO [support] AS [dbo]
GO
GRANT VIEW DEFINITION ON SCHEMA::[sup] TO [support] AS [dbo]
GO
GRANT VIEW DEFINITION ON SCHEMA::[cfg] TO [support] AS [dbo]
GO
GRANT VIEW DEFINITION ON SCHEMA::[dbo] TO [support] AS [dbo]
GO
GRANT EXECUTE ON SCHEMA::[sup] TO [support] AS [dbo]
GO&quot; | out-file -append $scriptFile -ErrorAction stop
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3758802050648922474/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/generate-db-script-using-powershell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3758802050648922474'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3758802050648922474'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/generate-db-script-using-powershell.html' title='Generate DB script using PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7699946468589570589</id><published>2010-11-17T11:12:00.029+13:00</published><updated>2013-07-01T13:49:57.086+12:00</updated><title type='text'>Windows Software I can&amp;#39;t live without</title><content type='html'>&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://secunia.com/vulnerability_scanning/personal/&quot;&gt;Secunia PSI&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://technet.microsoft.com/en-us/sysinternals/default.aspx&quot;&gt;Sysinternals Suite&lt;/a&gt; (&lt;a href=&quot;http://live.sysinternals.com/&quot;&gt;and the live version&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.sharpdevelop.net/ILSpy.ashx&quot;&gt;ILSpy&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.7-zip.org/&quot;&gt;7-Zip&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.fiddler2.com/fiddler2/&quot;&gt;Fiddler&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.wireshark.org/&quot;&gt;Wireshark&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://keepass.info/&quot;&gt;KeePass&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://subversion.tigris.org/&quot;&gt;Subversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tortoisesvn.net/downloads&quot;&gt;TortoiseSVN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.google.com/uc?id=0B2KXEz09Z8huZjRlNDcyMjEtYzUwYy00MWE2LWIwZWEtMDE4ZmE0YWQ0ZTBi&amp;amp;export=download&amp;amp;authkey=CLXXqNoF&amp;amp;hl=en&quot;&gt;mdbg (.NET 3.5 and earlier)&lt;/a&gt;, and &lt;a href=&quot;http://www.microsoft.com/downloads/en/confirmation.aspx?FamilyID=ce94e626-c43d-419c-8538-173f6a042ef5&quot;&gt;mdbg (.NET 4.0)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.slysoft.com/en/virtual-clonedrive.html&quot;&gt;Virtual CloneDrive&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Honourable mention:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/security_essentials/&quot;&gt;Microsoft Security Essentials&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/en/details.aspx?familyid=02be8aee-a3b6-4d94-b1c9-4b1989e0900c&amp;amp;displaylang=en&quot;&gt;Microsoft Baseline Security Analyzer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.chiark.greenend.org.uk/~sgtatham/putty/&quot;&gt;Putty&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.piriform.com/speccy&quot;&gt;Speccy&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.truecrypt.org/&quot;&gt;Truecrypt&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.utorrent.com/&quot;&gt;µTorrent&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm&quot;&gt;XVI32&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dependencywalker.com/&quot;&gt;Dependency Walker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mse.codeplex.com/&quot;&gt;Managed Stack Explorer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/download/en/details.aspx?id=28567&quot;&gt;PerfView&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/downloads/en/details.aspx?FamilyID=4603c621-6de7-4ccb-9f51-d53dc7e48047&quot;&gt;Remote Desktop Connection Manager&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.foxitsoftware.com/pdf/reader/&quot;&gt;Foxit PDF Reader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pscx.codeplex.com/&quot;&gt;PowerShell Community Extensions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://download.microsoft.com/download/c/f/4/cf454ae0-a4bb-4123-8333-a1b6737712f7/windows-kb841290-x86-enu.exe&quot;&gt;File Checksum Integrity Verifier (fciv)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Windows System State Analyser &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=140109&quot;&gt;x64&lt;/a&gt; or &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkID=140110&quot;&gt;x86&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Visual Studio 2012:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.microsoft.com/visualstudio/eng/downloads#d-visual-studio-2012-update&quot;&gt;Visual Studio 2012 Update 1&lt;/a&gt; (should be downloaded automatically from within VS 2012)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.asp.net/vnext/overview/fall-2012-update&quot;&gt;ASP.NET and Web Tools 2012.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.jetbrains.com/resharper/index.html&quot;&gt;ReSharper 7.1&lt;/a&gt;, if installed using these steps:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Set VS keyboard shortcuts to C# and reset to defaults.&lt;/li&gt;
&lt;li&gt;Set R# keyboard shortcuts to Visual Studio style.&lt;/li&gt;
&lt;li&gt;Set The following R# options:
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;Code Editing -&amp;gt; C# -&amp;gt; Formatting Style -&amp;gt; Line Breaks and Wrapping -&amp;gt; Line Wrapping -&amp;gt; Wrap long lines&lt;/i&gt;: untick&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Code Editing -&amp;gt; C# -&amp;gt; Formatting Style -&amp;gt; Other -&amp;gt; Modifiers -&amp;gt; Use explicit private modifier&lt;/i&gt;: untick&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Code Editing -&amp;gt; C# -&amp;gt; Formatting Style -&amp;gt; Other -&amp;gt; Modifiers -&amp;gt; Use explicit internal modifier&lt;/i&gt;: untick&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Code Editing -&amp;gt; C# -&amp;gt; Formatting Style -&amp;gt; Other -&amp;gt; Align Multiline Constructs -&amp;gt; Array, object and collection initializer&lt;/i&gt;: untick&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Tools -&amp;gt; External Sources -&amp;gt; Navigation to Sources&lt;/i&gt;: tick all boxes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Run the following code in the Package Manager Console:&lt;pre&gt;($DTE.Commands | ? { $_.Name -eq &#39;ReSharper.ReSharper_DuplicateText&#39; }).Bindings = @()
($DTE.Commands | ? { $_.Name -eq &#39;Edit.PasteParameterTip&#39; }).Bindings = @()
($DTE.Commands | ? { $_.Name -eq &#39;ReSharper.ReSharper_IntroduceField&#39; }).Bindings = @()
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7699946468589570589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/windows-software-i-can-live-without.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7699946468589570589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7699946468589570589'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/windows-software-i-can-live-without.html' title='Windows Software I can&amp;#39;t live without'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4507460968350799439</id><published>2010-11-16T14:21:00.006+13:00</published><updated>2010-11-19T11:20:46.878+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="Networking"/><title type='text'>SSH client for .NET</title><content type='html'>I have been looking for a good, free, .NET SSH client. &lt;a href=&quot;http://sshnet.codeplex.com/&quot;&gt;This SSH client seems to fit the bill&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I did, however, run into a problem where it appears that the state of the session is not preserved between calls. I will follow this up on the Codeplex page.&lt;br /&gt;
&lt;br /&gt;
The following test fails:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;[TestMethod]
public void ShouldMaintainSessionStateAcrossCommands()
{
    using (SshClient client = new SshClient(&quot;sssssss&quot;, &quot;uuuuuuu&quot;, &quot;ppppppp&quot;))
    {
        client.Connect();

        client.RunCommand(&quot;cd /tmp&quot;);
        string result = client.RunCommand(&quot;pwd&quot;).Result;

        Assert.AreEqual(&quot;/tmp&quot;, result);
    }
}
&lt;/pre&gt;&lt;br /&gt;
&lt;b&gt;EDIT&lt;/b&gt;: This is &lt;a href=&quot;http://sshnet.codeplex.com/workitem/437&quot;&gt;the issue I logged and the developer&#39;s response&lt;/a&gt;. It seems that this behaviour is &quot;by design&quot;, which unfortunately means that there will not be a &#39;fix&#39;.&lt;br /&gt;
&lt;br /&gt;
The workaround would be to run all dependent commands separated by semicolons, although this is quite limiting in some situations.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4507460968350799439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/ssh-client-for-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4507460968350799439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4507460968350799439'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/ssh-client-for-net.html' title='SSH client for .NET'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-393802904696604523</id><published>2010-11-15T15:22:00.004+13:00</published><updated>2010-11-19T11:21:08.632+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Networking"/><title type='text'>Uploading a file using FTP and the WebClient</title><content type='html'>&lt;i&gt;&lt;b&gt;Note:&lt;/b&gt; more detailed documentation for the .NET 4.0 explains the reason for requiring the additional slash (/). See the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx&quot;&gt;remarks section for the FtpWebRequest class&lt;/a&gt;. If you are using .NET 4.0, this class is probably a better bet.&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
I ran into some trouble uploading a file using the System.Net.WebClient. Looking at examples in the web, it seemed quite straightforward, but I found that I needed to include an additional forward slash in order to get the transfer to work correctly.&lt;br /&gt;
&lt;br /&gt;
At first, I struggled to upload a file with this call to my WebClient instance:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;client.UploadFile(&quot;ftp://sssssss/folder/folder/folder/t.txt&quot;, @&quot;c:\temp\t.txt&quot;);
&lt;/pre&gt;&lt;br /&gt;
I was able to download a file in that location with Internet Explorer using the URI above, but not upload to it using the WebClient.&lt;br /&gt;
&lt;br /&gt;
This dump from Wireshark illustrates the problem (note line 14), which seems to be a bug in the WebClient to me:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain;&quot;&gt;220 sssssss FTP server (Version 1.1.214.4(PHNE_38458) Tue Jul 29 07:36:52 GMT 2008) ready.
USER uuuuuuu
331 Password required for uuuuuuu.
PASS ppppppp
230 User uuuuuuulogged in.
OPTS utf8 on
500 &#39;OPTS utf8 on&#39;: command not understood.
PWD
257 &quot;/home/fld/uuuuuuu&quot; is current directory.
TYPE I
200 Type set to I.
PASV
227 Entering Passive Mode (xx,xx,xx,xx,xx,xx)
STOR folder/folder/folder/t.txt
553 Could not determine cwdir: No such file or directory.
221 You could at least say goodbye.
&lt;/pre&gt;&lt;br /&gt;
Noticing that the STOR command was providing a relative path (not starting with /), I assume that the server was trying to save the file into the current folder i.e. /home/fld/uuuuuuu/folder/folder/folder/t.txt. To test this theory, I added a slash at the beginning ot the path:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;client.UploadFile(&quot;ftp://sssssss//folder/folder/folder/t.txt&quot;, @&quot;c:\temp\t.txt&quot;);
&lt;/pre&gt;&lt;br /&gt;
I am not sure if this is a valid URI, but it seems to work with the WebClient, although I am not sure why the RETR command (line 19) is executed as in the following Wireshark dump:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: plain&quot;&gt;220 sssssss FTP server (Version 1.1.214.4(PHNE_38458) Tue Jul 29 07:36:52 GMT 2008) ready.
USER uuuuuuu
331 Password required for uuuuuuu.
PASS ppppppp
230 User uuuuuuu logged in.
OPTS utf8 on
500 &#39;OPTS utf8 on&#39;: command not understood.
PWD
257 &quot;/home/fld/uuuuuuu&quot; is current directory.
TYPE I
200 Type set to I.
PASV
227 Entering Passive Mode (xx,xx,xx,xx,xx,xx)
STOR /folder/folder/folder/t.txt
150 Opening BINARY mode data connection for /folder/folder/folder/t.txt.
226 Transfer complete.
PASV
227 Entering Passive Mode (xx,xx,xx,xx,xx,xx)
RETR folder/folder/folder/t.txt
550 folder/folder/folder/t.txt: No such file or directory.
221 You could at least say goodbye.
&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
This is the final code that seems to work:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;        public static void SendFile(string sourcePath, string server, string userName, string password, string remoteFolder, string remoteFileName)
        {
            using (WebClient client = new WebClient())
            {
                string dest = string.Format(CultureInfo.InvariantCulture, &quot;ftp://{0}/{1}/{2}&quot;, server, remoteFolder, remoteFileName);
                client.Credentials = new NetworkCredential(userName, password);
                client.Proxy = null;
                client.UploadFile(dest, sourcePath);
            }
        }
&lt;/pre&gt;&lt;br /&gt;
And the corresponding integration test:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;        [TestMethod]
        public void ShouldSubmitFileToFtpServer()
        {
            Guid uniqueId = Guid.NewGuid();

            string tempFile = Path.Combine(Path.GetTempPath(), &quot;FtpTestFile.txt&quot;);
            File.WriteAllText(tempFile, &quot;Test file - safe to delete. &quot; + uniqueId.ToString());

            string server = &quot;sssssss&quot;;
            string userName = &quot;uuuuuuu&quot;;
            string password = &quot;ppppppp&quot;;
            string folder = &quot;/folder/folder/folder&quot;;
            string fileName = &quot;t.txt&quot;;
            Ftp.SendFile(tempFile, server, userName, password, folder, fileName);

            string tempFileDown = tempFile + &quot;.down&quot;;

            if(File.Exists(tempFileDown)) File.Delete(tempFileDown);

            using (WebClient client = new WebClient())
            {
                client.Credentials = new NetworkCredential(userName, password);
                string ftpLink = String.Format(CultureInfo.InvariantCulture, &quot;ftp://{0}/{1}/{2}&quot;, server, folder, fileName);
                client.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
                client.DownloadFile(ftpLink, tempFileDown);
            }

            string content = File.ReadAllText(tempFileDown);

            Assert.IsTrue(content.Contains(uniqueId.ToString()));
        }
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/393802904696604523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/uploading-file-using-ftp-and-webclient.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/393802904696604523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/393802904696604523'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/uploading-file-using-ftp-and-webclient.html' title='Uploading a file using FTP and the WebClient'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3808234739558766593</id><published>2010-11-11T15:38:00.003+13:00</published><updated>2013-04-26T10:24:27.424+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Example PowerShell header</title><content type='html'>This is a good template header that I use for new PowerShell scripts:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: ps;&quot;&gt;&amp;lt;#
.SYNOPSIS
    This is what the script does.
.NOTES
    Author: Me
.PARAMETER AParameter
    A parameter.
.PARAMETER ASwitch
    A switch.
#&amp;gt;

$ErrorActionPreference = &#39;Stop&#39;
Set-StrictMode -Version 3

param(
    [parameter(mandatory)][string]$AParameter, 
    [switch]$ASwitch)

$scriptFolder = (split-path -path $MyInvocation.MyCommand.Definition -Parent)&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3808234739558766593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/example-powershell-header.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3808234739558766593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3808234739558766593'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/example-powershell-header.html' title='Example PowerShell header'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8318304344195197755</id><published>2010-11-05T14:19:00.002+13:00</published><updated>2010-11-11T15:30:13.631+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Transforming an XML file with an XSLT in PowerShell</title><content type='html'>This code will transform an XML file with an XSLT file and save the resulting file to disk:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: ps;&quot;&gt;$xslt = new-object system.xml.xsl.xslcompiledtransform
$xslt.load(&#39;transform.xslt&#39;)
$xslt.Transform(&#39;input.xml&#39;, &#39;output.xml&#39;)
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8318304344195197755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/transforming-xml-file-with-xslt-in.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8318304344195197755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8318304344195197755'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/transforming-xml-file-with-xslt-in.html' title='Transforming an XML file with an XSLT in PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6379143222044807766</id><published>2010-11-03T08:47:00.002+13:00</published><updated>2011-07-16T12:48:11.740+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TFS"/><title type='text'>Complex work item queries in TFS</title><content type='html'>I recently wanted to create a work item query that showed all my work items that are either not closed or I had modified recently. This query provides a useful list of work items for associating with a check-in.&lt;br /&gt;
&lt;br /&gt;
I wanted the query to show:&lt;br /&gt;
&lt;code&gt;AssignedTo = @Me AND (State &lt;&gt; Closed OR (State = Closed AND ChangedDate &gt; @Today - 7))&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
To do this, I needed to use multiple levels of the &lt;i&gt;Group Clauses&lt;/i&gt; feature, which is available by selecting more than one clause and right clicking on one of the selected clauses.&lt;br /&gt;
&lt;br /&gt;
The result is below:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikuP_dCjwuZJ_lZ0ydN4wAzsyPByCD0nuPiy0KNcMflRwafSQlrWlxsV9ewl7vr72Vx87fZaMFmvhsXSuWgO7t_gICazZLBbGELmhJbAV3gnK-MrC-XpGgkdnMo-UwfLIXJph6TjBl4d8/s1600/Grouped+TFS+query.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img style=&quot;max-width:100%&quot; border=&quot;0&quot;  src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikuP_dCjwuZJ_lZ0ydN4wAzsyPByCD0nuPiy0KNcMflRwafSQlrWlxsV9ewl7vr72Vx87fZaMFmvhsXSuWgO7t_gICazZLBbGELmhJbAV3gnK-MrC-XpGgkdnMo-UwfLIXJph6TjBl4d8/s1600/Grouped+TFS+query.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6379143222044807766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/11/complex-work-item-queries-in-tfs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6379143222044807766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6379143222044807766'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/11/complex-work-item-queries-in-tfs.html' title='Complex work item queries in TFS'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikuP_dCjwuZJ_lZ0ydN4wAzsyPByCD0nuPiy0KNcMflRwafSQlrWlxsV9ewl7vr72Vx87fZaMFmvhsXSuWgO7t_gICazZLBbGELmhJbAV3gnK-MrC-XpGgkdnMo-UwfLIXJph6TjBl4d8/s72-c/Grouped+TFS+query.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1041122174249443770</id><published>2010-10-29T09:28:00.005+13:00</published><updated>2010-11-19T11:23:17.281+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><category scheme="http://www.blogger.com/atom/ns#" term="TFS"/><title type='text'>Executing a PowerShell script from TFS 2010 workflow</title><content type='html'>&lt;ol&gt;&lt;li&gt;Add an InvokeProcess activity to the workflow.&lt;/li&gt;
&lt;li&gt;Set the DisplayName property to something useful for logging and debugging.&lt;/li&gt;
&lt;li&gt;Set the FileName property to &quot;powershell.exe&quot;&lt;/li&gt;
&lt;li&gt;Set the Arguments like this: &lt;br /&gt;
&lt;pre class=&quot;brush: vb;&quot;&gt;&quot;-file &quot;&quot;&quot; + SourcesDirectory + &quot;\Scripts\SetAssemblyVersions.ps1&quot;&quot; &quot; + MajorVersionNumber.ToString() + &quot; &quot; + MinorVersionNumber.ToString() + &quot; &quot; + BuildDetail.SourceGetVersion.Substring(1) + &quot; &quot; + BuildDetail.BuildNumber.Substring(BuildDetail.BuildNumber.LastIndexOf(&quot;.&quot;) + 1)&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Give names to the standard output and error output streams.&lt;/li&gt;
&lt;li&gt;Add a WriteBuildMessage activity under the &lt;i&gt;Handle Standard Output&lt;/i&gt; field and set its Message property to the standard output stream defined above.&lt;/li&gt;
&lt;li&gt;Add a WriteBuildError activity under the &lt;i&gt;Handle Error Output&lt;/i&gt; field and set its Message property to the error output stream defined above.&lt;/li&gt;
&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1041122174249443770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/10/executing-powershell-script-from-tfs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1041122174249443770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1041122174249443770'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/10/executing-powershell-script-from-tfs.html' title='Executing a PowerShell script from TFS 2010 workflow'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6313226355300598060</id><published>2010-10-28T16:25:00.001+13:00</published><updated>2011-12-18T22:07:37.264+13:00</updated><title type='text'>Quotes I like</title><content type='html'>Give me six hours to chop down a tree and I will spend the first four sharpening the axe. &lt;br /&gt;
-- Abraham Lincoln&lt;br /&gt;
&lt;br /&gt;
If you always put limit on everything you do, physical or anything else, it will spread into your work and into your life. There are no limits. There are only plateaus, and you must not stay there, you must go beyond them.&lt;br /&gt;
-- Bruce Lee&lt;br /&gt;
&lt;br /&gt;
If I’d asked people what they wanted, they would have said a faster horse.&lt;br /&gt;
-- Henry Ford, car guy&lt;br /&gt;
&lt;br /&gt;
Yesterday I tried to cut my steak with a spoon and that goddam spoon sucked-ass. Why the hell would anybody ever use a spoon for anything?  They are completely useless!&lt;br /&gt;
-- &lt;a href=&quot;http://www.agilecoach.ca/2010/08/13/agile-software-development-sucks-ass/&quot;&gt;Jason&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I think that emphasizing heroics in any form usually does more harm than good.&lt;br /&gt;
-- &lt;a href=&quot;http://www.stevemcconnell.com/rdenum.htm&quot;&gt;Steve McConnell&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6313226355300598060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/10/quotes-i-like.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6313226355300598060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6313226355300598060'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/10/quotes-i-like.html' title='Quotes I like'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1068223957559257035</id><published>2010-10-28T10:19:00.005+13:00</published><updated>2010-11-19T11:26:54.463+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><category scheme="http://www.blogger.com/atom/ns#" term="FitNesse"/><title type='text'>Setting up FitNesse for .NET with SliM</title><content type='html'>Basic steps for setting up FitNesse for .NET with the wiki stored under source control. Review all code that you copy and paste from this page because it may need to be modified for your situation.&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Create a simple fixture:&lt;br /&gt;
&lt;pre class=&quot;brush: csharp;&quot;&gt;public class IsFitNesseCorrectlySetup
{
    public int Value { get; set; }

    public int GetValueDoubled()
    {
        return Value * 2;
    }
}
&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Download FitNesse and SliM, and save these into separate folders under your third party folder in source control (everything here is presumed to be under source control).&lt;/li&gt;
&lt;li&gt;Create this .cmd file for testers to use (presumes TFS; will need to be modified for other source control systems):&lt;br /&gt;
&lt;pre class=&quot;brush: plain&quot;&gt;@echo off
setlocal
&quot;%VS100COMNTOOLS%\..\IDE\TF.exe&quot; get &quot;%~dp0..&quot; -r
&quot;%VS100COMNTOOLS%\..\IDE\TF.exe&quot; checkout &quot;%~dp0FitNesseRoot&quot; -r
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe &quot;%~dp0..\Solution\Solution.sln&quot; /p:configuration=release
set FitNessePort=8084
start /min /d &quot;%~dp0..\ThirdParty\FitNesse&quot; java -jar fitnesse.jar -p %FitNessePort% -d &quot;%~dp0.&quot; -r FitNesseRoot
start http://localhost:%FitNessePort%/
endlocal&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Launch FitNesse and add the following to the root page (modifying paths to match your folder structure):&lt;br /&gt;
&lt;pre class=&quot;brush: plain&quot;&gt;!*****&gt; Configuration
!define TEST_SYSTEM {slim}
!path &lt;your DLL&gt;.dll
!define COMMAND_PATTERN {%m -r fitSharp.Slim.Service.Runner,..\..\ThirdParty\FitSharp\fitsharp.dll %p}
!define TEST_RUNNER {..\..\ThirdParty\FitSharp\Runner.exe}
*****!&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Add a &lt;i&gt;normal&lt;/i&gt; page (not a test page) called SetUp at the top level of your suite, and put the following in it to let FitNesse know which namespaces to find your fixtures in:&lt;br /&gt;
&lt;pre class=&quot;brush: plain&quot;&gt;!|import|
|Your Fixture DLL namespace|&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Create a test page with this test:&lt;br /&gt;
&lt;pre class=&quot;brush: plain&quot;&gt;!|Is FitNesse correctly set up|
|Value   |Get value doubled?  |
|2       |4                   |
|23      |46                  |
|100     |200                 |
|200     |399&lt;_&lt;401           |&lt;/pre&gt;
Run the test, which should pass.&lt;/li&gt;
&lt;/ol&gt;Note that these files in the FitNesse wiki should not be checked in to source control:
&lt;ul&gt;&lt;li&gt;*.zip&lt;/li&gt;
&lt;li&gt;ErrorLogs\**&lt;/li&gt;
&lt;li&gt;files\testResults\**&lt;/li&gt;
&lt;li&gt;RecentChanges\**&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1068223957559257035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/10/setting-up-fitnesse-for-net-with-slim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1068223957559257035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1068223957559257035'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/10/setting-up-fitnesse-for-net-with-slim.html' title='Setting up FitNesse for .NET with SliM'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-8065890259528165075</id><published>2010-10-19T10:33:00.000+13:00</published><updated>2010-11-19T11:23:17.281+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TFS"/><title type='text'>Invalid code coverage item error in MSTest</title><content type='html'>I ran into the following running unit tests after a build under TFS 2010:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Invalid code coverage item: The pdb file name must contain at least one character.&lt;/blockquote&gt;&lt;br /&gt;
I had modified the .testsettings file &lt;a href=&quot;/2010/07/relative-paths-in-testrunconfig-file.html&quot;&gt;to use relative paths instead of absolute paths&lt;/a&gt;, but the build was failing with the above error. &lt;br /&gt;
&lt;br /&gt;
The solution was to edit the .testsettings file to add a &lt;i&gt;pdbFile&lt;/i&gt; attribute:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&amp;lt;CodeCoverageItem binaryFile=&quot;..\Utilities\%outdir%\Utilities.dll&quot; pdbFile=&quot;..\Utilities\%outdir%\Utilities.pdb&quot; instrumentInPlace=&quot;true&quot; /&amp;gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/8065890259528165075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/10/invalid-code-coverage-item-error-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8065890259528165075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/8065890259528165075'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/10/invalid-code-coverage-item-error-in.html' title='Invalid code coverage item error in MSTest'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-2267741322212006467</id><published>2010-10-19T09:01:00.001+13:00</published><updated>2010-11-19T11:24:00.923+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Continuous Integration / Build"/><title type='text'>Continuous integration</title><content type='html'>This is what I like to run for continuous integration builds:&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Set version numbers in all assemblies.&lt;/li&gt;
&lt;li&gt;The release build.&lt;/li&gt;
&lt;li&gt;Code analysis (build breaker).&lt;/li&gt;
&lt;li&gt;Unit tests (build breaker).&lt;/li&gt;
&lt;li&gt;Integration tests (build stability).&lt;/li&gt;
&lt;li&gt;FitNesse tests (build stability).&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Outputs I like to collect are:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Build outputs, including PDBs, ideally in a symbol server.&lt;/li&gt;
&lt;li&gt;Code coverage percentage and details.&lt;/li&gt;
&lt;li&gt;Test results.&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/2267741322212006467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/10/continuous-integration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2267741322212006467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/2267741322212006467'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/10/continuous-integration.html' title='Continuous integration'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3961766517265055441</id><published>2010-10-13T09:05:00.016+13:00</published><updated>2013-02-21T13:05:54.799+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Static Code Analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Setting up code analysis in Visual Studio</title><content type='html'>&lt;h4&gt;Code Analysis Rule Files&lt;/h4&gt;Copy these files to an appropriate location in the source tree:&lt;br /&gt;
&lt;h5&gt;For test code:&lt;/h5&gt;&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&amp;lt;RuleSet Name=&quot;Test Code&quot; Description=&quot;Rules for unit and integration test assemblies.&quot; ToolsVersion=&quot;11.0&quot;&gt;
  &amp;lt;IncludeAll Action=&quot;Error&quot; /&gt;
  &amp;lt;Rules AnalyzerId=&quot;Microsoft.Analyzers.ManagedCodeAnalysis&quot; RuleNamespace=&quot;Microsoft.Rules.Managed&quot;&gt;
    &amp;lt;Rule Id=&quot;CA1004&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1014&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1020&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1024&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1026&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1031&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1062&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1300&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1303&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1502&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1506&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1702&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1707&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1709&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1822&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA2204&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA2210&quot; Action=&quot;None&quot; /&gt;
  &amp;lt;/Rules&gt;
&amp;lt;/RuleSet&gt;
&lt;/pre&gt;&lt;h5&gt;For production code:&lt;/h5&gt;&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&amp;lt;RuleSet Name=&quot;Production Code&quot; Description=&quot;Rules for production code.&quot; ToolsVersion=&quot;11.0&quot;&gt;
  &amp;lt;IncludeAll Action=&quot;Error&quot; /&gt;
  &amp;lt;Rules AnalyzerId=&quot;Microsoft.Analyzers.ManagedCodeAnalysis&quot; RuleNamespace=&quot;Microsoft.Rules.Managed&quot;&gt;
    &amp;lt;Rule Id=&quot;CA1004&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1020&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1024&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1026&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1303&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1502&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1506&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA1822&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA2204&quot; Action=&quot;None&quot; /&gt;
    &amp;lt;Rule Id=&quot;CA2210&quot; Action=&quot;None&quot; /&gt;
  &amp;lt;/Rules&gt;
&amp;lt;/RuleSet&gt;
&lt;/pre&gt;&lt;br /&gt;
&lt;h4&gt;Language&lt;/h4&gt;I am not aware of a GUI that allows setting the language for Visual Studio code analysis.&lt;br /&gt;
&lt;br /&gt;
To do this manually, add the following line to your &lt;i&gt;.csproj&lt;/i&gt; files under the main &amp;lt;PropertyGroup&amp;gt; tag:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;CodeAnalysisCulture&amp;gt;en-NZ&amp;lt;/CodeAnalysisCulture&amp;gt;&lt;/pre&gt;&lt;br /&gt;
This setting is obviously for New Zealand English. Consult &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/0h88fahh(VS.85).aspx&quot;&gt;this table for the appropriate locale ID&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Custom Dictionary&lt;/h4&gt;Set up a custom dictionary file called &lt;i&gt;CustomDictionary.xml&lt;/i&gt; and add a link to it in one of your projects. Set the build action (in the properties page) to &lt;i&gt;CodeAnalysisDictionary&lt;/i&gt;. To duplicate this into other projects in the same solution, just drag into each of those solutions. I use the following as a default:&lt;br /&gt;
&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;Dictionary&amp;gt;
  &amp;lt;Words&amp;gt;
    &amp;lt;Unrecognized&amp;gt;
      &amp;lt;Word&amp;gt;&amp;lt;/Word&amp;gt;
    &amp;lt;/Unrecognized&amp;gt;
    &amp;lt;Recognized&amp;gt;
      &amp;lt;Word&amp;gt;Mvc&amp;lt;/Word&amp;gt;
      &amp;lt;Word&amp;gt;Serialise&amp;lt;/Word&amp;gt;
      &amp;lt;Word&amp;gt;Serialisation&amp;lt;/Word&amp;gt;
      &amp;lt;Word&amp;gt;Serialiser&amp;lt;/Word&amp;gt;
      &amp;lt;Word&amp;gt;Deserialise&amp;lt;/Word&amp;gt;
      &amp;lt;Word&amp;gt;Deserialised&amp;lt;/Word&amp;gt;
      &amp;lt;Word&amp;gt;Deserialisation&amp;lt;/Word&amp;gt;
      &amp;lt;Word&amp;gt;Nesse&amp;lt;/Word&amp;gt;  &amp;lt;!--From FitNesse--&amp;gt;
    &amp;lt;/Recognized&amp;gt;
    &amp;lt;Deprecated&amp;gt;
      &amp;lt;Term PreferredAlternate=&quot;&quot;&amp;gt;&amp;lt;/Term&amp;gt;
    &amp;lt;/Deprecated&amp;gt;
    &amp;lt;Compound&amp;gt;
      &amp;lt;Term CompoundAlternate=&quot;&quot;&amp;gt;&amp;lt;/Term&amp;gt;
    &amp;lt;/Compound&amp;gt;
    &amp;lt;DiscreteExceptions&amp;gt;
      &amp;lt;Term&amp;gt;&amp;lt;/Term&amp;gt;
    &amp;lt;/DiscreteExceptions&amp;gt;
  &amp;lt;/Words&amp;gt;
  &amp;lt;Acronyms&amp;gt;
  &amp;lt;/Acronyms&amp;gt;
&amp;lt;/Dictionary&amp;gt;&lt;/pre&gt;&lt;br /&gt;
&lt;h4&gt;Project Configuration&lt;/h4&gt;In each project&#39;s property pages under the &lt;i&gt;Code Analysis&lt;/i&gt; tab, set the rule set to either the test or production set, and enable the code analysis for release builds only. Running code analysis slows down the build and may not be suitable for debug builds.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;TFS&lt;/h4&gt;In your continuous integration build definition, set code analysis to &lt;i&gt;Always&lt;/i&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3961766517265055441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/10/setting-language-used-for-visual-studio.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3961766517265055441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3961766517265055441'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/10/setting-language-used-for-visual-studio.html' title='Setting up code analysis in Visual Studio'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5303665813288702017</id><published>2010-09-10T11:52:00.002+12:00</published><updated>2011-02-09T11:36:03.128+13:00</updated><title type='text'>Flattening an AD group hierarchy</title><content type='html'>Sometimes it can be difficult to find all the members of an active directory group when there are multiple child or sub groups.&lt;br /&gt;
&lt;br /&gt;
To flatten the hierarchy, use this command:&lt;br /&gt;
&lt;pre&gt;dsquery group -limit 0 | select-string &lt;i&gt;group_to_find&lt;/i&gt; | dsget group -members -expand&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5303665813288702017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/09/flattening-ad-group-hierarchy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5303665813288702017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5303665813288702017'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/09/flattening-ad-group-hierarchy.html' title='Flattening an AD group hierarchy'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6784247580263051282</id><published>2010-08-06T10:50:00.000+12:00</published><updated>2010-08-06T10:50:54.955+12:00</updated><title type='text'>Calculating prices after GST changes</title><content type='html'>There has been some dodgy maths in the New Zealand media recently around how much things will cost after the GST increases in October. The rate will be increasing from 12.5% to 15%, so some media are simply adding 2.5% on top of the price. Unfortunately, the calculation is not that simple. First, you need to remove the current GST portion, and then calculate the new price with the new GST rate:&lt;br /&gt;
&lt;br /&gt;
&lt;img border=&quot;0&quot; bx=&quot;true&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitFWMAO6YRZcFlyABRKNGNdVV-P_-4eEx1Iu7aoUerqvj6ACWpRRonDJVM0acvkICD4-tDfu8JJ9UgzhvbZ7YTV3rXjDEyV_FImuqN9E9fLFJUbr3dJHTjGmnHWJW1C1oyN5QTZruHE74/s320/NewGstRate.png&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Unfortunately, the calculation is not easy to do in your head: 46 × &lt;em&gt;originalprice&lt;/em&gt; / 45. Another way of looking at it is to add 1/45 of the current price, or ~2.22%</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6784247580263051282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/08/calculating-prices-after-gst-changes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6784247580263051282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6784247580263051282'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/08/calculating-prices-after-gst-changes.html' title='Calculating prices after GST changes'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitFWMAO6YRZcFlyABRKNGNdVV-P_-4eEx1Iu7aoUerqvj6ACWpRRonDJVM0acvkICD4-tDfu8JJ9UgzhvbZ7YTV3rXjDEyV_FImuqN9E9fLFJUbr3dJHTjGmnHWJW1C1oyN5QTZruHE74/s72-c/NewGstRate.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1823545476421953401</id><published>2010-07-16T10:38:00.003+12:00</published><updated>2010-11-19T10:50:56.895+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="TDD"/><title type='text'>Overriding protected members using Moq and/or RhinoMocks</title><content type='html'>Sometimes I want to override a protected method on an internal class using a mocking framework and make verifications against calls to that method. This problem also occurs when trying to mock an internal interface in the assembly under test.&lt;br /&gt;
&lt;br /&gt;
When doing this with Moq or RhinoMocks (both of which use the same proxy generator), I got the following error:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&quot;Castle.DynamicProxy.Generators.GeneratorException: Type is not public, so a proxy cannot be generated.&quot;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
The solution is to publish the internals of the assembly under test to the appropriate assembly:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;[assembly: InternalsVisibleTo(&quot;DynamicProxyGenAssembly2,&quot; +
    &quot;PublicKey=00240000048000009400000006020000002400005&quot; +
    &quot;25341310004000001000100c547cac37abd99c8db225ef2f6c8&quot; +
    &quot;a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7&quot; +
    &quot;852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0&quot; +
    &quot;a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15&quot; +
    &quot;605093924cceaf74c4861eff62abf69b9291ed0a340e113be11&quot; +
    &quot;e6a7d3113e92484cf7045cc7&quot;)]&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1823545476421953401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/07/overriding-protected-members-using-moq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1823545476421953401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1823545476421953401'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/07/overriding-protected-members-using-moq.html' title='Overriding protected members using Moq and/or RhinoMocks'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-5558714125864459503</id><published>2010-07-13T16:12:00.004+12:00</published><updated>2010-11-19T11:25:39.203+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TFS"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio"/><title type='text'>Relative paths in .testsettings file</title><content type='html'>To configure relative code coverage paths in the .testsettings file, you will need to manually edit the xml file. First configure your coverage DLLs using the UI, then open the .testsettings file in a text editor, or in VS using the VS text editor.&lt;br /&gt;
&lt;br /&gt;
Edit the absolute paths to be relative to the location of your testsettings file, and use the %outdir% macro instead of bin\Debug:&lt;br /&gt;
&lt;em&gt;..\..\Utilities\%outdir%\Utilities.dll&lt;/em&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/5558714125864459503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/07/relative-paths-in-testrunconfig-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5558714125864459503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/5558714125864459503'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/07/relative-paths-in-testrunconfig-file.html' title='Relative paths in .testsettings file'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-972555093657294616</id><published>2010-06-20T14:41:00.003+12:00</published><updated>2010-11-19T10:50:31.506+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Extracting files in PowerShell without third party components</title><content type='html'>Sometimes it is not acceptable to install or use third party components such as 7-zip or the PowerShell Community Extensions onto machines (particularly because they are not digitally signed). This script will extract files using the shell API:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:ps&quot;&gt;param(
[parameter(mandatory=$true)][string]$SourceFile,
[parameter(mandatory=$true)][string]$DestinationFolder)

if(-not (test-path $DestinationFolder))
{
    md $DestinationFolder | Out-Null
}

$absoluteSource = resolve-path $SourceFile | select -ExpandProperty path
$absoluteDestination = resolve-path $DestinationFolder | select -ExpandProperty path

$app = new-object -ComObject Shell.Application
$archive = $app.Namespace($absoluteSource).Items()
$dest = $app.Namespace($absoluteDestination)
$dest.CopyHere($archive)&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/972555093657294616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/06/extracting-files-in-powershell-without.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/972555093657294616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/972555093657294616'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/06/extracting-files-in-powershell-without.html' title='Extracting files in PowerShell without third party components'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1158405549860442323</id><published>2010-05-20T15:35:00.001+12:00</published><updated>2010-11-19T10:52:02.998+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>PowerShell and slash-colon parameters</title><content type='html'>PowerShell plays around with the quotes in parameters when part of the parameter is quoted like this:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;/param:&quot;quoted path&quot;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This gets passed to the application as:&lt;br /&gt;
&lt;b&gt;&quot;/param:quoted path&quot;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The only workaround I have found works like this:&lt;br /&gt;
&lt;pre class=&quot;brush: ps&quot;&gt;$cmd = &quot;&amp; `&quot;application`&quot; /p:`&quot;path`&quot;; `$result = `$?&quot;
Invoke-expression $cmd
if(!$result)
{
    throw &quot;Application failed.&quot;
}
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1158405549860442323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/05/powershell-and-slash-colon-parameters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1158405549860442323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1158405549860442323'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/05/powershell-and-slash-colon-parameters.html' title='PowerShell and slash-colon parameters'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-1539622484702018974</id><published>2010-05-03T11:50:00.002+12:00</published><updated>2010-11-19T11:33:56.960+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MSTest"/><title type='text'>Running MSTest in Parallel</title><content type='html'>&lt;a href=&quot;http://blogs.msdn.com/vstsqualitytools/archive/2009/12/01/executing-unit-tests-in-parallel-on-a-multi-cpu-core-machine.aspx&quot;&gt;This blog&lt;/a&gt; describes how to execute tests in parallel in MSTest.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/1539622484702018974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/05/running-mstest-in-parallel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1539622484702018974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/1539622484702018974'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/05/running-mstest-in-parallel.html' title='Running MSTest in Parallel'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-4735565837081850258</id><published>2010-05-03T08:46:00.002+12:00</published><updated>2010-05-03T08:46:43.304+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Writing Debug (-Verbose) Output in PowerShell</title><content type='html'>To write output in PowerShell that is only displayed when the -Verbose switch is given, use the following attribute in your script:&lt;br /&gt;
[CmdletBinding]&lt;br /&gt;
&lt;br /&gt;
Then use write-verbose.&lt;br /&gt;
&lt;br /&gt;
This makes the function an &lt;a href=&quot;http://huddledmasses.org/a-guide-to-advanced-functions/&quot;&gt;Advanced Function&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/4735565837081850258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/05/writing-debug-verbose-output-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4735565837081850258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/4735565837081850258'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/05/writing-debug-verbose-output-in.html' title='Writing Debug (-Verbose) Output in PowerShell'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-221407518496792236</id><published>2010-05-02T14:20:00.006+12:00</published><updated>2010-12-28T14:31:22.780+13:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PowerShell"/><title type='text'>Highlight PowerShell in red when running as Administrator</title><content type='html'>If you have the &lt;a href=&quot;http://pscx.codeplex.com/&quot;&gt;PowerShell Community Extensions&lt;/a&gt; installed, you can load your profile for editing by running &lt;i&gt;notepad $profile&lt;/i&gt; or &lt;i&gt;ep&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Paste the code from &lt;a href=&quot;http://www.interact-sw.co.uk/iangblog/2007/02/09/pshdetectelevation&quot;&gt;this blog&lt;/a&gt; into your profile:&lt;br /&gt;
&lt;pre class=&quot;brush: ps&quot;&gt;&amp; {
    $wid=[System.Security.Principal.WindowsIdentity]::GetCurrent()
    $prp=new-object System.Security.Principal.WindowsPrincipal($wid)
    $adm=[System.Security.Principal.WindowsBuiltInRole]::Administrator
    $IsAdmin=$prp.IsInRole($adm)
    if ($IsAdmin)
    {
        (get-host).UI.RawUI.Backgroundcolor=&quot;DarkRed&quot;
        clear-host
    }
}
&lt;/pre&gt;&lt;br /&gt;
If you are running all users as standard users (which you should really be doing, &lt;a href=&quot;http://technet.microsoft.com/en-us/magazine/2009.07.uac.aspx#id0560040&quot;&gt;see why here&lt;/a&gt;), there is no need to use this script. Simply put the following code into the Administrator profile:&lt;br /&gt;
&lt;pre class=&quot;brush: ps&quot;&gt;(get-host).UI.RawUI.Backgroundcolor=&quot;DarkRed&quot;
clear-host
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/221407518496792236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/05/highlight-powershell-in-red-when.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/221407518496792236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/221407518496792236'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/05/highlight-powershell-in-red-when.html' title='Highlight PowerShell in red when running as Administrator'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3310557981137511903</id><published>2010-04-30T09:07:00.003+12:00</published><updated>2010-04-30T09:13:50.392+12:00</updated><title type='text'>Windows Event Log Message Text File</title><content type='html'>It took me a while to find the format of the message text file, &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/dd996906(VS.85).aspx&quot;&gt;but here it is&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Don&#39;t forget that you need a newline after the last full-stop in the file.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3310557981137511903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/04/windows-event-log-message-text-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3310557981137511903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3310557981137511903'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/04/windows-event-log-message-text-file.html' title='Windows Event Log Message Text File'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-3754893950764882648</id><published>2010-04-29T12:01:00.000+12:00</published><updated>2010-04-29T12:01:06.195+12:00</updated><title type='text'>ETW in .NET</title><content type='html'>After searching for a while, I found the classes for using Event Tracing for Windows in .NET. They are in the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.diagnostics.eventing.aspx&quot;&gt;System.Diagnostics.Eventing&lt;/a&gt; namespace.&lt;br /&gt;
&lt;br /&gt;
Note that these classes only work on Vista and Server 2008 (and newer).</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/3754893950764882648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/04/etw-in-net.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3754893950764882648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/3754893950764882648'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/04/etw-in-net.html' title='ETW in .NET'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-6286015413295632203</id><published>2010-04-28T16:01:00.002+12:00</published><updated>2010-04-28T16:01:49.214+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Programming"/><title type='text'>Differences between csc (devenv) and msbuild</title><content type='html'>The drive letter in the stack frame text is lower case when built using msbuild, and upper case when build in VS 2008.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/6286015413295632203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/04/differences-between-csc-devenv-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6286015413295632203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/6286015413295632203'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/04/differences-between-csc-devenv-and.html' title='Differences between csc (devenv) and msbuild'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1294685061820866959.post-7155769818743508721</id><published>2010-04-26T12:02:00.000+12:00</published><updated>2010-04-26T12:02:42.779+12:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="WCF"/><title type='text'>WCF Tools</title><content type='html'>WCF test client: &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb552364.aspx&quot;&gt;WcfTestClient.exe&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Trace viewer: &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms732023.aspx&quot;&gt;SvcTraceViewer.exe&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://nzbart.blogspot.com/feeds/7155769818743508721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nzbart.blogspot.com/2010/04/wcf-tools.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7155769818743508721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1294685061820866959/posts/default/7155769818743508721'/><link rel='alternate' type='text/html' href='http://nzbart.blogspot.com/2010/04/wcf-tools.html' title='WCF Tools'/><author><name>nzbart</name><uri>http://www.blogger.com/profile/08094173580905711110</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>