<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>Nivot Ink - BITS</title>
    <link>http://www.nivot.org/</link>
    <description>PowerShell, SharePoint, WCF, WWF, .NET, ASP.NET, Enterprise Computing and babble from Microsoft MVP Oisin Grehan.</description>
    <language>en-us</language>
    <copyright>Oisin Grehan</copyright>
    <lastBuildDate>Fri, 14 Aug 2009 02:06:02 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>oising@gmail.com</managingEditor>
    <webMaster>oising@gmail.com</webMaster>
    <item>
      <trackback:ping>http://www.nivot.org/Trackback.aspx?guid=6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd</trackback:ping>
      <pingback:server>http://www.nivot.org/pingback.aspx</pingback:server>
      <pingback:target>http://www.nivot.org/PermaLink,guid,6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd.aspx</pingback:target>
      <dc:creator>Oisin Grehan</dc:creator>
      <wfw:comment>http://www.nivot.org/CommentView,guid,6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd.aspx</wfw:comment>
      <wfw:commentRss>http://www.nivot.org/SyndicationService.asmx/GetEntryCommentsRss?guid=6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’ve been reliably informed (and double checked) and I’m happy to relay to you all
that <a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx">PowerShell</a> 2.0
is available as part of the Windows Management Framework RC. This includes the following
components:
</p>
        <ul>
          <li>
WinRM 2.0</li>
          <li>
Windows PowerShell 2.0</li>
          <li>
BITS 4.0</li>
        </ul>
        <p>
This is the culmination of nearly three years’ of work to bring Windows to the cutting
edge of automation technology. Grab it while it’s toasty from:
</p>
        <p>
          <a title="https://connect.microsoft.com/windowsmanagement/Downloads" href="https://connect.microsoft.com/windowsmanagement/Downloads">https://connect.microsoft.com/windowsmanagement/Downloads</a>
        </p>
        <p>
Spread the word!
</p>
        <img width="0" height="0" src="http://www.nivot.org/aggbug.ashx?id=6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd" />
      </body>
      <title>PowerShell 2.0 Now Available for Vista and Server 2008</title>
      <guid isPermaLink="false">http://www.nivot.org/PermaLink,guid,6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd.aspx</guid>
      <link>http://www.nivot.org/2009/08/14/PowerShell20NowAvailableForVistaAndServer2008.aspx</link>
      <pubDate>Fri, 14 Aug 2009 02:06:02 GMT</pubDate>
      <description>&lt;p&gt;
I’ve been reliably informed (and double checked) and I’m happy to relay to you all
that &lt;a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx"&gt;PowerShell&lt;/a&gt; 2.0
is available as part of the Windows Management Framework RC. This includes the following
components:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
WinRM 2.0&lt;/li&gt;
&lt;li&gt;
Windows PowerShell 2.0&lt;/li&gt;
&lt;li&gt;
BITS 4.0&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
This is the culmination of nearly three years’ of work to bring Windows to the cutting
edge of automation technology. Grab it while it’s toasty from:
&lt;/p&gt;
&lt;p&gt;
&lt;a title="https://connect.microsoft.com/windowsmanagement/Downloads" href="https://connect.microsoft.com/windowsmanagement/Downloads"&gt;https://connect.microsoft.com/windowsmanagement/Downloads&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Spread the word!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.nivot.org/aggbug.ashx?id=6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd" /&gt;</description>
      <comments>http://www.nivot.org/CommentView,guid,6b25a4df-3ffd-488b-bdae-4ff2ee8a29fd.aspx</comments>
      <category>.NET</category>
      <category>BITS</category>
      <category>PowerShell</category>
      <category>PowerShell 2.0</category>
      <category>Vista</category>
      <category>Windows 7</category>
      <category>Windows Server 2008</category>
      <category>WinRM</category>
    </item>
    <item>
      <trackback:ping>http://www.nivot.org/Trackback.aspx?guid=c5db121f-cd3d-4a29-9516-737d8094005e</trackback:ping>
      <pingback:server>http://www.nivot.org/pingback.aspx</pingback:server>
      <pingback:target>http://www.nivot.org/PermaLink,guid,c5db121f-cd3d-4a29-9516-737d8094005e.aspx</pingback:target>
      <dc:creator>Oisin Grehan</dc:creator>
      <wfw:comment>http://www.nivot.org/CommentView,guid,c5db121f-cd3d-4a29-9516-737d8094005e.aspx</wfw:comment>
      <wfw:commentRss>http://www.nivot.org/SyndicationService.asmx/GetEntryCommentsRss?guid=c5db121f-cd3d-4a29-9516-737d8094005e</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Some of you may have heard that CTP3 has support for transferring files from remote
servers using BITS (<a href="http://en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service" target="_blank">Background
Intelligent Transfer Service</a>) and quite possibly had a little dig around for it.
It’s not easy to find as using “get-help BITS” will not return any help unless you’ve
already loaded the module. Not a great win for discoverability, but hey, sometimes
you just have to read the manual, expletive deleted. So, lets have a quick look at
how this works. 
</p>
        <p>
          <a href="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_thumb.png" width="527" height="365" />
          </a>
        </p>
        <p>
So, ok, we can see we’ve got a module for <strong>FileTransfer</strong> (BITS), but
where did this come from? Take a peek into $pshome\Modules to find out. This is the
location for system-wide (global) modules. It rests under $PSHome, which is the home
for PowerShell, in $env:systemroot\windowspowershell\v1.0. 
</p>
        <p style="padding-bottom: 5px; background-color: lightgray; margin: 20px; padding-left: 5px; padding-right: 5px; padding-top: 5px">
Yes, even PowerShell v2 lives there. This is one of those unfortunate things whereby
the team decided early on that they would support side-by-side versions of PowerShell,
implying that v2 might not be backwards compatible with v1. This is reflected also
in the choice of file extension: ps1. The extension ps2 would have been used for v2.
This was probably a poor show of faith in their own abilities to design such a great
version one product, because as it turns out, v1.0 was such an excellent release that
they were able to build on it for v2 without compromising, or breaking backwards compatibility
(apart from a couple of minor edge cases, mainly bugfixes). So, the end result is
that future versions of PowerShell will inherit the $pshome, pay a little inheritance
tax and hopefully avoid foreclosure :).
</p>
        <p>
The files in the FileTransfer module directory are laid out as follows: 
</p>
        <p>
          <a href="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_thumb_1.png" width="621" height="248" />
          </a>
        </p>
        <p>
          <em>(Hey look! another built-in module – <strong>PSDiagnostics</strong> - I’ll leave
that one for you guys to explore).</em>
        </p>
        <p>
So, there are four files there. A ps1xml Format file, which tells PowerShell how to
textually render the .NET objects returned by the Cmdlets. A psd1 <a href="http://www.nivot.org/2008/12/30/PowerShellCTP3AndModuleManifests.aspx" target="_blank">Module
Manifest</a> file, which tells PowerShell what files comprise the Module and a binary
DLL which in this case does NOT contain the Cmdlets, but instead is what’s called
an “Interop Assembly.”  (sometimes known as Primary Interop Assemblies or PIAs,
read about them here: <a title="Primary Interop Assemblies" href="http://msdn.microsoft.com/en-us/library/aax7sdch.aspx">Primary
Interop Assemblies</a> – there are subtle differences between IAs and PIAs, but not
enough to warrant discussion here). Essentially this DLL lets .NET, and by extension,
PowerShell, talk to the native COM APIs that wrap the BITS services on XP,Vista,Win7,Win
2003 and Win 2008. Lets take a peek into the Module Manifest:
</p>
        <!-- Stylesheet link -->
        <link rel="stylesheet" type="text/css" href="http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css" />
        <!-- Code -->
        <div id="hlDiv" class="dp-highlighter">
          <div class="bar">
          </div>
          <ol class="dp-rb">
            <li class="alt">
              <span>
                <span>@{   </span>
              </span>
            </li>
            <li>
              <span>GUID=</span>
              <span class="string">"{8FA5064B-8479-4c5c-86EA-0D311FE48875}"</span>
              <span>  </span>
            </li>
            <li class="alt">
              <span>Author=</span>
              <span class="string">"Microsoft Corporation"</span>
              <span>  </span>
            </li>
            <li>
              <span>CompanyName=</span>
              <span class="string">"Microsoft Corporation"</span>
              <span>  </span>
            </li>
            <li class="alt">
              <span>Copyright=</span>
              <span class="string">"c Microsoft Corporation. All rights reserved."</span>
              <span>  </span>
            </li>
            <li>
              <span>ModuleVersion=</span>
              <span class="string">"1.0.0.0"</span>
              <span>  </span>
            </li>
            <li class="alt">
              <span>Description=</span>
              <span class="string">"Powershell File Transfer Module"</span>
              <span>  </span>
            </li>
            <li>
              <span>PowerShellVersion=</span>
              <span class="string">"2.0"</span>
              <span>  </span>
            </li>
            <li class="alt">
              <span>CLRVersion=</span>
              <span class="string">"2.0"</span>
              <span>  </span>
            </li>
            <li>
              <span>
                <strong>NestedModules</strong>=</span>
              <span class="string">"Microsoft.BackgroundIntelligentTransfer.Management"</span>
              <span>  </span>
            </li>
            <li class="alt">
              <span>FormatsToProcess=</span>
              <span class="string">"FileTransfer.Format.ps1xml"</span>
              <span>  </span>
            </li>
            <li>
              <span>
                <strong>RequiredAssemblies</strong>=</span>
              <span class="builtin">Join-Path</span>
              <span> </span>
              <span class="variable">$psScriptRoot</span>
              <span> </span>
              <span class="string">"Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll"</span>
              <span>  </span>
            </li>
            <li class="alt">
              <span>}  </span>
            </li>
          </ol>
        </div>
        <p>
If it looks like I just dumped a Hashtable out, you’re right. That’s all a manifest
is: a Hashtable. Of course, the key names are important and in this case, lets take
a look at two in particular, <strong>NestedModules</strong> and <strong>RequiredAssemblies</strong>.
</p>
        <p>
The RequiredAssemblies key is responsible for actively loading .NET assemblies containing
standard .NET types. It does not extract Providers and Cmdlets and add them to the
runspace; this is what the other key, NestedModules, does. Like I said already, this
DLL is the interop assembly. So where is the NestedModules loading that other module
from? I don’t see any other DLLs in the directory, and I <em>know</em> there are no
Cmdlets in that interop assembly. Lets take a peek at one of the Cmdlets itself and
find out:
</p>
        <p>
          <a href="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_thumb_3.png" width="575" height="526" />
          </a>
        </p>
        <p>
        </p>
        <p>
Aha, it’s reading it from the GAC. When PowerShell was installed, it must have installed
this DLL there. This is the DLL that contains our Cmdlets. I know this is true because
I used one of the Cmdlets to tell me where it lives. “GCM” is the alias for Get-Command
which will get us metadata about any given command in PowerShell (including functions
– new to v2).
</p>
        <p>
So, lets use a one-liner to get the names of all the Cmdlets in this module, and the
synopsis summary for the help:
</p>
        <div id="hlDiv" class="dp-highlighter">
          <div class="bar">
          </div>
          <ol class="dp-rb">
            <li class="alt">
              <span>
                <span>gcm -module filetransfer | % { </span>
                <span class="variable">$_</span>
                <span> |
select name, @{Name=</span>
                <span class="string">"Help"</span>
                <span>;Expression={&amp; </span>
                <span class="variable">$_</span>
                <span> -?
| select -expand synopsis }}} | convertto-html –fragment  </span>
              </span>
            </li>
          </ol>
        </div>
        <p>
This yields the following:
</p>
        <table>
          <colgroup>
            <col />
            <col />
          </colgroup>
          <tbody>
            <tr>
              <th>
Name</th>
              <th>
Help</th>
            </tr>
            <tr>
              <td>
Add-FileTransfer</td>
              <td>
Adds one or more files to an existing Background Intelligent Transfer Service (BITS)
t ransfer job.</td>
            </tr>
            <tr>
              <td>
Clear-FileTransfer</td>
              <td>
Cancels a Background Intelligent Transfer Service (BITS) transfer job.</td>
            </tr>
            <tr>
              <td>
Complete-FileTransfer</td>
              <td>
Completes a Background Intelligent Transfer Service (BITS) transfer job.</td>
            </tr>
            <tr>
              <td>
Get-FileTransfer</td>
              <td>
Retrieves the associated BitsJob object for an existing Background Intelligent Transfe
r Service (BITS) transfer job.</td>
            </tr>
            <tr>
              <td>
New-FileTransfer</td>
              <td>
Creates a new Background Intelligent Transfer Service (BITS) transfer job.</td>
            </tr>
            <tr>
              <td>
Resume-FileTransfer</td>
              <td>
Resumes a Background Intelligent Transfer Service (BITS) transfer job.</td>
            </tr>
            <tr>
              <td>
Set-FileTransfer</td>
              <td>
Modifies the properties of an existing Business Intelligent Transfer Service (BITS)
tr ansfer job.</td>
            </tr>
            <tr>
              <td>
Suspend-FileTransfer</td>
              <td>
Suspends a Background Intelligent Transfer Service (BITS) transfer job.</td>
            </tr>
          </tbody>
        </table>
        <p>
I guess this covers it for the moment. Going into a full discussion about how BITS
actually works is worth another post in itself. Suffice it to say, there are plenty
of examples in the help itself. Just run:
</p>
        <p>
          <strong>get-help add-filetransfer –example | more</strong>
        </p>
        <p>
To see an example on how to use the Cmdlet (or any of the others). The team have done
a good job here.
</p>
        <p>
Have fun!
</p>
        <img width="0" height="0" src="http://www.nivot.org/aggbug.ashx?id=c5db121f-cd3d-4a29-9516-737d8094005e" />
      </body>
      <title>Anatomy of a PowerShell Module: The FileTransfer (BITS) Module</title>
      <guid isPermaLink="false">http://www.nivot.org/PermaLink,guid,c5db121f-cd3d-4a29-9516-737d8094005e.aspx</guid>
      <link>http://www.nivot.org/2009/02/10/AnatomyOfAPowerShellModuleTheFileTransferBITSModule.aspx</link>
      <pubDate>Tue, 10 Feb 2009 18:38:27 GMT</pubDate>
      <description>&lt;p&gt;
Some of you may have heard that CTP3 has support for transferring files from remote
servers using BITS (&lt;a href="http://en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service" target="_blank"&gt;Background
Intelligent Transfer Service&lt;/a&gt;) and quite possibly had a little dig around for it.
It’s not easy to find as using “get-help BITS” will not return any help unless you’ve
already loaded the module. Not a great win for discoverability, but hey, sometimes
you just have to read the manual, expletive deleted. So, lets have a quick look at
how this works. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_thumb.png" width="527" height="365"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
So, ok, we can see we’ve got a module for &lt;strong&gt;FileTransfer&lt;/strong&gt; (BITS), but
where did this come from? Take a peek into $pshome\Modules to find out. This is the
location for system-wide (global) modules. It rests under $PSHome, which is the home
for PowerShell, in $env:systemroot\windowspowershell\v1.0. 
&lt;/p&gt;
&lt;p style="padding-bottom: 5px; background-color: lightgray; margin: 20px; padding-left: 5px; padding-right: 5px; padding-top: 5px"&gt;
Yes, even PowerShell v2 lives there. This is one of those unfortunate things whereby
the team decided early on that they would support side-by-side versions of PowerShell,
implying that v2 might not be backwards compatible with v1. This is reflected also
in the choice of file extension: ps1. The extension ps2 would have been used for v2.
This was probably a poor show of faith in their own abilities to design such a great
version one product, because as it turns out, v1.0 was such an excellent release that
they were able to build on it for v2 without compromising, or breaking backwards compatibility
(apart from a couple of minor edge cases, mainly bugfixes). So, the end result is
that future versions of PowerShell will inherit the $pshome, pay a little inheritance
tax and hopefully avoid foreclosure :).
&lt;/p&gt;
&lt;p&gt;
The files in the FileTransfer module directory are laid out as follows: 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_thumb_1.png" width="621" height="248"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;(Hey look! another built-in module – &lt;strong&gt;PSDiagnostics&lt;/strong&gt; - I’ll leave
that one for you guys to explore).&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
So, there are four files there. A ps1xml Format file, which tells PowerShell how to
textually render the .NET objects returned by the Cmdlets. A psd1 &lt;a href="http://www.nivot.org/2008/12/30/PowerShellCTP3AndModuleManifests.aspx" target="_blank"&gt;Module
Manifest&lt;/a&gt; file, which tells PowerShell what files comprise the Module and a binary
DLL which in this case does NOT contain the Cmdlets, but instead is what’s called
an “Interop Assembly.”&amp;nbsp; (sometimes known as Primary Interop Assemblies or PIAs,
read about them here: &lt;a title="Primary Interop Assemblies" href="http://msdn.microsoft.com/en-us/library/aax7sdch.aspx"&gt;Primary
Interop Assemblies&lt;/a&gt; – there are subtle differences between IAs and PIAs, but not
enough to warrant discussion here). Essentially this DLL lets .NET, and by extension,
PowerShell, talk to the native COM APIs that wrap the BITS services on XP,Vista,Win7,Win
2003 and Win 2008. Lets take a peek into the Module Manifest:
&lt;/p&gt;
&lt;!-- Stylesheet link --&gt;
&lt;link rel="stylesheet" type="text/css" href="http://www.thecomplex.plus.com/styles/SyntaxHighlighter.css"&gt;
&lt;!-- Code --&gt;
&lt;div id="hlDiv" class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;/div&gt;
&lt;ol class="dp-rb"&gt;
&lt;li class="alt"&gt;
&lt;span&gt;&lt;span&gt;@{&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt; 
&lt;li&gt;
&lt;span&gt;GUID=&lt;/span&gt;&lt;span class="string"&gt;"{8FA5064B-8479-4c5c-86EA-0D311FE48875}"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li class="alt"&gt;
&lt;span&gt;Author=&lt;/span&gt;&lt;span class="string"&gt;"Microsoft Corporation"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li&gt;
&lt;span&gt;CompanyName=&lt;/span&gt;&lt;span class="string"&gt;"Microsoft Corporation"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li class="alt"&gt;
&lt;span&gt;Copyright=&lt;/span&gt;&lt;span class="string"&gt;"c Microsoft Corporation. All rights reserved."&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li&gt;
&lt;span&gt;ModuleVersion=&lt;/span&gt;&lt;span class="string"&gt;"1.0.0.0"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li class="alt"&gt;
&lt;span&gt;Description=&lt;/span&gt;&lt;span class="string"&gt;"Powershell File Transfer Module"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li&gt;
&lt;span&gt;PowerShellVersion=&lt;/span&gt;&lt;span class="string"&gt;"2.0"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li class="alt"&gt;
&lt;span&gt;CLRVersion=&lt;/span&gt;&lt;span class="string"&gt;"2.0"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li&gt;
&lt;span&gt;&lt;strong&gt;NestedModules&lt;/strong&gt;=&lt;/span&gt;&lt;span class="string"&gt;"Microsoft.BackgroundIntelligentTransfer.Management"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li class="alt"&gt;
&lt;span&gt;FormatsToProcess=&lt;/span&gt;&lt;span class="string"&gt;"FileTransfer.Format.ps1xml"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li&gt;
&lt;span&gt;&lt;strong&gt;RequiredAssemblies&lt;/strong&gt;=&lt;/span&gt;&lt;span class="builtin"&gt;Join-Path&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="variable"&gt;$psScriptRoot&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="string"&gt;"Microsoft.BackgroundIntelligentTransfer.Management.Interop.dll"&lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&gt; 
&lt;li class="alt"&gt;
&lt;span&gt;}&amp;nbsp; &lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;
If it looks like I just dumped a Hashtable out, you’re right. That’s all a manifest
is: a Hashtable. Of course, the key names are important and in this case, lets take
a look at two in particular, &lt;strong&gt;NestedModules&lt;/strong&gt; and &lt;strong&gt;RequiredAssemblies&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
The RequiredAssemblies key is responsible for actively loading .NET assemblies containing
standard .NET types. It does not extract Providers and Cmdlets and add them to the
runspace; this is what the other key, NestedModules, does. Like I said already, this
DLL is the interop assembly. So where is the NestedModules loading that other module
from? I don’t see any other DLLs in the directory, and I &lt;em&gt;know&lt;/em&gt; there are no
Cmdlets in that interop assembly. Lets take a peek at one of the Cmdlets itself and
find out:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.nivot.org/content/binary/WindowsLiveWriter/Pow.0CTP3andthebuiltinFileTransferModule_ACD3/image_thumb_3.png" width="575" height="526"&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Aha, it’s reading it from the GAC. When PowerShell was installed, it must have installed
this DLL there. This is the DLL that contains our Cmdlets. I know this is true because
I used one of the Cmdlets to tell me where it lives. “GCM” is the alias for Get-Command
which will get us metadata about any given command in PowerShell (including functions
– new to v2).
&lt;/p&gt;
&lt;p&gt;
So, lets use a one-liner to get the names of all the Cmdlets in this module, and the
synopsis summary for the help:
&lt;/p&gt;
&lt;div id="hlDiv" class="dp-highlighter"&gt;
&lt;div class="bar"&gt;
&lt;/div&gt;
&lt;ol class="dp-rb"&gt;
&lt;li class="alt"&gt;
&lt;span&gt;&lt;span&gt;gcm -module filetransfer | % { &lt;/span&gt;&lt;span class="variable"&gt;$_&lt;/span&gt;&lt;span&gt; |
select name, @{Name=&lt;/span&gt;&lt;span class="string"&gt;"Help"&lt;/span&gt;&lt;span&gt;;Expression={&amp;amp; &lt;/span&gt;&lt;span class="variable"&gt;$_&lt;/span&gt;&lt;span&gt; -?
| select -expand synopsis }}} | convertto-html –fragment&amp;nbsp; &lt;/span&gt;&lt;/span&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;
This yields the following:
&lt;/p&gt;
&lt;table&gt;
&lt;colgroup&gt;
&lt;col&gt;
&lt;col&gt;
&lt;/colgroup&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt;
Name&lt;/th&gt;
&lt;th&gt;
Help&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Add-FileTransfer&lt;/td&gt;
&lt;td&gt;
Adds one or more files to an existing Background Intelligent Transfer Service (BITS)
t ransfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Clear-FileTransfer&lt;/td&gt;
&lt;td&gt;
Cancels a Background Intelligent Transfer Service (BITS) transfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Complete-FileTransfer&lt;/td&gt;
&lt;td&gt;
Completes a Background Intelligent Transfer Service (BITS) transfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Get-FileTransfer&lt;/td&gt;
&lt;td&gt;
Retrieves the associated BitsJob object for an existing Background Intelligent Transfe
r Service (BITS) transfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
New-FileTransfer&lt;/td&gt;
&lt;td&gt;
Creates a new Background Intelligent Transfer Service (BITS) transfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Resume-FileTransfer&lt;/td&gt;
&lt;td&gt;
Resumes a Background Intelligent Transfer Service (BITS) transfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Set-FileTransfer&lt;/td&gt;
&lt;td&gt;
Modifies the properties of an existing Business Intelligent Transfer Service (BITS)
tr ansfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
Suspend-FileTransfer&lt;/td&gt;
&lt;td&gt;
Suspends a Background Intelligent Transfer Service (BITS) transfer job.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;
I guess this covers it for the moment. Going into a full discussion about how BITS
actually works is worth another post in itself. Suffice it to say, there are plenty
of examples in the help itself. Just run:
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;get-help add-filetransfer –example | more&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
To see an example on how to use the Cmdlet (or any of the others). The team have done
a good job here.
&lt;/p&gt;
&lt;p&gt;
Have fun!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.nivot.org/aggbug.ashx?id=c5db121f-cd3d-4a29-9516-737d8094005e" /&gt;</description>
      <comments>http://www.nivot.org/CommentView,guid,c5db121f-cd3d-4a29-9516-737d8094005e.aspx</comments>
      <category>.NET</category>
      <category>BITS</category>
      <category>Cmdlets</category>
      <category>CTP3</category>
      <category>Modules</category>
      <category>Monad</category>
      <category>PowerShell</category>
      <category>PowerShell 2.0</category>
    </item>
  </channel>
</rss>