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

<channel>
	<title>Xen Bear &#187; xen</title>
	<atom:link href="http://www.xenbear.com/category/xen/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xenbear.com</link>
	<description></description>
	<lastBuildDate>Fri, 23 Jul 2010 19:14:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Download SDKs</title>
		<link>http://community.citrix.com/display/xs/Download+SDKs</link>
		<comments>http://community.citrix.com/display/xs/Download+SDKs#comments</comments>
		<pubDate>Fri, 23 Jul 2010 19:14:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/Download+SDKs</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~ewanm">Ewan Mellor</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <p><b>Overview</b></p>

<p>XenServer includes a XML-RPC based API, providing programmatic access to the extensive set of XenServer management features and tools. The XenServer API can be called from a remote system as well as local to the XenServer host.  Remote calls are generally made securely over HTTPS, using port 443.</p>

<p>There are five SDKs available, one for each of C, C#, Java, PowerShell, and Python.  These are provided under an open-source license (LGPL or GPL with the common linking exception).  This allows use (unmodified) in both closed-and open-source applications.</p>

<p>There are also several example code samples also provided for download. Some of the code samples demonstrate creating a VM, running VM power operations, and watching for events.</p>

<p>The XenServer 5.6 SDKs are suitable not just for 5.6, but for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers too, making it possible to address multiple XenServer versions with a single binary.  There are, of course, features missing on the older versions, and client programs are expected to check host.software_version["product_version"] to gracefully fall back when appropriate.</p>

<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="DownloadSDKs-XenServer5.6"></a>XenServer 5.6</h3></div>
<p><br /></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>XenServer.NET</b>: The XenServer SDK for C#.NET<br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServer.NET-5.6.0-1.zip?version=1">Download XenServer.NET binaries</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServer.NET-5.6.0-1-samples.zip?version=1">Download XenServer.NET samples</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServer.NET-5.6.0-1-src.zip?version=1">Download XenServer.NET source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>XenServerJava</b>: The XenServer SDK for Java<br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServerJava-5.6.0-1.zip?version=1">Download XenServerJava binaries</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServerJava-5.6.0-1-samples.zip?version=1">Download XenServerJava samples</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServerJava-5.6.0-1-src.zip?version=1">Download XenServerJava source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>libxenserver</b>: The XenServer SDK for C<br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/libxenserver-5.6.0-1.tar.bz2?version=1">Download libxenserver binaries</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/libxenserver-5.6.0-1-src.tar.bz2?version=1">Download libxenserver samples and source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>XenServerPSSnapIn</b>: The XenServer SDK for PowerShell<br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServerPSSnapIn-5.6.0-1.msi?version=1">Download XS-PS Windows installer</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServerPSSnapIn-5.6.0-1-src.zip?version=1">Download XS-PS source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>XenAPI.py</b>: The XenServer Python module<br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenAPI.py?version=1">Download XenAPI.py</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/display/xs/XenServer+Python+API+Samples" title="XenServer Python API Samples">Browse XenServer API examples using Python</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>API Reference</b><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/xenenterpriseapi.pdf?version=3">PDF</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/api/">HTML</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServerJavadoc-5.6.0.zip?version=1">Javadoc (zip)</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>XenServerConsole</b>: A Java client for XenServer consoles<br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="/download/attachments/38633496/XenServerConsole-src.zip?version=1">Download XenServerConsole source</a></p>

<p><br /></p>
<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="DownloadSDKs-XenServerSDKVM"></a>XenServer SDK VM</h3></div>
<p><br /></p>

<p>We also publish an appliance-style virtual machine, ready to be imported into a XenServer host.  This contains the SDKs above, plus a XenServer simulator, and a complete Linux-based development environment.</p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <a href="http://www.citrix.com/lang/English/lp/lp_1688621.asp"><b>Download SDK VM</b></a>: Version 5.6.0.  365 MB.<br />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; <b>XenServer SDK Guide</b><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="http://support.citrix.com/article/CTX124890">PDF</a><br />
&#160;&#160;&#160;&#160;&#160;&#160; <a href="http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/sdk.html">HTML</a></p>

<p><br /></p>
<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="DownloadSDKs-CitrixStorageLinkSDK"></a>Citrix StorageLink SDK</h3></div>
<p><br /></p>

<p>What is Citrix StorageLink?<br />
Citrix StorageLink lets users automate the configuration and provisioning of the virtual machine storage, taking advantage of advanced features of the attached storage array. StorageLink enables the user to create virtual machines from logical vendor-specific storage repositories that support advanced capabilities such as snapshots, cloning, thin provisioning, and data deduplication. StorageLink also uses advanced storage capabilities to rapidly create virtual machines, increase storage utilization, and provide improved business continuity while lowering total cost of ownership.</p>

<p>Citrix StorageLink seamlessly integrates with storage arrays using either the standards-based SMI-S interface or via a custom vendor-specific StorageLink Storage Adapter.</p>

<p><br />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.0.zip"><b>Citrix StorageLink Gateway SDK (v2.0)</b></a></p>
<ul>
	<li>Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</li>
</ul>


<p><br />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.0.zip"><b>Citrix StorageLink Storage Adapter SDK (v2.0)</b></a></p>
<ul>
	<li>Citrix StorageLink SDK for storage partners.</li>
</ul>


<p><br />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.1.zip"><b>Citrix StorageLink Gateway SDK (v2.1)</b></a></p>
<ul>
	<li>Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</li>
</ul>


<p><br />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.1.zip"><b>Citrix StorageLink Storage Adapter SDK (v2.1)</b></a></p>
<ul>
	<li>Citrix StorageLink SDK for storage partners.</li>
</ul>



<p><br /></p>
<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="DownloadSDKs-FurtherResources"></a>Further Resources</h3></div>
<p><br />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://docs.vmd.citrix.com/XenServer/5.6.0/"><b>XenServer Documentation Index</b></a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://forums.citrix.com/forum.jspa?forumID=175&#38;start=0"><b>XenServer SDK Forum</b></a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/cdn/script-exchange/"><b>Browse and Share Scripts and Samples on the CDN Script Exchange</b></a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="/display/xs/xvp" title="xvp"><b>xvp</b></a>: An open-source web interface for XenServer, developed at Durham University</p>

<p><br />
<br /></p>
<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="DownloadSDKs-OlderReleases"></a>Older Releases</h3></div>
<p><br /></p>

<p>Note that the XenServer 5.6 SDKs are also suitable for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers.  These older releases are here for historical purposes only.</p>

<p><a href="/display/xs/XenServer+SDK+Archive" title="XenServer SDK Archive">XenServer SDK Archive</a></p>

<p><br />
<br />
<br />
<br /></p>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/Download+SDKs">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/Download+SDKs?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/Download+SDKs?pageVersion=53">revision 53</a>
            and <a href="/display/xs/Download+SDKs">revision 54</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*Overview*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">XenServer includes a XML-RPC based API, providing programmatic access to the extensive set of XenServer management features and tools. The XenServer API can be called from a remote system as well as local to the XenServer host.  Remote calls are generally made securely over HTTPS, using port 443.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">There are five SDKs available, one for each of C, C#, Java, PowerShell, and Python.  These are provided under an open-source license (LGPL or GPL with the common linking exception).  This allows use (unmodified) in both closed-and open-source applications.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">There are also several example code samples also provided for download. Some of the code samples demonstrate creating a VM, running VM power operations, and watching for events.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The XenServer 5.6 SDKs are suitable not just for 5.6, but for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers too, making it possible to address multiple XenServer versions with a single binary.  There are, of course, features missing on the older versions, and client programs are expected to check host.software_version\[&#34;product_version&#34;\] to gracefully fall back when appropriate.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. XenServer 5.6</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *XenServer.NET*: The XenServer SDK for C#.NET</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XenServer.NET binaries&#124;^XenServer.NET-5.6.0-1.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XenServer.NET samples&#124;^XenServer.NET-5.6.0-1-samples.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XenServer.NET source&#124;^XenServer.NET-5.6.0-1-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *XenServerJava*: The XenServer SDK for Java</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XenServerJava binaries&#124;^XenServerJava-5.6.0-1.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XenServerJava samples&#124;^XenServerJava-5.6.0-1-samples.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XenServerJava source&#124;^XenServerJava-5.6.0-1-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *libxenserver*: The XenServer SDK for C</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download libxenserver binaries&#124;^libxenserver-5.6.0-1.tar.bz2]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download libxenserver samples and source&#124;^libxenserver-5.6.0-1-src.tar.bz2]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *XenServerPSSnapIn*: The XenServer SDK for PowerShell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XS-PS Windows installer&#124;^XenServerPSSnapIn-5.6.0-1.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XS-PS source&#124;^XenServerPSSnapIn-5.6.0-1-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *XenAPI.py*: The XenServer Python module</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffdeleted">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download <span class="diffremovedchars">XenAPI.py&#124;XenServer Python API Samples^XenAPI.py]</span> </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download <span class="diffaddedchars">XenAPI.py&#124;^XenAPI.py]</span> </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Browse XenServer API examples using Python&#124;XenServer Python API Samples]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *API Reference*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [PDF&#124;^xenenterpriseapi.pdf]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [HTML&#124;http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/api/]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Javadoc (zip)&#124;^XenServerJavadoc-5.6.0.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *XenServerConsole*: A Java client for XenServer consoles</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [Download XenServerConsole source&#124;^XenServerConsole-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. XenServer SDK VM</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">We also publish an appliance-style virtual machine, ready to be imported into a XenServer host.  This contains the SDKs above, plus a XenServer simulator, and a complete Linux-based development environment.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; [*Download SDK VM*&#124;http://www.citrix.com/lang/English/lp/lp_1688621.asp]: Version 5.6.0.  365 MB.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png!&#38;nbsp; *XenServer SDK Guide*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [PDF&#124;http://support.citrix.com/article/CTX124890]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp; [HTML&#124;http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/sdk.html]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. Citrix StorageLink SDK</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">What is Citrix StorageLink?</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Citrix StorageLink lets users automate the configuration and provisioning of the virtual machine storage, taking advantage of advanced features of the attached storage array. StorageLink enables the user to create virtual machines from logical vendor-specific storage repositories that support advanced capabilities such as snapshots, cloning, thin provisioning, and data deduplication. StorageLink also uses advanced storage capabilities to rapidly create virtual machines, increase storage utilization, and provide improved business continuity while lowering total cost of ownership.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Citrix StorageLink seamlessly integrates with storage arrays using either the standards-based SMI-S interface or via a custom vendor-specific StorageLink Storage Adapter.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Gateway SDK (v2.0)*&#124;http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.0.zip&#124;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Storage Adapter SDK (v2.0)*&#124;http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.0.zip&#124;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Citrix StorageLink SDK for storage partners.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Gateway SDK (v2.1)*&#124;http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.1.zip&#124;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Storage Adapter SDK (v2.1)*&#124;http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.1.zip&#124;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Citrix StorageLink SDK for storage partners.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. Further Resources</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*XenServer Documentation Index*&#124;http://docs.vmd.citrix.com/XenServer/5.6.0/]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*XenServer SDK Forum*&#124;http://forums.citrix.com/forum.jspa?forumID=175&#38;start=0]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*Browse and Share Scripts and Samples on the CDN Script Exchange*&#124;http://community.citrix.com/cdn/script-exchange/]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!btn_search.png! [*xvp*&#124;xvp]: An open-source web interface for XenServer, developed at Durham University</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. Older Releases</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Note that the XenServer 5.6 SDKs are also suitable for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers.  These older releases are here for historical purposes only.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[XenServer SDK Archive]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=38633496">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=38633496&#38;version=53">Revert To Version 53</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~ewanm">Ewan Mellor</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <p><b>Overview</b></p>

<p>XenServer includes a XML-RPC based API, providing programmatic access to the extensive set of XenServer management features and tools. The XenServer API can be called from a remote system as well as local to the XenServer host.  Remote calls are generally made securely over HTTPS, using port 443.</p>

<p>There are five SDKs available, one for each of C, C#, Java, PowerShell, and Python.  These are provided under an open-source license (LGPL or GPL with the common linking exception).  This allows use (unmodified) in both closed-and open-source applications.</p>

<p>There are also several example code samples also provided for download. Some of the code samples demonstrate creating a VM, running VM power operations, and watching for events.</p>

<p>The XenServer 5.6 SDKs are suitable not just for 5.6, but for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers too, making it possible to address multiple XenServer versions with a single binary.  There are, of course, features missing on the older versions, and client programs are expected to check host.software_version["product_version"] to gracefully fall back when appropriate.</p>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="DownloadSDKs-XenServer5.6"></a>XenServer 5.6</h3></div>
<p><br clear="all" /></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>XenServer.NET</b>: The XenServer SDK for C#.NET<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServer.NET-5.6.0-1.zip?version=1">Download XenServer.NET binaries</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServer.NET-5.6.0-1-samples.zip?version=1">Download XenServer.NET samples</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServer.NET-5.6.0-1-src.zip?version=1">Download XenServer.NET source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>XenServerJava</b>: The XenServer SDK for Java<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServerJava-5.6.0-1.zip?version=1">Download XenServerJava binaries</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServerJava-5.6.0-1-samples.zip?version=1">Download XenServerJava samples</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServerJava-5.6.0-1-src.zip?version=1">Download XenServerJava source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>libxenserver</b>: The XenServer SDK for C<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/libxenserver-5.6.0-1.tar.bz2?version=1">Download libxenserver binaries</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/libxenserver-5.6.0-1-src.tar.bz2?version=1">Download libxenserver samples and source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>XenServerPSSnapIn</b>: The XenServer SDK for PowerShell<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServerPSSnapIn-5.6.0-1.msi?version=1">Download XS-PS Windows installer</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServerPSSnapIn-5.6.0-1-src.zip?version=1">Download XS-PS source</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>XenAPI.py</b>: The XenServer Python module<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenAPI.py?version=1">Download XenAPI.py</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/display/xs/XenServer+Python+API+Samples" title="XenServer Python API Samples">Browse XenServer API examples using Python</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>API Reference</b><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/xenenterpriseapi.pdf?version=3">PDF</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/api/">HTML</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServerJavadoc-5.6.0.zip?version=1">Javadoc (zip)</a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>XenServerConsole</b>: A Java client for XenServer consoles<br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://community.citrix.com/download/attachments/38633496/XenServerConsole-src.zip?version=1">Download XenServerConsole source</a></p>

<p><br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="DownloadSDKs-XenServerSDKVM"></a>XenServer SDK VM</h3></div>
<p><br clear="all" /></p>

<p>We also publish an appliance-style virtual machine, ready to be imported into a XenServer host.  This contains the SDKs above, plus a XenServer simulator, and a complete Linux-based development environment.</p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <a href="http://www.citrix.com/lang/English/lp/lp_1688621.asp"><b>Download SDK VM</b></a>: Version 5.6.0.  365 MB.<br/>
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; <b>XenServer SDK Guide</b><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://support.citrix.com/article/CTX124890">PDF</a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/sdk.html">HTML</a></p>

<p><br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="DownloadSDKs-CitrixStorageLinkSDK"></a>Citrix StorageLink SDK</h3></div>
<p><br clear="all" /></p>

<p>What is Citrix StorageLink?<br/>
Citrix StorageLink lets users automate the configuration and provisioning of the virtual machine storage, taking advantage of advanced features of the attached storage array. StorageLink enables the user to create virtual machines from logical vendor-specific storage repositories that support advanced capabilities such as snapshots, cloning, thin provisioning, and data deduplication. StorageLink also uses advanced storage capabilities to rapidly create virtual machines, increase storage utilization, and provide improved business continuity while lowering total cost of ownership.</p>

<p>Citrix StorageLink seamlessly integrates with storage arrays using either the standards-based SMI-S interface or via a custom vendor-specific StorageLink Storage Adapter.</p>

<p><br clear="all" />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.0.zip"><b>Citrix StorageLink Gateway SDK (v2.0)</b></a></p>
<ul>
	<li>Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</li>
</ul>


<p><br clear="all" />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.0.zip"><b>Citrix StorageLink Storage Adapter SDK (v2.0)</b></a></p>
<ul>
	<li>Citrix StorageLink SDK for storage partners.</li>
</ul>


<p><br clear="all" />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.1.zip"><b>Citrix StorageLink Gateway SDK (v2.1)</b></a></p>
<ul>
	<li>Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</li>
</ul>


<p><br clear="all" />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.1.zip"><b>Citrix StorageLink Storage Adapter SDK (v2.1)</b></a></p>
<ul>
	<li>Citrix StorageLink SDK for storage partners.</li>
</ul>



<p><br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="DownloadSDKs-FurtherResources"></a>Further Resources</h3></div>
<p><br clear="all" />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://docs.vmd.citrix.com/XenServer/5.6.0/"><b>XenServer Documentation Index</b></a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://forums.citrix.com/forum.jspa?forumID=175&amp;start=0"><b>XenServer SDK Forum</b></a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/cdn/script-exchange/"><b>Browse and Share Scripts and Samples on the CDN Script Exchange</b></a></p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/display/xs/xvp" title="xvp"><b>xvp</b></a>: An open-source web interface for XenServer, developed at Durham University</p>

<p><br clear="all" />
<br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="DownloadSDKs-OlderReleases"></a>Older Releases</h3></div>
<p><br clear="all" /></p>

<p>Note that the XenServer 5.6 SDKs are also suitable for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers.  These older releases are here for historical purposes only.</p>

<p><a href="http://community.citrix.com/display/xs/XenServer+SDK+Archive" title="XenServer SDK Archive">XenServer SDK Archive</a></p>

<p><br clear="all" />
<br clear="all" />
<br clear="all" />
<br clear="all" /></p>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/Download+SDKs">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/Download+SDKs?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/Download+SDKs?pageVersion=53">revision 53</a>
            and <a href="http://community.citrix.com/display/xs/Download+SDKs">revision 54</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*Overview*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">XenServer includes a XML-RPC based API, providing programmatic access to the extensive set of XenServer management features and tools. The XenServer API can be called from a remote system as well as local to the XenServer host.  Remote calls are generally made securely over HTTPS, using port 443.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">There are five SDKs available, one for each of C, C#, Java, PowerShell, and Python.  These are provided under an open-source license (LGPL or GPL with the common linking exception).  This allows use (unmodified) in both closed-and open-source applications.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">There are also several example code samples also provided for download. Some of the code samples demonstrate creating a VM, running VM power operations, and watching for events.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The XenServer 5.6 SDKs are suitable not just for 5.6, but for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers too, making it possible to address multiple XenServer versions with a single binary.  There are, of course, features missing on the older versions, and client programs are expected to check host.software_version\[&quot;product_version&quot;\] to gracefully fall back when appropriate.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. XenServer 5.6</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *XenServer.NET*: The XenServer SDK for C#.NET</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XenServer.NET binaries|^XenServer.NET-5.6.0-1.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XenServer.NET samples|^XenServer.NET-5.6.0-1-samples.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XenServer.NET source|^XenServer.NET-5.6.0-1-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *XenServerJava*: The XenServer SDK for Java</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XenServerJava binaries|^XenServerJava-5.6.0-1.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XenServerJava samples|^XenServerJava-5.6.0-1-samples.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XenServerJava source|^XenServerJava-5.6.0-1-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *libxenserver*: The XenServer SDK for C</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download libxenserver binaries|^libxenserver-5.6.0-1.tar.bz2]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download libxenserver samples and source|^libxenserver-5.6.0-1-src.tar.bz2]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *XenServerPSSnapIn*: The XenServer SDK for PowerShell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XS-PS Windows installer|^XenServerPSSnapIn-5.6.0-1.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XS-PS source|^XenServerPSSnapIn-5.6.0-1-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *XenAPI.py*: The XenServer Python module</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffdeleted">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download <span class="diffremovedchars">XenAPI.py|XenServer Python API Samples^XenAPI.py]</span> </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download <span class="diffaddedchars">XenAPI.py|^XenAPI.py]</span> </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Browse XenServer API examples using Python|XenServer Python API Samples]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *API Reference*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [PDF|^xenenterpriseapi.pdf]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HTML|http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/api/]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Javadoc (zip)|^XenServerJavadoc-5.6.0.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *XenServerConsole*: A Java client for XenServer consoles</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Download XenServerConsole source|^XenServerConsole-src.zip]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. XenServer SDK VM</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">We also publish an appliance-style virtual machine, ready to be imported into a XenServer host.  This contains the SDKs above, plus a XenServer simulator, and a complete Linux-based development environment.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; [*Download SDK VM*|http://www.citrix.com/lang/English/lp/lp_1688621.asp]: Version 5.6.0.  365 MB.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png!&amp;nbsp; *XenServer SDK Guide*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [PDF|http://support.citrix.com/article/CTX124890]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HTML|http://docs.vmd.citrix.com/XenServer/5.6.0/1.0/en_gb/sdk.html]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. Citrix StorageLink SDK</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">What is Citrix StorageLink?</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Citrix StorageLink lets users automate the configuration and provisioning of the virtual machine storage, taking advantage of advanced features of the attached storage array. StorageLink enables the user to create virtual machines from logical vendor-specific storage repositories that support advanced capabilities such as snapshots, cloning, thin provisioning, and data deduplication. StorageLink also uses advanced storage capabilities to rapidly create virtual machines, increase storage utilization, and provide improved business continuity while lowering total cost of ownership.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Citrix StorageLink seamlessly integrates with storage arrays using either the standards-based SMI-S interface or via a custom vendor-specific StorageLink Storage Adapter.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Gateway SDK (v2.0)*|http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.0.zip|]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Storage Adapter SDK (v2.0)*|http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.0.zip|]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Citrix StorageLink SDK for storage partners.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Gateway SDK (v2.1)*|http://community.citrix.com/download/attachments/38633496/storagelink_gateway_sdk_v2.1.zip|]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Documentation for Web Services/SOAP interface for Citrix StorageLink Gateway.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*Citrix StorageLink Storage Adapter SDK (v2.1)*|http://community.citrix.com/download/attachments/38633496/storagelink_adapter_sdk_v2.1.zip|]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Citrix StorageLink SDK for storage partners.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. Further Resources</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*XenServer Documentation Index*|http://docs.vmd.citrix.com/XenServer/5.6.0/]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*XenServer SDK Forum*|http://forums.citrix.com/forum.jspa?forumID=175&amp;start=0]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*Browse and Share Scripts and Samples on the CDN Script Exchange*|http://community.citrix.com/cdn/script-exchange/]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!btn_search.png! [*xvp*|xvp]: An open-source web interface for XenServer, developed at Durham University</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. Older Releases</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Note that the XenServer 5.6 SDKs are also suitable for use with XenServer 4.0, 4.1, 5.0 and 5.5 servers.  These older releases are here for historical purposes only.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[XenServer SDK Archive]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=38633496">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=38633496&version=53">Revert To Version 53</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/Download+SDKs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XenCenter Plugins</title>
		<link>http://community.citrix.com/display/xs/XenCenter+Plugins</link>
		<comments>http://community.citrix.com/display/xs/XenCenter+Plugins#comments</comments>
		<pubDate>Thu, 22 Jul 2010 10:45:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/XenCenter+Plugins</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephenri">Stephen Rice</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <p><img src="http://community.citrix.com/download/attachments/79167505/MenuItemSmall.png" align="right" border="0" /></p>

<p>In XenCenter 5.6 it is now possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</p>

<p>A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</p>

<p>We welcome your feedback on this new feature, and would love to hear of any use cases that you have.  Please comment at the bottom of this page.</p>

<p><br />
<br /></p>

<h2><a name="XenCenterPlugins-Specification"></a>Specification</h2>

<p><img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <b><a href="/download/attachments/79167505/xc_plugins.pdf?version=2"><b>XenCenter Plugins Specification</b></a></b></p>

<h2><a name="XenCenterPlugins-TutorialsandExamples"></a>Tutorials and Examples</h2>

<p><img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">HelloWorld Example &#45; PowerShell</a><br />
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="/display/xs/HelloWorld+Example+-+C+Sharp" title="HelloWorld Example - C Sharp">HelloWorld Example &#45; C Sharp</a><br />
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="/display/xs/XenCenter+Plugins+-+WebUI+Tab+Example" title="XenCenter Plugins - WebUI Tab Example">XenCenter Plugins &#45; WebUI Tab Example</a><br />
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="/display/xs/Citrix+Console+Plugins" title="Citrix Console Plugins">Citrix Console Plugins for Access Gateway, Netscaler and Branch Repeater</a><br />
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="/display/xs/Parameters+Hints+and+Tips" title="Parameters Hints and Tips">Parameters Hints and Tips</a><br />
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="/display/xs/MessageBoard+Example+-+JavaScript" title="MessageBoard Example - JavaScript">MessageBoard Example &#45; JavaScript</a>
<br /></p>

<h2><a name="XenCenterPlugins-Knownissues"></a>Known issues</h2>

<p>PowerShell plugins can sometimes fail to run properly. The symptom is that the plugin appears to run for ever without doing anything.</p>

<p>The underlying cause is that a required folder is never created: the workaround is to create the folder yourself. The folder is XenServerPSSnapIn within the Citrix application data directory. For example, it can normally be found at</p>

<p>C:\Documents and Settings\&#60;user&#62;\Application Data\Citrix\XenServerPSSnapIn</p>

<p>on Windows XP, or</p>

<p>C:\Users\&#60;user&#62;\AppData\Roaming\Citrix\XenServerPSSnapIn</p>

<p>on Windows Vista.</p>


<p><br />
<br />
<br />
<br /></p>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/XenCenter+Plugins">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/XenCenter+Plugins?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/XenCenter+Plugins?pageVersion=20">revision 20</a>
            and <a href="/display/xs/XenCenter+Plugins">revision 21</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!MenuItemSmall.png&#124;align=right!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">In XenCenter 5.6 it is now possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">We welcome your feedback on this new feature, and would love to hear of any use cases that you have.  Please comment at the bottom of this page.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Specification</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!arrow.png! *[*XenCenter Plugins Specification*&#124;^xc_plugins.pdf]*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Tutorials and Examples</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!arrow.png! [HelloWorld Example - PowerShell]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!arrow.png! [HelloWorld Example - C Sharp]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!arrow.png! [XenCenter Plugins - WebUI Tab Example]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!arrow.png! [Citrix Console Plugins for Access Gateway, Netscaler and Branch Repeater&#124;Citrix Console Plugins]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!arrow.png! [Parameters Hints and Tips]</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">!arrow.png! [MessageBoard Example - JavaScript]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Known issues</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">PowerShell plugins can sometimes fail to run properly. The symptom is that the plugin appears to run for ever without doing anything.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The underlying cause is that a required folder is never created: the workaround is to create the folder yourself. The folder is XenServerPSSnapIn within the Citrix application data directory. For example, it can normally be found at</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">C:\Documents and Settings\&#60;user&#62;\Application Data\Citrix\XenServerPSSnapIn</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">on Windows XP, or</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">C:\Users\&#60;user&#62;\AppData\Roaming\Citrix\XenServerPSSnapIn</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">on Windows Vista.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=79167505">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=79167505&#38;version=20">Revert To Version 20</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephenri">Stephen Rice</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <p><img src="http://community.citrix.com/download/attachments/79167505/MenuItemSmall.png" align="right" border="0" /></p>

<p>In XenCenter 5.6 it is now possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</p>

<p>A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</p>

<p>We welcome your feedback on this new feature, and would love to hear of any use cases that you have.  Please comment at the bottom of this page.</p>

<p><br clear="all" />
<br clear="all" /></p>

<h2><a name="XenCenterPlugins-Specification"></a>Specification</h2>

<p><img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <b><a href="http://community.citrix.com/download/attachments/79167505/xc_plugins.pdf?version=2"><b>XenCenter Plugins Specification</b></a></b></p>

<h2><a name="XenCenterPlugins-TutorialsandExamples"></a>Tutorials and Examples</h2>

<p><img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">HelloWorld Example &#45; PowerShell</a><br/>
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp" title="HelloWorld Example - C Sharp">HelloWorld Example &#45; C Sharp</a><br/>
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/display/xs/XenCenter+Plugins+-+WebUI+Tab+Example" title="XenCenter Plugins - WebUI Tab Example">XenCenter Plugins &#45; WebUI Tab Example</a><br/>
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/display/xs/Citrix+Console+Plugins" title="Citrix Console Plugins">Citrix Console Plugins for Access Gateway, Netscaler and Branch Repeater</a><br/>
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/display/xs/Parameters+Hints+and+Tips" title="Parameters Hints and Tips">Parameters Hints and Tips</a><br/>
<img src="http://community.citrix.com/download/attachments/79167505/arrow.png" align="absmiddle" border="0" /> <a href="http://community.citrix.com/display/xs/MessageBoard+Example+-+JavaScript" title="MessageBoard Example - JavaScript">MessageBoard Example &#45; JavaScript</a>
<br clear="all" /></p>

<h2><a name="XenCenterPlugins-Knownissues"></a>Known issues</h2>

<p>PowerShell plugins can sometimes fail to run properly. The symptom is that the plugin appears to run for ever without doing anything.</p>

<p>The underlying cause is that a required folder is never created: the workaround is to create the folder yourself. The folder is XenServerPSSnapIn within the Citrix application data directory. For example, it can normally be found at</p>

<p>C:\Documents and Settings\&lt;user&gt;\Application Data\Citrix\XenServerPSSnapIn</p>

<p>on Windows XP, or</p>

<p>C:\Users\&lt;user&gt;\AppData\Roaming\Citrix\XenServerPSSnapIn</p>

<p>on Windows Vista.</p>


<p><br clear="all" />
<br clear="all" />
<br clear="all" />
<br clear="all" /></p>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/XenCenter+Plugins">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/XenCenter+Plugins?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/XenCenter+Plugins?pageVersion=20">revision 20</a>
            and <a href="http://community.citrix.com/display/xs/XenCenter+Plugins">revision 21</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!MenuItemSmall.png|align=right!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">In XenCenter 5.6 it is now possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">We welcome your feedback on this new feature, and would love to hear of any use cases that you have.  Please comment at the bottom of this page.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Specification</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!arrow.png! *[*XenCenter Plugins Specification*|^xc_plugins.pdf]*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Tutorials and Examples</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!arrow.png! [HelloWorld Example - PowerShell]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!arrow.png! [HelloWorld Example - C Sharp]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!arrow.png! [XenCenter Plugins - WebUI Tab Example]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!arrow.png! [Citrix Console Plugins for Access Gateway, Netscaler and Branch Repeater|Citrix Console Plugins]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!arrow.png! [Parameters Hints and Tips]</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">!arrow.png! [MessageBoard Example - JavaScript]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Known issues</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">PowerShell plugins can sometimes fail to run properly. The symptom is that the plugin appears to run for ever without doing anything.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The underlying cause is that a required folder is never created: the workaround is to create the folder yourself. The folder is XenServerPSSnapIn within the Citrix application data directory. For example, it can normally be found at</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">C:\Documents and Settings\&lt;user&gt;\Application Data\Citrix\XenServerPSSnapIn</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">on Windows XP, or</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">C:\Users\&lt;user&gt;\AppData\Roaming\Citrix\XenServerPSSnapIn</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">on Windows Vista.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=79167505">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=79167505&version=20">Revert To Version 20</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/XenCenter+Plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Citrix Console Plugins</title>
		<link>http://community.citrix.com/display/xs/Citrix+Console+Plugins</link>
		<comments>http://community.citrix.com/display/xs/Citrix+Console+Plugins#comments</comments>
		<pubDate>Fri, 09 Jul 2010 08:43:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/Citrix+Console+Plugins</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <p>The following plugins have been written using the XenCenter Plugin specification to add a new tab inside XenCenter to access the console of Access Gateway, Net Scaler and Branch Repeater VMs:</p>
<ul>
	<li><a href="/download/attachments/141099270/AccessGatewayVPX.msi?version=1">AccessGatewayVPX.msi</a></li>
	<li><a href="/download/attachments/141099270/NetScalerVPX.msi?version=1">NetScalerVPX.msi</a></li>
	<li><a href="/download/attachments/141099270/BranchRepeaterVPX.msi?version=1">BranchRepeaterVPX.msi</a></li>
</ul>


<p>Each of the plugins works in a similar way. A XenSearch in the plugin configuration xml toggles enablement of the plugin based on whether the correct tag is present on a selected running VM.</p>

<p>As an example, here is the Access Gateway configuration xml:</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&#62;
  &#60;XenCenterPlugin xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span> version=<span class="code-quote">"2"</span> plugin_version=<span class="code-quote">"1.0.0.0"</span>&#62;
</span>    &#60;TabPage name=<span class="code-quote">"webui-tab"</span> url=<span class="code-quote">"https:<span class="code-comment">//{$ip_address}:9001"</span> search=<span class="code-quote">"967e62a3-45a0-4cc9-b7a7-de941ae754b1"</span> /&#62;
</span>    &#60;MenuItem name=<span class="code-quote">"ui-menu-item"</span> menu=<span class="code-quote">"vm"</span> serialized=<span class="code-quote">"none"</span> search=<span class="code-quote">"967e62a3-45a0-4cc9-b7a7-de941ae754b1"</span>&#62;
      &#60;Shell filename=<span class="code-quote">"https:<span class="code-comment">//{$ip_address}:9001"</span> /&#62;
</span>    &#60;/MenuItem&#62;
    &#60;MenuItem name=<span class="code-quote">"web-menu-item"</span> menu=<span class="code-quote">"help"</span> serialized=<span class="code-quote">"none"</span>&#62;
      &#60;Shell filename=<span class="code-quote">"http:<span class="code-comment">//citrix.com/accessgateway"</span> /&#62;
</span>    &#60;/MenuItem&#62;
    &#60;Search uuid=<span class="code-quote">"967e62a3-45a0-4cc9-b7a7-de941ae754b1"</span> name=<span class="code-quote">"Access Gateway VPX"</span> major_version=<span class="code-quote">"2"</span> minor_version=<span class="code-quote">"0"</span> show_expanded=<span class="code-quote">"yes"</span>&#62;
    &#60;Query&#62;
      &#60;QueryScope&#62;
        &#60;VM /&#62;
      &#60;/QueryScope&#62;
      &#60;GroupQuery type=<span class="code-quote">"And"</span>&#62;
        &#60;EnumPropertyQuery property=<span class="code-quote">"power_state"</span> equals=<span class="code-quote">"yes"</span> query=<span class="code-quote">"Running"</span> /&#62;
        &#60;StringListContainsQuery property=<span class="code-quote">"tags"</span> query=<span class="code-quote">"Access Gateway VPX"</span> contains=<span class="code-quote">"yes"</span> /&#62;
      &#60;/GroupQuery&#62;
    &#60;/Query&#62;
  &#60;/Search&#62;
&#60;/XenCenterPlugin&#62;</pre>
</div></div>
<p>Here are the resources and configuration files for each of the plugins:<br />
<a href="/download/attachments/141099270/NetScalerVPX.xcplugin.xml?version=1">NetScalerVPX.xcplugin.xml</a><br />
<a href="/download/attachments/141099270/NetScalerVPX.resx?version=1">NetScalerVPX.resx</a><br />
<a href="/download/attachments/141099270/BranchRepeaterVPX.xcplugin.xml?version=1">BranchRepeaterVPX.xcplugin.xml</a><br />
<a href="/download/attachments/141099270/BranchRepeaterVPX.resx?version=1">BranchRepeaterVPX.resx</a><br />
<a href="/download/attachments/141099270/AccessGatewayVPX.xcplugin.xml?version=1">AccessGatewayVPX.xcplugin.xml</a><br />
<a href="/download/attachments/141099270/AccessGatewayVPX.resx?version=1">AccessGatewayVPX.resx</a></p>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/Citrix+Console+Plugins">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/Citrix+Console+Plugins?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/Citrix+Console+Plugins?pageVersion=2">revision 2</a>
            and <a href="/display/xs/Citrix+Console+Plugins">revision 3</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The following plugins have been written using the XenCenter Plugin specification to add a new tab inside XenCenter to access the console of Access Gateway, Net Scaler and Branch Repeater VMs:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* [^AccessGatewayVPX.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* [^NetScalerVPX.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* [^BranchRepeaterVPX.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Each of the plugins works in a similar way. A XenSearch in the plugin configuration xml toggles enablement of the plugin based on whether the correct tag is present on a selected running VM.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">As an example, here is the Access Gateway configuration xml:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">  &#60;XenCenterPlugin xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34; version=&#34;2&#34; plugin_version=&#34;1.0.0.0&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;TabPage name=&#34;webui-tab&#34; url=&#34;https://{$ip_address}:9001&#34; search=&#34;967e62a3-45a0-4cc9-b7a7-de941ae754b1&#34; /&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;MenuItem name=&#34;ui-menu-item&#34; menu=&#34;vm&#34; serialized=&#34;none&#34; search=&#34;967e62a3-45a0-4cc9-b7a7-de941ae754b1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      &#60;Shell filename=&#34;https://{$ip_address}:9001&#34; /&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;MenuItem name=&#34;web-menu-item&#34; menu=&#34;help&#34; serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      &#60;Shell filename=&#34;http://citrix.com/accessgateway&#34; /&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;Search uuid=&#34;967e62a3-45a0-4cc9-b7a7-de941ae754b1&#34; name=&#34;Access Gateway VPX&#34; major_version=&#34;2&#34; minor_version=&#34;0&#34; show_expanded=&#34;yes&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;Query&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      &#60;QueryScope&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">        &#60;VM /&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      &#60;/QueryScope&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      &#60;GroupQuery type=&#34;And&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">        &#60;EnumPropertyQuery property=&#34;power_state&#34; equals=&#34;yes&#34; query=&#34;Running&#34; /&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">        &#60;StringListContainsQuery property=&#34;tags&#34; query=&#34;Access Gateway VPX&#34; contains=&#34;yes&#34; /&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      &#60;/GroupQuery&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">    &#60;/Query&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">  &#60;/Search&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;/XenCenterPlugin&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Here are the resources and configuration files for each of the plugins:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[^NetScalerVPX.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[^NetScalerVPX.resx]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[^BranchRepeaterVPX.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[^BranchRepeaterVPX.resx]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[^AccessGatewayVPX.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[^AccessGatewayVPX.resx]</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=141099270">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=141099270&#38;version=2">Revert To Version 2</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <p>The following plugins have been written using the XenCenter Plugin specification to add a new tab inside XenCenter to access the console of Access Gateway, Net Scaler and Branch Repeater VMs:</p>
<ul>
	<li><a href="http://community.citrix.com/download/attachments/141099270/AccessGatewayVPX.msi?version=1">AccessGatewayVPX.msi</a></li>
	<li><a href="http://community.citrix.com/download/attachments/141099270/NetScalerVPX.msi?version=1">NetScalerVPX.msi</a></li>
	<li><a href="http://community.citrix.com/download/attachments/141099270/BranchRepeaterVPX.msi?version=1">BranchRepeaterVPX.msi</a></li>
</ul>


<p>Each of the plugins works in a similar way. A XenSearch in the plugin configuration xml toggles enablement of the plugin based on whether the correct tag is present on a selected running VM.</p>

<p>As an example, here is the Access Gateway configuration xml:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
  &lt;XenCenterPlugin xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span> version=<span class="code-quote">"2"</span> plugin_version=<span class="code-quote">"1.0.0.0"</span>&gt;
</span>    &lt;TabPage name=<span class="code-quote">"webui-tab"</span> url=<span class="code-quote">"https:<span class="code-comment">//{$ip_address}:9001"</span> search=<span class="code-quote">"967e62a3-45a0-4cc9-b7a7-de941ae754b1"</span> /&gt;
</span>    &lt;MenuItem name=<span class="code-quote">"ui-menu-item"</span> menu=<span class="code-quote">"vm"</span> serialized=<span class="code-quote">"none"</span> search=<span class="code-quote">"967e62a3-45a0-4cc9-b7a7-de941ae754b1"</span>&gt;
      &lt;Shell filename=<span class="code-quote">"https:<span class="code-comment">//{$ip_address}:9001"</span> /&gt;
</span>    &lt;/MenuItem&gt;
    &lt;MenuItem name=<span class="code-quote">"web-menu-item"</span> menu=<span class="code-quote">"help"</span> serialized=<span class="code-quote">"none"</span>&gt;
      &lt;Shell filename=<span class="code-quote">"http:<span class="code-comment">//citrix.com/accessgateway"</span> /&gt;
</span>    &lt;/MenuItem&gt;
    &lt;Search uuid=<span class="code-quote">"967e62a3-45a0-4cc9-b7a7-de941ae754b1"</span> name=<span class="code-quote">"Access Gateway VPX"</span> major_version=<span class="code-quote">"2"</span> minor_version=<span class="code-quote">"0"</span> show_expanded=<span class="code-quote">"yes"</span>&gt;
    &lt;Query&gt;
      &lt;QueryScope&gt;
        &lt;VM /&gt;
      &lt;/QueryScope&gt;
      &lt;GroupQuery type=<span class="code-quote">"And"</span>&gt;
        &lt;EnumPropertyQuery property=<span class="code-quote">"power_state"</span> equals=<span class="code-quote">"yes"</span> query=<span class="code-quote">"Running"</span> /&gt;
        &lt;StringListContainsQuery property=<span class="code-quote">"tags"</span> query=<span class="code-quote">"Access Gateway VPX"</span> contains=<span class="code-quote">"yes"</span> /&gt;
      &lt;/GroupQuery&gt;
    &lt;/Query&gt;
  &lt;/Search&gt;
&lt;/XenCenterPlugin&gt;</pre>
</div></div>
<p>Here are the resources and configuration files for each of the plugins:<br/>
<a href="http://community.citrix.com/download/attachments/141099270/NetScalerVPX.xcplugin.xml?version=1">NetScalerVPX.xcplugin.xml</a><br/>
<a href="http://community.citrix.com/download/attachments/141099270/NetScalerVPX.resx?version=1">NetScalerVPX.resx</a><br/>
<a href="http://community.citrix.com/download/attachments/141099270/BranchRepeaterVPX.xcplugin.xml?version=1">BranchRepeaterVPX.xcplugin.xml</a><br/>
<a href="http://community.citrix.com/download/attachments/141099270/BranchRepeaterVPX.resx?version=1">BranchRepeaterVPX.resx</a><br/>
<a href="http://community.citrix.com/download/attachments/141099270/AccessGatewayVPX.xcplugin.xml?version=1">AccessGatewayVPX.xcplugin.xml</a><br/>
<a href="http://community.citrix.com/download/attachments/141099270/AccessGatewayVPX.resx?version=1">AccessGatewayVPX.resx</a></p>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/Citrix+Console+Plugins">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/Citrix+Console+Plugins?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/Citrix+Console+Plugins?pageVersion=2">revision 2</a>
            and <a href="http://community.citrix.com/display/xs/Citrix+Console+Plugins">revision 3</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The following plugins have been written using the XenCenter Plugin specification to add a new tab inside XenCenter to access the console of Access Gateway, Net Scaler and Branch Repeater VMs:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* [^AccessGatewayVPX.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* [^NetScalerVPX.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* [^BranchRepeaterVPX.msi]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Each of the plugins works in a similar way. A XenSearch in the plugin configuration xml toggles enablement of the plugin based on whether the correct tag is present on a selected running VM.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">As an example, here is the Access Gateway configuration xml:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">  &lt;XenCenterPlugin xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot; version=&quot;2&quot; plugin_version=&quot;1.0.0.0&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;TabPage name=&quot;webui-tab&quot; url=&quot;https://{$ip_address}:9001&quot; search=&quot;967e62a3-45a0-4cc9-b7a7-de941ae754b1&quot; /&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;MenuItem name=&quot;ui-menu-item&quot; menu=&quot;vm&quot; serialized=&quot;none&quot; search=&quot;967e62a3-45a0-4cc9-b7a7-de941ae754b1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      &lt;Shell filename=&quot;https://{$ip_address}:9001&quot; /&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;MenuItem name=&quot;web-menu-item&quot; menu=&quot;help&quot; serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      &lt;Shell filename=&quot;http://citrix.com/accessgateway&quot; /&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;Search uuid=&quot;967e62a3-45a0-4cc9-b7a7-de941ae754b1&quot; name=&quot;Access Gateway VPX&quot; major_version=&quot;2&quot; minor_version=&quot;0&quot; show_expanded=&quot;yes&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;Query&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      &lt;QueryScope&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">        &lt;VM /&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      &lt;/QueryScope&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      &lt;GroupQuery type=&quot;And&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">        &lt;EnumPropertyQuery property=&quot;power_state&quot; equals=&quot;yes&quot; query=&quot;Running&quot; /&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">        &lt;StringListContainsQuery property=&quot;tags&quot; query=&quot;Access Gateway VPX&quot; contains=&quot;yes&quot; /&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      &lt;/GroupQuery&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">    &lt;/Query&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">  &lt;/Search&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;/XenCenterPlugin&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Here are the resources and configuration files for each of the plugins:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[^NetScalerVPX.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[^NetScalerVPX.resx]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[^BranchRepeaterVPX.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[^BranchRepeaterVPX.resx]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[^AccessGatewayVPX.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[^AccessGatewayVPX.resx]</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=141099270">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=141099270&version=2">Revert To Version 2</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/Citrix+Console+Plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parameters Hints and Tips</title>
		<link>http://community.citrix.com/display/xs/Parameters+Hints+and+Tips</link>
		<comments>http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#comments</comments>
		<pubDate>Thu, 08 Jul 2010 12:52:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/Parameters+Hints+and+Tips</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <p>XenCenter provides parameter sets to your plugin to describe the current selection in the XenCenter resource list. See the <a href="/display/xs/XenCenter+Plugins" title="XenCenter Plugins">plugin specification</a> for the full details of the data in a parameter set.</p>

<p>This page details how to deal with this information using a Shell command, which requires some thought as there are no handy global variables separating everything out as is the case with the PowerShell commands.</p>

<h2><a name="ParametersHintsandTips-Shellcommandsandparameters"></a>Shell commands and parameters</h2>

<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&#62;
&#60;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&#62;
</span>&#60;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&#62;
	&#60;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"1, goodbye"</span>
		/&#62;
	&#60;/MenuItem&#62;
&#60;/XenCenterPlugin&#62;</pre>
</div></div>
<p>When using a Shell command, your parameters are passed directly as arguments to the plugin executable. In addition to the parameter sets, you will also receive any parameters you define in the <em>param</em> attribute on your XML. Outlined here are several approaches you might take to parse these arguaments, with examples in C#.</p>

<h4><a name="ParametersHintsandTips-Option1Noextraparams"></a>Option 1 - No extra params</h4>

<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&#62;
&#60;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&#62;
</span>&#60;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&#62;
	&#60;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
		/&#62;
	&#60;/MenuItem&#62;
&#60;/XenCenterPlugin&#62;</pre>
</div></div>
<p>This is the simple option. We know that parameter sets come in groups of four arguments so if none of the menu item commands which call that executable define anything in the <em>param</em> attribute we can just read them off in groups.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets)
{
     ParamSets = <span class="code-keyword">new</span> List&#60;ParameterSet&#62;();
     <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &#60; args.Length; i += 4)
     {
           ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
     }
}</pre>
</div></div>

<h4><a name="ParametersHintsandTips-Option2Fixednumberofextraparameters"></a>Option 2 - Fixed number of extra parameters</h4>

<p>If you want to use extra parameters in your plugin commands, one option is to define a fixed number of extra parameters that each command must pass.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&#62;
&#60;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&#62;
</span>&#60;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&#62;
	&#60;MenuItem
		name=<span class="code-quote">"goodbye-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"goodbye"</span>
		/&#62;
	&#60;/MenuItem&#62;
	&#60;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"hello"</span>
		/&#62;
	&#60;/MenuItem&#62;
	&#60;MenuItem
		name=<span class="code-quote">"quiet-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"BLANK_PARAM"</span>
		/&#62;
	&#60;/MenuItem&#62;
&#60;/XenCenterPlugin&#62;</pre>
</div></div>
<p>In this example you can see each command passes exactly one extra parameter, so we can read that off before moving onto the parameter sets. Commands that don't want to use all the parameters you are expecting can use a dummy keyword to keep the number of parameters consistent.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-object">int</span> numberOfExtraParams = 1;
<span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets, out List&#60;string&#62; ExtraParams)
        {
            ExtraParams = <span class="code-keyword">new</span> List&#60;string&#62;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &#60; numberOfExtraParams; i++)
            {
                ExtraParams.Add(args[i]);
            }
            ParamSets = <span class="code-keyword">new</span> List&#60;ParameterSet&#62;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = numberOfExtraParams; i &#60; args.Length; i += 4)
            {
                ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
            }
        }</pre>
</div></div>

<h4><a name="ParametersHintsandTips-Option3Variablenumberofextraparameters"></a>Option 3 - Variable number of extra parameters</h4>

<p>Here we are going to use some sort of indicator to help us know how many extra parameters there are going to be before the parameter sets start in our list of arguments. There are several ways to do this, but here we are going to use the first extra parameter as an indicator for how many further extra parameters we should expect.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&#62;
&#60;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&#62;
</span>&#60;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&#62;
	&#60;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"1, goodbye"</span>
		/&#62;
	&#60;/MenuItem&#62;
	&#60;MenuItem
		name=<span class="code-quote">"busy-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"2, hello, goodbye"</span>
		/&#62;
	&#60;/MenuItem&#62;
&#60;/XenCenterPlugin&#62;</pre>
</div></div>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets, out List&#60;string&#62; ExtraParams)
        {
            <span class="code-object">int</span> numberOfExtraParams = 0;
            numberOfExtraParams = <span class="code-object">int</span>.Parse(args[0]);
            ExtraParams = <span class="code-keyword">new</span> List&#60;string&#62;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &#60; numberOfExtraParams; i++)
            {
                ExtraParams.Add(args[i + 1]);
            }
            ParamSets = <span class="code-keyword">new</span> List&#60;ParameterSet&#62;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = numberOfExtraParams + 1; i &#60; args.Length; i += 4)
            {
                ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
            }
        }</pre>
</div></div>
<p>This is a good technique as it only requires one extra parameter to encode the information and allows flexibility. Another alternative would be to have a marker which signifies that the extra parameters have finished:</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&#62;
&#60;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&#62;
</span>&#60;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&#62;
	&#60;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"goodbye, END_EXTRA_PARAMS"</span>
		/&#62;
	&#60;/MenuItem&#62;
	&#60;MenuItem
		name=<span class="code-quote">"busy-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"hello, goodbye, END_EXTRA_PARAMS"</span>
		/&#62;
	&#60;/MenuItem&#62;
&#60;/XenCenterPlugin&#62;</pre>
</div></div>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/Parameters+Hints+and+Tips">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/Parameters+Hints+and+Tips?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/Parameters+Hints+and+Tips?pageVersion=3">revision 3</a>
            and <a href="/display/xs/Parameters+Hints+and+Tips">revision 4</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'><a href='#change1' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">XenCenter provides parameter sets to your plugin to describe the current selection in the XenCenter resource list. See the <span class="diffremovedchars">plugin specification</span> for the full details of the data in a parameter set. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">XenCenter provides parameter sets to your plugin to describe the current selection in the XenCenter resource list. See the <span class="diffaddedchars">[plugin specification&#124;XenCenter Plugins]</span> for the full details of the data in a parameter set. </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">This page details how to deal with this information using a Shell command, which requires some thought as there are no handy global variables separating everything out as is the case with the PowerShell commands.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Shell commands and parameters</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;!DOCTYPE XenCenterPlugin PUBLIC &#34;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&#34; &#34;xencenter-1.dtd&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	version=&#34;1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;hello-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;1, goodbye&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;/XenCenterPlugin&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a><a href='#change0' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'><a href='#change2' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">When using a Shell command, your parameters are passed directly as arguments to the plugin executable. In addition to the parameter sets, you will also <span class="diffremovedchars">recieve</span> any parameters you define in the _param_ attribute on your XML. Outlined here are several approaches you might take to parse these arguaments, with examples in C#. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">When using a Shell command, your parameters are passed directly as arguments to the plugin executable. In addition to the parameter sets, you will also <span class="diffaddedchars">receive</span> any parameters you define in the _param_ attribute on your XML. Outlined here are several approaches you might take to parse these arguaments, with examples in C#. </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. Option 1 - No extra params</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;!DOCTYPE XenCenterPlugin PUBLIC &#34;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&#34; &#34;xencenter-1.dtd&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	version=&#34;1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;hello-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;/XenCenterPlugin&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change2'></a><a href='#change1' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'><a href='#change3' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">This is the simple option. We know that parameter sets come in groups of four <span class="diffremovedchars">arguaments</span> so if none of the menu item commands which call that executable define anything in the _param_ attribute we can just read them off in groups. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change2'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">This is the simple option. We know that parameter sets come in groups of four <span class="diffaddedchars">arguments</span> so if none of the menu item commands which call that executable define anything in the _param_ attribute we can just read them off in groups. </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">     ParamSets = new List&#60;ParameterSet&#62;();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">     for (int i = 0; i &#60; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">     {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">           ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">     }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. Option 2 - Fixed number of extra parameters</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">If you want to use extra parameters in your plugin commands, one option is to define a fixed number of extra parameters that each command must pass.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;!DOCTYPE XenCenterPlugin PUBLIC &#34;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&#34; &#34;xencenter-1.dtd&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	version=&#34;1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;goodbye-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;goodbye&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;hello-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;hello&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;quiet-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;BLANK_PARAM&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;/XenCenterPlugin&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">In this example you can see each command passes exactly one extra parameter, so we can read that off before moving onto the parameter sets. Commands that don't want to use all the parameters you are expecting can use a dummy keyword to keep the number of parameters consistent.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">private static int numberOfExtraParams = 1;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets, out List&#60;string&#62; ExtraParams)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">        {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            ExtraParams = new List&#60;string&#62;();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            for (int i = 0; i &#60; numberOfExtraParams; i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">                ExtraParams.Add(args[i]);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            ParamSets = new List&#60;ParameterSet&#62;();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            for (int i = numberOfExtraParams; i &#60; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">                ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">        }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. Option 3 - Variable number of extra parameters</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change3'></a><a href='#change2' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'><a href='#change4' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">Here we are going to use some sort of indicator to help us know how many extra parameters there are going to be before the parameter sets start in our list of <span class="diffremovedchars">arguaments.</span> There are several ways to do this, here we are going to use the first extra parameter as an indicator for how many further extra parameters we should expect. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change3'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">Here we are going to use some sort of indicator to help us know how many extra parameters there are going to be before the parameter sets start in our list of <span class="diffaddedchars">arguments.</span> There are several ways to do this, <span class="diffaddedchars">but</span> here we are going to use the first extra parameter as an indicator for how many further extra parameters we should expect. </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;!DOCTYPE XenCenterPlugin PUBLIC &#34;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&#34; &#34;xencenter-1.dtd&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	version=&#34;1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;hello-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;1, goodbye&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;busy-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;2, hello, goodbye&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;/XenCenterPlugin&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets, out List&#60;string&#62; ExtraParams)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">        {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            int numberOfExtraParams = 0;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            numberOfExtraParams = int.Parse(args[0]);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            ExtraParams = new List&#60;string&#62;();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            for (int i = 0; i &#60; numberOfExtraParams; i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">                ExtraParams.Add(args[i + 1]);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            ParamSets = new List&#60;ParameterSet&#62;();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            for (int i = numberOfExtraParams + 1; i &#60; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">                ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">        }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change4'></a><a href='#change3' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffdeleted">This is a good technique as it only requires <span class="diffremovedchars">1</span> extra parameter to encode the information and allows flexibility. Another alternative would be to have a marker which signifies that the extra parameters have finished: </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change4'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">This is a good technique as it only requires <span class="diffaddedchars">one</span> extra parameter to encode the information and allows flexibility. Another alternative would be to have a marker which signifies that the extra parameters have finished: </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;!DOCTYPE XenCenterPlugin PUBLIC &#34;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&#34; &#34;xencenter-1.dtd&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	version=&#34;1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;hello-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;goodbye, END_EXTRA_PARAMS&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;busy-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			param=&#34;hello, goodbye, END_EXTRA_PARAMS&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;/XenCenterPlugin&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=139560619">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=139560619&#38;version=3">Revert To Version 3</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <p>XenCenter provides parameter sets to your plugin to describe the current selection in the XenCenter resource list. See the <a href="http://community.citrix.com/display/xs/XenCenter+Plugins" title="XenCenter Plugins">plugin specification</a> for the full details of the data in a parameter set.</p>

<p>This page details how to deal with this information using a Shell command, which requires some thought as there are no handy global variables separating everything out as is the case with the PowerShell commands.</p>

<h2><a name="ParametersHintsandTips-Shellcommandsandparameters"></a>Shell commands and parameters</h2>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&gt;
</span>&lt;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&gt;
	&lt;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"1, goodbye"</span>
		/&gt;
	&lt;/MenuItem&gt;
&lt;/XenCenterPlugin&gt;</pre>
</div></div>
<p>When using a Shell command, your parameters are passed directly as arguments to the plugin executable. In addition to the parameter sets, you will also receive any parameters you define in the <em>param</em> attribute on your XML. Outlined here are several approaches you might take to parse these arguaments, with examples in C#.</p>

<h4><a name="ParametersHintsandTips-Option1Noextraparams"></a>Option 1 - No extra params</h4>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&gt;
</span>&lt;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&gt;
	&lt;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
		/&gt;
	&lt;/MenuItem&gt;
&lt;/XenCenterPlugin&gt;</pre>
</div></div>
<p>This is the simple option. We know that parameter sets come in groups of four arguments so if none of the menu item commands which call that executable define anything in the <em>param</em> attribute we can just read them off in groups.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets)
{
     ParamSets = <span class="code-keyword">new</span> List&lt;ParameterSet&gt;();
     <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; args.Length; i += 4)
     {
           ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
     }
}</pre>
</div></div>

<h4><a name="ParametersHintsandTips-Option2Fixednumberofextraparameters"></a>Option 2 - Fixed number of extra parameters</h4>

<p>If you want to use extra parameters in your plugin commands, one option is to define a fixed number of extra parameters that each command must pass.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&gt;
</span>&lt;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&gt;
	&lt;MenuItem
		name=<span class="code-quote">"goodbye-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"goodbye"</span>
		/&gt;
	&lt;/MenuItem&gt;
	&lt;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"hello"</span>
		/&gt;
	&lt;/MenuItem&gt;
	&lt;MenuItem
		name=<span class="code-quote">"quiet-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"BLANK_PARAM"</span>
		/&gt;
	&lt;/MenuItem&gt;
&lt;/XenCenterPlugin&gt;</pre>
</div></div>
<p>In this example you can see each command passes exactly one extra parameter, so we can read that off before moving onto the parameter sets. Commands that don't want to use all the parameters you are expecting can use a dummy keyword to keep the number of parameters consistent.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-keyword">private</span> <span class="code-keyword">static</span> <span class="code-object">int</span> numberOfExtraParams = 1;
<span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets, out List&lt;string&gt; ExtraParams)
        {
            ExtraParams = <span class="code-keyword">new</span> List&lt;string&gt;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; numberOfExtraParams; i++)
            {
                ExtraParams.Add(args[i]);
            }
            ParamSets = <span class="code-keyword">new</span> List&lt;ParameterSet&gt;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = numberOfExtraParams; i &lt; args.Length; i += 4)
            {
                ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
            }
        }</pre>
</div></div>

<h4><a name="ParametersHintsandTips-Option3Variablenumberofextraparameters"></a>Option 3 - Variable number of extra parameters</h4>

<p>Here we are going to use some sort of indicator to help us know how many extra parameters there are going to be before the parameter sets start in our list of arguments. There are several ways to do this, but here we are going to use the first extra parameter as an indicator for how many further extra parameters we should expect.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&gt;
</span>&lt;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&gt;
	&lt;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"1, goodbye"</span>
		/&gt;
	&lt;/MenuItem&gt;
	&lt;MenuItem
		name=<span class="code-quote">"busy-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"2, hello, goodbye"</span>
		/&gt;
	&lt;/MenuItem&gt;
&lt;/XenCenterPlugin&gt;</pre>
</div></div>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets, out List&lt;string&gt; ExtraParams)
        {
            <span class="code-object">int</span> numberOfExtraParams = 0;
            numberOfExtraParams = <span class="code-object">int</span>.Parse(args[0]);
            ExtraParams = <span class="code-keyword">new</span> List&lt;string&gt;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; numberOfExtraParams; i++)
            {
                ExtraParams.Add(args[i + 1]);
            }
            ParamSets = <span class="code-keyword">new</span> List&lt;ParameterSet&gt;();
            <span class="code-keyword">for</span> (<span class="code-object">int</span> i = numberOfExtraParams + 1; i &lt; args.Length; i += 4)
            {
                ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
            }
        }</pre>
</div></div>
<p>This is a good technique as it only requires one extra parameter to encode the information and allows flexibility. Another alternative would be to have a marker which signifies that the extra parameters have finished:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&gt;
</span>&lt;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&gt;
	&lt;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"goodbye, END_EXTRA_PARAMS"</span>
		/&gt;
	&lt;/MenuItem&gt;
	&lt;MenuItem
		name=<span class="code-quote">"busy-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
			param=<span class="code-quote">"hello, goodbye, END_EXTRA_PARAMS"</span>
		/&gt;
	&lt;/MenuItem&gt;
&lt;/XenCenterPlugin&gt;</pre>
</div></div>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/Parameters+Hints+and+Tips">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/Parameters+Hints+and+Tips?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/Parameters+Hints+and+Tips?pageVersion=3">revision 3</a>
            and <a href="http://community.citrix.com/display/xs/Parameters+Hints+and+Tips">revision 4</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change1' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">XenCenter provides parameter sets to your plugin to describe the current selection in the XenCenter resource list. See the <span class="diffremovedchars">plugin specification</span> for the full details of the data in a parameter set. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">XenCenter provides parameter sets to your plugin to describe the current selection in the XenCenter resource list. See the <span class="diffaddedchars">[plugin specification|XenCenter Plugins]</span> for the full details of the data in a parameter set. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">This page details how to deal with this information using a Shell command, which requires some thought as there are no handy global variables separating everything out as is the case with the PowerShell commands.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Shell commands and parameters</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;!DOCTYPE XenCenterPlugin PUBLIC &quot;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&quot; &quot;xencenter-1.dtd&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	version=&quot;1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;hello-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;1, goodbye&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;/XenCenterPlugin&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change0' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change2' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">When using a Shell command, your parameters are passed directly as arguments to the plugin executable. In addition to the parameter sets, you will also <span class="diffremovedchars">recieve</span> any parameters you define in the _param_ attribute on your XML. Outlined here are several approaches you might take to parse these arguaments, with examples in C#. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">When using a Shell command, your parameters are passed directly as arguments to the plugin executable. In addition to the parameter sets, you will also <span class="diffaddedchars">receive</span> any parameters you define in the _param_ attribute on your XML. Outlined here are several approaches you might take to parse these arguaments, with examples in C#. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. Option 1 - No extra params</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;!DOCTYPE XenCenterPlugin PUBLIC &quot;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&quot; &quot;xencenter-1.dtd&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	version=&quot;1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;hello-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;/XenCenterPlugin&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change2'></a><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change1' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change3' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">This is the simple option. We know that parameter sets come in groups of four <span class="diffremovedchars">arguaments</span> so if none of the menu item commands which call that executable define anything in the _param_ attribute we can just read them off in groups. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change2'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">This is the simple option. We know that parameter sets come in groups of four <span class="diffaddedchars">arguments</span> so if none of the menu item commands which call that executable define anything in the _param_ attribute we can just read them off in groups. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">     ParamSets = new List&lt;ParameterSet&gt;();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">     for (int i = 0; i &lt; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">     {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">           ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">     }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. Option 2 - Fixed number of extra parameters</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">If you want to use extra parameters in your plugin commands, one option is to define a fixed number of extra parameters that each command must pass.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;!DOCTYPE XenCenterPlugin PUBLIC &quot;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&quot; &quot;xencenter-1.dtd&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	version=&quot;1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;goodbye-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;goodbye&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;hello-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;hello&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;quiet-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;BLANK_PARAM&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;/XenCenterPlugin&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">In this example you can see each command passes exactly one extra parameter, so we can read that off before moving onto the parameter sets. Commands that don't want to use all the parameters you are expecting can use a dummy keyword to keep the number of parameters consistent.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">private static int numberOfExtraParams = 1;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets, out List&lt;string&gt; ExtraParams)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">        {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            ExtraParams = new List&lt;string&gt;();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            for (int i = 0; i &lt; numberOfExtraParams; i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">                ExtraParams.Add(args[i]);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            ParamSets = new List&lt;ParameterSet&gt;();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            for (int i = numberOfExtraParams; i &lt; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">                ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">        }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. Option 3 - Variable number of extra parameters</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change3'></a><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change2' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change4' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">Here we are going to use some sort of indicator to help us know how many extra parameters there are going to be before the parameter sets start in our list of <span class="diffremovedchars">arguaments.</span> There are several ways to do this, here we are going to use the first extra parameter as an indicator for how many further extra parameters we should expect. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change3'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">Here we are going to use some sort of indicator to help us know how many extra parameters there are going to be before the parameter sets start in our list of <span class="diffaddedchars">arguments.</span> There are several ways to do this, <span class="diffaddedchars">but</span> here we are going to use the first extra parameter as an indicator for how many further extra parameters we should expect. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;!DOCTYPE XenCenterPlugin PUBLIC &quot;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&quot; &quot;xencenter-1.dtd&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	version=&quot;1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;hello-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;1, goodbye&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;busy-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;2, hello, goodbye&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;/XenCenterPlugin&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets, out List&lt;string&gt; ExtraParams)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">        {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            int numberOfExtraParams = 0;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            numberOfExtraParams = int.Parse(args[0]);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            ExtraParams = new List&lt;string&gt;();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            for (int i = 0; i &lt; numberOfExtraParams; i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">                ExtraParams.Add(args[i + 1]);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            ParamSets = new List&lt;ParameterSet&gt;();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            for (int i = numberOfExtraParams + 1; i &lt; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">                ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">            }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">        }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change4'></a><a href='http://community.citrix.com/display/xs/Parameters+Hints+and+Tips#change3' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffdeleted">This is a good technique as it only requires <span class="diffremovedchars">1</span> extra parameter to encode the information and allows flexibility. Another alternative would be to have a marker which signifies that the extra parameters have finished: </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change4'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">This is a good technique as it only requires <span class="diffaddedchars">one</span> extra parameter to encode the information and allows flexibility. Another alternative would be to have a marker which signifies that the extra parameters have finished: </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;!DOCTYPE XenCenterPlugin PUBLIC &quot;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&quot; &quot;xencenter-1.dtd&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	version=&quot;1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;hello-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;goodbye, END_EXTRA_PARAMS&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;busy-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			param=&quot;hello, goodbye, END_EXTRA_PARAMS&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;/XenCenterPlugin&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=139560619">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=139560619&version=3">Revert To Version 3</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/Parameters+Hints+and+Tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kensho</title>
		<link>http://community.citrix.com/display/xs/Kensho</link>
		<comments>http://community.citrix.com/display/xs/Kensho#comments</comments>
		<pubDate>Wed, 30 Jun 2010 21:01:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/Kensho</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~jeffg">Jeff Gee</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <h1><a name="Kensho-ProjectKenshov1.3TechnologyPreview"></a>Project Kensho v1.3 Technology Preview</h1>

<p><a name="Kensho-OLELINK1"></a> <a name="Kensho-OLELINK2"></a></p>
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="67%">

<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="Kensho-"></a><font color="#00549f">Breaking News</font></h3></div>
<p>Kensho OVF technology is now available from within XenServer 5.6.  We still take feed back and provide limited support for the Project Kensho OVF Tool 1.3's Hyper-V functionality.  Bring your issues and comments to the forum.  We'd love to hear from you.</p>


<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="Kensho-"></a><font color="#00549f">Introduction</font></h3></div>
<p>Simplicity is Power.  Simplicity is Project Kensho.  Citrix Project Kensho provides users with powerfully simple tools that facilitate the export and import of virtual machines and virtual machine based workloads (virtual appliances) using the Open Virtual Machine Format (OVF) and Common Information Model (CIM) industry standards developed by the Distributed Management Task Force's (DMTF) Virtualization Management Initiative (VMAN).</p>

<p>The Project Kensho OVF Tool utilizes the OVF standard for the creation and consumption of virtual appliance packages.  The Open Virtual Machine Format describes the metadata of virtual machine(s) and the behavior of the appliance when consumed by the hypervisor.</p>

<p>Citrix Project Kensho also provides a CIM interface to the XenServer™ API and introduces a WSMAN interface to XenServer™.&#160;</p>
</td>
<td class="confluenceTd" valign="top"><p> <a href="http://download.citrix.com/English/ss/downloads/details.asp?downloadId=1682855&#38;productId=683148"><img src="http://community.citrix.com/download/attachments/45810048/button3.png" align="absmiddle" border="0" /></a><br />
&#160;&#160;&#160;&#160;&#160;&#160;<b>MyCitrix login required for download</b></p>
<div style="padding:3px;background-color:#EEEEEE">

<h4><a name="Kensho-%26nbsp%3BResources"></a><b>&#160; Resources</b></h4>

<p>&#160; <a href="http://forums.citrix.com/forum.jspa?forumID=780"><img src="http://community.citrix.com/download/attachments/45810048/btn_search.png" align="absmiddle" border="0" /> <b>Discuss in Forum</b></a></p>
</div></td></tr></tbody></table>
<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Featured Videos</font></h3></div>
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top">
<p><a href="http://www.citrix.com/tv/#video/956"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/Kensho.png" border="0" width="100" /></div></a> </p>
<div class="" align='center'><b>Installing the Project Kensho OVF Tool</b></div>
</td>
<td class="confluenceTd" valign="top">
<p><a href="http://www.citrix.com/tv/#video/963"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/cim.png" border="0" width="100" /></div></a> </p>
<div class="" align='center'><b>Installing XenServer CIM Interfaces</b></div>
</td>
<td class="confluenceTd" valign="top">
<p><a href="http://www.citrix.com/tv/#video/965"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/cim.jpg" border="0" width="100" /></div></a></p>
<div class="" align='center'><b>Using the Project Kensho OVF Tool</b></div>
</td>
<td class="confluenceTd" valign="top">
<p><a href="http://www.citrix.com/tv/#video/1006"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/image13.jpg" border="0" width="100" /></div></a></p>
<div class="" align='center'><b>Project Kensho OVF Tool Advanced Features</b></div>
</td>
<td class="confluenceTd" valign="top">
<p><a href="http://www.citrix.com/tv/#video/971"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/image14.jpg" border="0" width="100" /></div></a></p>
<div class="" align='center'><b>Project Kensho and Hyper-V</b></div>
</td></tr></tbody></table>
<p><br /></p>

<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Useful Reference</font></h3></div>

<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top">
<p><a href="http://community.citrix.com/download/attachments/45810048/WhatisOVF.pdf"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/ProjectKensho.gif" border="0" width="80" /></div></a> </p>
<div class="" align='center'><b>What is OVF?</b></div>
</td>
<td class="confluenceTd" valign="top">
<p><a href="http://community.citrix.com/download/attachments/45810048/Kensho+OVF+Technology.pdf"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/ProjectKensho.gif" border="0" width="80" /></div></a> </p>
<div class="" align='center'><b>Kensho OVF Technology</b></div>

<div class="" align='justify'></div>
</td></tr></tbody></table>
<p><br /></p>

<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">How It Works</font></h3></div>
<p>Project Kensho consists of the following components:<br />
An <b>OVF Tool</b> , which utilizes the OVF standard for the creation and consumption of virtual appliance packages.   This utility removes much of the complexities found in conversion and packaging tools.  </p>

<p>A <b>CIM interface</b> to the XenServer™ API, which also adds a WSMAN interface to XenServer™. <b>The Xen-CIM component is required by the Project Kensho OVF Tool</b> and installs directly on the XenServer™. It can also be used as an interface for management of XenServer™ and XenServer™ hosted virtual machines.</p>

<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">What's New?</font></h3>
</div>
<p>Project Kensho 1.3 brings a wealth of powerfully simple features to both the Kensho OVF Tool and the CIM interface.  These new features enable users to both manage a XenServer™ in new ways as well as reap the benefits of OVF in a XenServer™ and Hyper-V environment.</p>

<h4><a name="Kensho-KenshoOVFTool"></a>Kensho OVF Tool</h4>
<ul>
	<li>Compliant with the DMTF OVF 1.0.0 specification</li>
	<li>Compatibility with XenConvert 2.0 OVF content</li>
	<li>Support for importing into and exporting from a user defined XenServer Storage Repository (SR)</li>
	<li>OVF security features:
	<ul>
		<li>Encryption</li>
		<li>Digital signing</li>
	</ul>
	</li>
	<li>OVF compression</li>
	<li>Snapshot support</li>
	<li>Direct import of VMware OVF content simplifying migration and consumption of VMware content</li>
</ul>


<h4><a name="Kensho-XenServerCIMInterface"></a>XenServer-CIM Interface</h4>
<ul>
	<li>Support for XenServer™ 5.5</li>
	<li>Storage profile support</li>
	<li>Networking profile support</li>
	<li>Snapshot classes</li>
</ul>


<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Project Kensho System Requirements</font></h3>
</div>

<p>The minimum environment to use the tools consists of:  Project Kensho OVF Tool Host, a supported virtual machine host, and a Windows SMB share.  Project Kensho requires the following services and software to support the components of the Project Kensho OVF Tool.</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> <b>Software</b> </th>
<th class='confluenceTh'> <b>Description</b> </th>
</tr>
<tr>
<td class='confluenceTd'> Project Kensho OVF Tool Host </td>
<td class='confluenceTd'> Project Kensho OVF Tool requires a personal computer running Windows XP, Vista or Windows Server 2003 or 2008.  Windows 7 and Windows Server 2008 R2 support is experimental. </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenServer™ </td>
<td class='confluenceTd'> Citrix XenServer™ 5.0 or 5.5 is required for creating and consuming OVF based virtual appliances using XenServer™ and management of the XenServer™ environment via the Common Information Model (CIM).   <br />
<br />
The Project Kensho XenServer™ CIM installation utility provides support for management of the XenServer™ through the standards based CIM interface.  It also contains a configuration script to create an ISO storage repository and creates a helper VM template for the Project Kensho OVF Tool.</td>
</tr>
<tr>
<td class='confluenceTd'> Windows Server 2008 with Hyper-V </td>
<td class='confluenceTd'> The Project Kensho OVF Tool supports Windows Server 2008 with the Hyper-V Role for importing and exporting OVF based virtual appliances. <br />
<br />
Communication between the Project Kensho OVF Tool and the Windows Server occurs through WinRM. Windows Server 2008 installs WinRM by default, no additional installation is required. <br /></td>
</tr>
<tr>
<td class='confluenceTd'> Windows Server SMB File Share </td>
<td class='confluenceTd'> The Project Kensho OVF Tool requires a Windows based UNC share to import and export OVF packages. This is called the Kensho (or OVF) Library. <br />
The share must be accessible from the Project Kensho OVF Tool as well as any virtual machine hosts targeted for import or export. </td>
</tr>
</tbody></table>

<h4><a name="Kensho-"></a><font color="#00549f">Prerequisites</font></h4>

<p>Complete the following pre-installation tasks before installing Project Kensho components:</p>
<ol>
	<li>Read through this entire document</li>
	<li>Read through the Project Kensho OVF Tool Readme</li>
	<li>Setup a Windows file share:
	<ol>
		<li>Create a file share from a Windows host
		<ol>
			<li>Windows Server 2008 with the File Services Role provides the option of creating SMB or NFS based shares, be sure to select SMB.</li>
			<li>Windows Server 2003 and prior create SMB based shares by default.</li>
		</ol>
		</li>
		<li>Obtain a user account and password that has change level access to this share.</li>
	</ol>
	</li>
	<li>Project Kensho OVF Tool Host:
	<ol>
		<li>Windows XP, Windows Server 2003, or Windows Vista.</li>
		<li>Install .NET Framework version 3.5</li>
		<li>Install WinRM</li>
	</ol>
	</li>
	<li>XenServer™ Host:
	<ol>
		<li>XenServer™ 5.0 or 5.5</li>
	</ol>
	</li>
	<li>Windows Server 2008 with Hyper-V Host
	<ol>
		<li>Add the Hyper-V role</li>
	</ol>
	</li>
</ol>


<h2><a name="Kensho-%26nbsp%3B"></a>&#160;</h2>

<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Install</font></h3>
</div>

<h4><a name="Kensho-XenServerCIMInterfaceInstallation"></a><b>XenServer-CIM Interface Installation</b></h4>

<p>To install the XenServer-CIM Interface on XenServer™, complete the following procedure:</p>
<div class='panelMacro'><table class='noteMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Be Careful</b><br />
<p>The install script creates a hidden ISO Storage Repository and copies two ISOs into it (xenserver-linuxfixup-disk.iso and xenserver-iscsi-target.iso). It also creates a helper VM template called 'iSCSI target' from xenserver-iscsi-target.iso. These are utilized by the Project Kensho OVF Tool.  Do not remove, alter or add content to this storage repository.</p></td></tr></table></div>

<ol>
	<li>Copy XenServerCIM-Install.tgz to the XenServer™ host to the path of: /tmp</li>
	<li>From the XenServer™ console, execute the following:
	<ol>
		<li><b>cd /tmp</b></li>
		<li><b>tar &#45; xvzf XenServer-CIM.tgz</b></li>
		<li><b>cd /XenServer-CIM</b></li>
		<li>Install the XenServer-CIM and WSMAN providers:
		<ol>
			<li><b>bash ./install.sh</b></li>
			<li>Answer the prompt to set the security level of the interface.</li>
		</ol>
		</li>
	</ol>
	</li>
</ol>


<h4><a name="Kensho-ProjectKenshoOVFToolInstallation"></a><b>Project Kensho OVF Tool Installation</b></h4>

<ol>
	<li>From the computer identified as the Project Kensho OVF Tool computer:
	<ol>
		<li>Execute <b>KenshoOVF_x86.msi</b> or <b>KenshoOVF_x64.msi</b></li>
		<li>Follow the prompts</li>
	</ol>
	</li>
</ol>


<div class='panelMacro'><table class='infoMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The Project Kensho OVF Tool installer must execute via "run as administrator" option on Vista, Windows Server 2008, Windows 7 and Windows Server 2008 R2.</p></td></tr></table></div>

<h4><a name="Kensho-WindowsServer2008withHyperVConfiguration"></a><b>Windows Server 2008 with</b> <b>Hyper-V Configuration</b></h4>
<p>These steps enable WinRM, modify the Windows Firewall rules and set the appropriate authorization to access WinRM remotely with Kensho OVF Tool.</p>
<ol>
	<li>At the Hyper-V host login as the administrator</li>
	<li>Open a command prompt and execute the following commands:
	<ol>
		<li><b>winrm quickconfig</b></li>
		<li><b>winrm p winrm/config/service @{AllowUnencrypted="true"}</b></li>
		<li><b>winrm p winrm/config/service/auth @{Basic="true"}</b></li>
		<li><b>winrm p winrm/config/client @{AllowUnencrypted="true"}</b></li>
		<li><b>winrm p winrm/config/client/auth @{Basic="true"}</b></li>
	</ol>
	</li>
</ol>



<h3><a name="Kensho-%26nbsp%3B"></a>&#160;</h3>

<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Uninstall</font></h3>
</div>

<h4><a name="Kensho-XenServerCIMInterfaceUninstallProcess"></a><b>XenServer-CIM Interface Uninstall Process</b></h4>

<ol>
	<li>To uninstall the XenServer-CIM and WSMAN providers
	<ol>
		<li><b>bash ./uninstall.sh</b>
		<ol>
			<li>If an ISO image is added to the ISO storage repository, answer the prompt to delete the 'XenServer Internal ISO library'</li>
			<li>If confirmed, the script deletes the hidden internal ISO storage repository created during install. All ISO images added into this storage repository will be deleted.</li>
		</ol>
		</li>
	</ol>
	</li>
</ol>


<h4><a name="Kensho-ProjectKenshoOVFToolUninstallProcess"></a><b>Project Kensho OVF Tool Uninstall Process</b></h4>

<ol>
	<li>To uninstall Project Kensho OVF Tool:
	<ol>
		<li>Open Add / Remove Programs (or Programs)</li>
		<li>Select the Project Kensho OVF Tool</li>
		<li>Select Remove</li>
	</ol>
	</li>
</ol>


<h3><a name="Kensho-%26nbsp%3B"></a>&#160;</h3>

<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Project Kensho Administration</font></h3>
</div>
<p>This section covers general administration and use of the XenServer CIM interface for XenServer™ and the Project Kensho OVF Tool.</p>

<h4><a name="Kensho-XenServerCIMInterface"></a><b>XenServer-CIM Interface</b></h4>

<p>Once installed, the XenServer-CIM interface requires no administration. Documentation is provided within the distribution that further describes using the interface and its options.</p>

<h4><a name="Kensho-ProjectKenshoOVFTool"></a><b>Project Kensho OVF Tool</b></h4>

<p>The Project Kensho OVF Tool is the primary utility to create and consume OVF virtual appliances. When starting the utility, an initialization process occurs.  This process gathers all of the library and server information from the systems defined by the user.  In some scenarios, initialization may take up to 60 seconds or more to collect all data.</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image1.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 1 &#45; Initializing Indicator</b></font></p>

<p>After completing initialization, the main UI appears</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image2.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 2 &#45; Project Kensho OVF Tool</b></font></p>

<h4><a name="Kensho-AddingvirtualmachineHost%28s%29andOVFLibraryResources%3A"></a><b>Adding virtual machine Host(s) and OVF Library Resources:</b></h4>
<p>To begin using the utility, it is necessary to add at least one virtual machine host and an OVF Library.  To add a virtual machine host or Library share:</p>

<p>1.&#160;&#160; From the menu bar, select <b>File &#62; Add Server</b>.  Alternatively, pressing the hotkey combination <b>Alt &#43;A</b> or clicking the Add Server icon <img src="http://community.citrix.com/download/attachments/45810048/addhost_16.jpg" align="absmiddle" border="0" /> on the toolbar invokes the Add Server configuration window.</p>

<p>2.&#160;&#160; Select the platform type from the drop down menu:</p>

<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <img src="http://community.citrix.com/download/attachments/45810048/image3.jpg" align="absmiddle" border="0" /> </td>
<td class='confluenceTd'><ul>
	<li><b>For a Library</b> :
	<ol>
		<li>Enter the server name (or IP address)</li>
		<li>Enter the share name (without slashes or subfolders)</li>
		<li>Enter the username and password</li>
		<li>Click <b>Add</b> .</li>
	</ol>
	</li>
</ul>
</td>
</tr>
<tr>
<td class='confluenceTd'> <font color="#4f81bd"><b>Figure 3 &#45; Adding a Library Server</b></font> </td>
</tr>
<tr>
<td class='confluenceTd'> <img src="http://community.citrix.com/download/attachments/45810048/image4.jpg" align="absmiddle" border="0" /> </td>
<td class='confluenceTd'><ul>
	<li><b>For a virtual machine host:</b>
	<ol>
		<li>Enter the server name (or IP address)</li>
		<li>Select the Host server protocol: Unsecure or Secure (HTTP/HTTPS)</li>
		<li>Enter the username and password</li>
		<li>Click <b>Add</b></li>
	</ol>
	</li>
</ul>
</td>
</tr>
<tr>
<td class='confluenceTd'> <font color="#4f81bd"><b>Figure 4 &#45; Adding a XenServer™ Host</b></font> </td>
</tr>
</tbody></table>

<p>3. &#160;The window will stay open after clicking the <b>Add</b> button. Repeat this process for each hypervisor and or library the Project Kensho OVF Tool will manage. Click the <b>Close</b> button when finished adding all servers.</p>
<div class='panelMacro'><table class='infoMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>When adding a Hyper V server the account used must be a member of the local Hyper-V host administrators group.</p></td></tr></table></div>

<h4><a name="Kensho-CreatingaVirtualAppliance"></a><b>Creating a Virtual Appliance</b></h4>
<p>After configuring a library and virtual machine host(s), the Project Kensho OVF Tool is ready to create a virtual appliance from one or more virtual machines.  The virtual appliance will become an OVF package.  The virtual appliance is exported from either a XenServer™ or Hyper-V host.</p>

<p>To export a virtual machine as an OVF virtual appliance, follow these easy steps:</p>

<p>1.&#160;&#160; Select the Export Tab</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image5.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 5 &#45; Export Tab</b></font></p>

<p>2.&#160;&#160; Select the target library share from the Library tree view. This is where the OVF and associated VHD(s) will reside after export.</p>

<p>3.&#160;&#160; From the tree view, expand the list of virtual machines under each virtual machine host.</p>

<p>4.&#160;&#160; Select a virtual machine with a single click. This will place its qualified name into the <em>Selected vMachine(s)</em> list box. To remove the selection, double click the selection.</p>
<div class='panelMacro'><table class='noteMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Be Aware</b><br />
<p>There is no limit to the number of virtual machines to select for export. The more virtual machines selected, the longer the export will take and require more storage on the Library server.  The amount of time to export per virtual machine is dependent on the virtual disk size, type, and network bandwidth between the virtual machine host and the library server.</p></td></tr></table></div>
<p>5.&#160;&#160; Click the Export button to begin.  The result will be the OVF virtual appliance package containing the virtual machine(s) selected.  It is important to enusre that  the OVF package is tested before assuming it is good.  The next section describes the import process.</p>


<h4><a name="Kensho-ConsumingaVirtualAppliance"></a><b>Consuming a Virtual Appliance</b></h4>
<p>The Project Kensho OVF Tool can consume any DMTF compliant OVF file that contains virtual machine disk(s) in the VHD or VMDK format.  The virtual appliance is imported into either a XenServer™ or Hyper-V host.</p>

<p>To import an OVF virtual appliance, follow these easy steps:</p>

<p>1.&#160;&#160; Select the Import Tab.</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image6.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd">*Figure 6 &#45; Import Tab</font></p>

<p>2.&#160;&#160; Select the target virtual machine host or hosts from the respective Host type tree view.</p>

<p>3.&#160;&#160; From the Kensho Library tree view, select an OVF virtual appliance.</p>
<div class='panelMacro'><table class='infoMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>OVA packages must be converted to OVF prior to Import. Please see: Converting an OVF package to an OVA for more information.</p></td></tr></table></div>

<p>4.&#160;&#160; If a virtual machine to host resource mapping is required - it is noted in the Mapping status field as Mapping: Required.</p>

<p>5.&#160;&#160; Click the Mapping wizard button <img src="http://community.citrix.com/download/attachments/45810048/newvirtualnetwork_32.jpg" align="absmiddle" border="0" /> in the Tool bar to map virtual machine to host resources.</p>

<p>6.&#160;&#160; Click the <b>Import</b> or <b>Force</b> button to begin the import.</p>
<div class='panelMacro'><table class='infoMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The button will display <b>Force</b> if mapping is either incomplete or non-existent.</p></td></tr></table></div>
<p>During a forced import devices are attached in a first found fashion. I.E. if the OVF has a network device defined on the VM an attempt will be made to attach that network to the first virtual network switch listed on the target host.</p>


<h4><a name="Kensho-AdvancedPackagingCapabilities"></a><b>Advanced Packaging Capabilities</b></h4>
<p>New to the Project Kensho 1.3 OVF Tool is support for a wide range of OVF virtual appliance packaging options.  When selecting one or more VMs to export as a virtual appliance, the utility presents the following options:</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image7.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 7 &#45; Export Options</b></font></p>

<p>Each option is unique and may be applied to any virtual appliance export.  Selecting a check box enables the feature.  Some features, like security options, require user input.  </p>

<ul>
	<li><b>Create OVA Package</b><br />
Selecting this option allows the user to create an OVA package.  An OVA package is an archive containing OVF metadata, virtual disks, manifest and certificates in a single file.   This feature is useful for scenarios where a single file containing all the necessary virtual machine components is desired.  This option produces a file with an .ova extension.  If a file inside of the OVF package is greater than 8 GB, the operation to create the OVA will fail.</li>
</ul>


<ul>
	<li><b>Compress OVA Package</b><br />
Selecting this option allows the user to compress the entire OVA package.  To enable this option, the user must select the Create OVA Package option.  This option is useful when the user seeks to reduce the overall file size of the of the OVA package.  This option produces a file with the .ova.gz extension.</li>
</ul>


<ul>
	<li><b>Compress OVF Files Individually</b><br />
Selecting this option allows the user to compress the individual files within the OVA package.  This differs from the option above in that each file within the OVA package is compressed.  Selecting this option allows the user to achieve maximum compression of an OVA file.  This option produces files within the OVA package with the .gz extension.  The OVA package will have the .ova extension.</li>
</ul>


<ul>
	<li><b>Add Manifest</b><br />
Selecting this option instructs the Project Kensho OVF Tool to create a manifest file referencing the OVF files and their checksum.  This option is useful when a user seeks improved reliability of the content.  This option produces a file with the .mf extension.</li>
</ul>


<ul>
	<li><b>Encrypt Attached Files</b><br />
Selecting this option allows the user to encrypt the OVF related files.  When selecting this option, the user must enter a passphrase.  This option is useful when protecting appliance content is required.</li>
</ul>


<ul>
	<li><b>Sign OVF Package</b><br />
Selecting this option allows the user to digitally sign the OVF file with a certificate.  This option is useful in providing security against unauthorized changes to the OVF file content.  </li>
</ul>


<ul>
	<li><b>Include EULA(s)</b><br />
Selecting this option allows the user to create a virtual appliance with an End User License Agreement (EULA).  This feature is useful when a virtual appliance requires end user agreement to a EULA before the virtual appliance installs on the target hypervisor.  To add a EULA follow these directions:</li>
</ul>


<p>1.&#160;&#160; Click the Add EULA button</p>

<p>2.&#160;&#160; Browse to the desired text file containing the EULA text.</p>

<div class='panelMacro'><table class='infoMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The EULA must be a plain text file and cannot contain any formatting (such as HTML tags) or special characters.</p></td></tr></table></div>

<p>3.&#160;&#160; Select the EULA text file. </p>

<p>4.&#160;&#160; Click Open</p>

<ul>
	<li><b>Export Metadata Only</b><br />
Selecting this option allows the user to create an OVF without any virtual disk(s).  This is useful when the user needs an OVF without virtual disk information.</li>
</ul>



<h4><a name="Kensho-AdvancedImportCapabilities"></a><b>Advanced Import Capabilities</b></h4>
<p>New to the Project Kensho 1.3 OVF Tool is support for a range of OVF virtual appliance import options.  When selecting one or more OVF virtual appliances to import, the utility presents the following options:</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image8.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 8 &#45; Import Options</b></font></p>

<ul>
	<li><b>Verify Digital Signature</b><br />
Selecting this option forces the import process to verify the digital signature that was used to sign the OVF during export.  If the verification fails, this typically indicates that the OVF has been tampered with.</li>
</ul>


<ul>
	<li><b>Verify Manifest Content</b><br />
Selecting this option forces the import process to verify that the content of the manifest file matches what is in the OVF package.  If this verification fails, it typically indicates that files are missing.</li>
</ul>


<ul>
	<li><b>Validate OVF Package</b><br />
Selecting this option forces the import process to validate the selected OVF file against the DMTF OVF 1.0.0 schema.  This is useful to determine the compatibility of an OVF file.</li>
</ul>


<ul>
	<li><b>Import Metadata Only</b><br />
Selecting this option imports the metadata only.  This is useful if configuration content is all that is needed.  The virtual machine content will be created from a template or an existing virtual disk will be attached after import. </li>
</ul>


<ul>
	<li><b>Run Operating System Fixups</b><br />
Selecting this option runs automated scripts against the imported VMware based virtual appliance.  This is necessary to ensure the VM boots properly.  Select this option for Windows or Linux virtual machines imported from VMware sources.  Fixup of virtual machines with more than two virtual disks is unsupported.</li>
</ul>



<h4><a name="Kensho-VMtoHostResourceMappingWizard"></a><b>VM to Host Resource Mapping Wizard</b></h4>

<p>The Project Kensho OVF Tool allows users to map system, storage, and networking resources defined in the OVF virtual appliance to the resources on the virtual machine host(s).  This ensures that prior to import, the proper resources are paired and the virtual machine can power on minimizing administrative tasks.  </p>

<p>Mapping is performed by selecting items (one or more) in the left column of the Mapping dialog and then selecting a target device in the right</p>

<p>The padlock icon <img src="http://community.citrix.com/download/attachments/45810048/image007.jpg" align="absmiddle" border="0" /> depicts that a mapping of a VM device to Host resource has been set. Individual mappings may be cleared by selecting and clearing the lock icon.</p>

<p>An existing OVF to Host resource mapping may be cleared by clicking the <b>Clear</b> button on the Import tab.</p>

<p>1.&#160;&#160; Begin the resource mapping process by Clicking the Mapping button <img src="http://community.citrix.com/download/attachments/45810048/newvirtualnetwork_32.jpg" align="absmiddle" border="0" /> in the Tool bar</p>

<p>2.&#160;&#160; The mapping wizard launches and presents the Systems tab (this is the target Host for a VM workload).</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image9.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 9 &#45; Unmapped VM CPU and memory workload</b></font></p>

<p>3.&#160;&#160;Select the desired host resource in the right pane</p>

<p>4.&#160;&#160;Select a VM resource(s) in the left pane</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image10.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd">8Figure 10 &#45; VM CPU and memory workload mapped Host*</font></p>

<p>5.&#160;&#160;Click the <b>Next</b> button to map the Network resources.</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image11.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd">*Figure 11 &#45; Mapped VM Network Device to Hypervisor Network Device</font></p>

<p>6.&#160;&#160; Select the desired host resource in the right pane</p>

<p>7.&#160;&#160; Select a VM resource(s) in the left pane</p>

<p>8.&#160;&#160; Click the <b>Next</b> button to map the Storage resources</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image12.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 12 &#45; Mapped VM Storage to Hypervisor Storage</b></font></p>

<p>9. &#160;&#160; Select the desired host resource in the right pane</p>

<p>10.&#160;&#160; Select a VM resource(s) in the left pane</p>

<p>11. &#160; Click <b>Done</b> to complete the wizard, save the mapping, and return to the Import screen.</p>

<h4><a name="Kensho-ConvertinganOVFpackagetoanOVAandviceversa"></a><b>Converting an OVF package to an OVA and vice versa</b></h4>
<p>The Project Kensho OVF Tool facilitates the conversion of any DMTF compliant OVF export to a single OVA file.</p>

<p>To convert an OVF with the Project Kensho OVF Tool:</p>

<p>1.&#160;&#160; Select the Import Tab</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image13.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 13 &#45; OVA Menu</b></font></p>

<p>2.&#160;&#160; From the Kensho Library, select an OVF.</p>

<p>3.&#160;&#160; Right click the OVF and Select 'Convert to OVA'</p>

<p>4.&#160;&#160; The reverse process is used to convert an OVA into an OVF.</p>

<div class='panelMacro'><table class='infoMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The OVF icon <img src="http://community.citrix.com/download/attachments/45810048/image013.jpg" align="absmiddle" border="0" height="26" width="26" /> depicts a folder that includes the OVF package configuration and associated file.<br />
The OVA icon <img src="http://community.citrix.com/download/attachments/45810048/image014.jpg" align="absmiddle" border="0" height="26" width="26" /> indicates an OVF package that has been compressed, using tar format, into a single file with the extension .OVA<br />
The X icon <img src="http://community.citrix.com/download/attachments/45810048/error_16.jpg" align="absmiddle" border="0" height="22" width="22" /> indicates an OVF package that is not compliant with the DMTF Standards.</p></td></tr></table></div>

<h4><a name="Kensho-EnvironmentTab"></a><b>Environment Tab</b></h4>
<p>The environment tab is a read-only view of the virtual machine host resources and environment.<br />
<img src="http://community.citrix.com/download/attachments/45810048/image14.jpg" align="absmiddle" border="0" /><br />
<font color="#4f81bd"><b>Figure 14 &#45; Environment Tab</b></font></p>

<h3><a name="Kensho-"></a><font color="#00549f">VMware OVF Support</font></h3>

<p>The Project Kensho OVF Tool facilitates importing VMware derived OVF content directly into a XenServer Storage Repository in the same manner as importing a XenConvert or Project Kensho produced OVF.  </p>

<p>It is important to note that not all VMware OVF content is equal.  VMware OVF content produced through the latest VMware utilities will result in a higher degree of import success.  The following VMware OVF content has been successfully tested:</p>

<ul>
	<li>vSphere 4</li>
	<li>Virtual Infrastructure 3</li>
	<li>VMware OVF Tool 0.9</li>
	<li>VMware OVF Tool 1.0</li>
	<li>VMware Studio 1.0</li>
	<li>VMware Workstation 6.5.3</li>
	<li>VMware Converter 4.0.x</li>
	<li>VMware Converter 3.0.3</li>
</ul>



<h3><a name="Kensho-"></a><font color="#00549f">Snapshot Support</font></h3>

<p>The Project Kensho OVF Tool now supports creating virtual appliances from virtual machines with snapshots. Both XenServer 5.5 and Hyper-V support virtual machine snapshots.  </p>

<p>When creating an OVF virtual appliance from a virtual machine with a snapshot, the current running state of the virtual machine is what the tool creates as a virtual appliance.  This can also be described as the state that is experienced when the virtual machine is powered on. </p>

<p>If a virtual machine contains multiple snapshots, only the current running state of the virtual machine is exported.  No snapshot history or detail is exported as part of the virtual appliance</p>


    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/Kensho">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/Kensho?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/Kensho?pageVersion=89">revision 89</a>
            and <a href="/display/xs/Kensho">revision 90</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h1. Project Kensho v1.3 Technology Preview</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{anchor:OLE_LINK1} {anchor:OLE_LINK2}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column:width=67%}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">h3. {color:#00549f}Breaking News{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffadded">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffadded">Kensho OVF technology is now available from within XenServer 5.6.  We still take feed back and provide limited support for the Project Kensho OVF Tool 1.3's Hyper-V functionality.  Bring your issues and comments to the forum.  We'd love to hear from you.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffadded">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffadded">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffadded">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}Introduction{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Simplicity is Power.  Simplicity is Project Kensho.  Citrix Project Kensho provides users with powerfully simple tools that facilitate the export and import of virtual machines and virtual machine based workloads (virtual appliances) using the Open Virtual Machine Format (OVF) and Common Information Model (CIM) industry standards developed by the Distributed Management Task Force's (DMTF) Virtualization Management Initiative (VMAN).</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The Project Kensho OVF Tool utilizes the OVF standard for the creation and consumption of virtual appliance packages.  The Open Virtual Machine Format describes the metadata of virtual machine(s) and the behavior of the appliance when consumed by the hypervisor.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Citrix Project Kensho also provides a CIM interface to the XenServer™ API and introduces a WSMAN interface to XenServer™.&#38;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column} [!button3.png!&#124;http://download.citrix.com/English/ss/downloads/details.asp?downloadId=1682855&#38;productId=683148]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;*MyCitrix login required for download*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. *&#38;nbsp; Resources*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp; [!btn_search.png! *Discuss in Forum*&#124;http://forums.citrix.com/forum.jspa?forumID=780]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}Featured Videos{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[!Kensho.png&#124;align=centre,width=100,heigh=72!&#124;http://www.citrix.com/tv/#video/956] </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align:center}*Installing the Project Kensho OVF Tool*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[!cim.png&#124;align=centre,width=100,heigh=72!&#124;http://www.citrix.com/tv/#video/963] </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align:center}*Installing XenServer CIM Interfaces*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[!cim.jpg&#124;align=centre,width=100,heigh=72!&#124;http://www.citrix.com/tv/#video/965]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align:center}*Using the Project Kensho OVF Tool*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[!image13.jpg&#124;align=centre,width=100,heigh=60!&#124;http://www.citrix.com/tv/#video/1006]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align:center}*Project Kensho OVF Tool Advanced Features*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[!image14.jpg&#124;align=centre,width=100,heigh=60!&#124;http://www.citrix.com/tv/#video/971]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align:center}*Project Kensho and Hyper-V*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}Useful Reference{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[!ProjectKensho.gif&#124;align=centre,width=80,heigh=40!&#124;http://community.citrix.com/download/attachments/45810048/WhatisOVF.pdf] </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align:center}*What is OVF?*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[!ProjectKensho.gif&#124;align=centre,width=80,heigh=40!&#124;http://community.citrix.com/download/attachments/45810048/Kensho+OVF+Technology.pdf] </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align:center}*Kensho OVF Technology*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}How It Works{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Project Kensho consists of the following components:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">An *OVF Tool* , which utilizes the OVF standard for the creation and consumption of virtual appliance packages.   This utility removes much of the complexities found in conversion and packaging tools.  </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">A *CIM interface* to the XenServer™ API, which also adds a WSMAN interface to XenServer™. *The Xen-CIM component is required by the Project Kensho OVF Tool* and installs directly on the XenServer™. It can also be used as an interface for management of XenServer™ and XenServer™ hosted virtual machines.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}What's New?{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Project Kensho 1.3 brings a wealth of powerfully simple features to both the Kensho OVF Tool and the CIM interface.  These new features enable users to both manage a XenServer™ in new ways as well as reap the benefits of OVF in a XenServer™ and Hyper-V environment.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. Kensho OVF Tool</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Compliant with the DMTF OVF 1.0.0 specification</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Compatibility with XenConvert 2.0 OVF content</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Support for importing into and exporting from a user defined XenServer Storage Repository (SR)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	OVF security features:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	**    Encryption</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	**    Digital signing</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	OVF compression</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Snapshot support </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Direct import of VMware OVF content simplifying migration and consumption of VMware content</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. XenServer-CIM Interface</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Support for XenServer™ 5.5</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Storage profile support</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Networking profile support</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*	Snapshot classes</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}Project Kensho System Requirements{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The minimum environment to use the tools consists of:  Project Kensho OVF Tool Host, a supported virtual machine host, and a Windows SMB share.  Project Kensho requires the following services and software to support the components of the Project Kensho OVF Tool.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124;&#124; *Software* &#124;&#124; *Description* &#124;&#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Project Kensho OVF Tool Host &#124; Project Kensho OVF Tool requires a personal computer running Windows XP, Vista or Windows Server 2003 or 2008.  Windows 7 and Windows Server 2008 R2 support is experimental. &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Citrix XenServer™ &#124; Citrix XenServer™ 5.0 or 5.5 is required for creating and consuming OVF based virtual appliances using XenServer™ and management of the XenServer™ environment via the Common Information Model (CIM).   \\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The Project Kensho XenServer™ CIM installation utility provides support for management of the XenServer™ through the standards based CIM interface.  It also contains a configuration script to create an ISO storage repository and creates a helper VM template for the Project Kensho OVF Tool.&#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Windows Server 2008 with Hyper-V &#124; The Project Kensho OVF Tool supports Windows Server 2008 with the Hyper-V Role for importing and exporting OVF based virtual appliances. \\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Communication between the Project Kensho OVF Tool and the Windows Server occurs through WinRM. Windows Server 2008 installs WinRM by default, no additional installation is required. \\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Windows Server SMB File Share &#124; The Project Kensho OVF Tool requires a Windows based UNC share to import and export OVF packages. This is called the Kensho (or OVF) Library. \\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The share must be accessible from the Project Kensho OVF Tool as well as any virtual machine hosts targeted for import or export. &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. {color:#00549f}Prerequisites{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Complete the following pre-installation tasks before installing Project Kensho components:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Read through this entire document</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Read through the Project Kensho OVF Tool Readme</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Setup a Windows file share:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Create a file share from a Windows host</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">### Windows Server 2008 with the File Services Role provides the option of creating SMB or NFS based shares, be sure to select SMB.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">### Windows Server 2003 and prior create SMB based shares by default.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Obtain a user account and password that has change level access to this share.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Project Kensho OVF Tool Host:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Windows XP, Windows Server 2003, or Windows Vista.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Install .NET Framework version 3.5</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Install WinRM</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># XenServer™ Host:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## XenServer™ 5.0 or 5.5</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Windows Server 2008 with Hyper-V Host</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Add the Hyper-V role</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. &#38;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}Install{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. *XenServer-CIM Interface Installation*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">To install the XenServer-CIM Interface on XenServer™, complete the following procedure:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{note:title=Be Careful}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The install script creates a hidden ISO Storage Repository and copies two ISOs into it (xenserver-linuxfixup-disk.iso and xenserver-iscsi-target.iso). It also creates a helper VM template called 'iSCSI target' from xenserver-iscsi-target.iso. These are utilized by the Project Kensho OVF Tool.  Do not remove, alter or add content to this storage repository.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{note}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Copy XenServerCIM-Install.tgz to the XenServer™ host to the path of: /tmp</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># From the XenServer™ console, execute the following:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## *cd /tmp*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## *tar \- xvzf XenServer-CIM.tgz*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## *cd /XenServer-CIM*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Install the XenServer-CIM and WSMAN providers:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">### *bash ./install.sh*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">### Answer the prompt to set the security level of the interface.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. *Project Kensho OVF Tool Installation*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># From the computer identified as the Project Kensho OVF Tool computer:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Execute *KenshoOVF_x86.msi* or *KenshoOVF_x64.msi*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## Follow the prompts</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{info:title=Note}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The Project Kensho OVF Tool installer must execute via &#34;run as administrator&#34; option on Vista, Windows Server 2008, Windows 7 and Windows Server 2008 R2.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. *Windows Server 2008 with* *Hyper-V Configuration*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">These steps enable WinRM, modify the Windows Firewall rules and set the appropriate authorization to access WinRM remotely with Kensho OVF Tool.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># At the Hyper-V host login as the administrator</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Open a command prompt and execute the following commands:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">##	*winrm quickconfig*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">##	*winrm p winrm/config/service @\{AllowUnencrypted=&#34;true&#34;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">##	*winrm p winrm/config/service/auth @\{Basic=&#34;true&#34;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">##	*winrm p winrm/config/client @\{AllowUnencrypted=&#34;true&#34;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">##	*winrm p winrm/config/client/auth @\{Basic=&#34;true&#34;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. &#38;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#00549f}Uninstall{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h4. *XenServer-CIM Interface Uninstall Process*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># To uninstall the XenServer-CIM and WSMAN providers</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">## *bash ./uninstall.sh*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">### If an ISO image is added to the ISO storage repository, answer the prompt to delete the 'XenServer Internal ISO library'</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">### If confirmed, the script deletes the hidden internal ISO storage repository created during install. All ISO images added into this storage repository will b]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~jeffg">Jeff Gee</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <h1><a name="Kensho-ProjectKenshov1.3TechnologyPreview"></a>Project Kensho v1.3 Technology Preview</h1>

<p><a name="Kensho-OLELINK1"></a> <a name="Kensho-OLELINK2"></a></p>
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd"  valign="top" width="67%">

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="Kensho-"></a><font color="#00549f">Breaking News</font></h3></div>
<p>Kensho OVF technology is now available from within XenServer 5.6.  We still take feed back and provide limited support for the Project Kensho OVF Tool 1.3's Hyper-V functionality.  Bring your issues and comments to the forum.  We'd love to hear from you.</p>


<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="Kensho-"></a><font color="#00549f">Introduction</font></h3></div>
<p>Simplicity is Power.  Simplicity is Project Kensho.  Citrix Project Kensho provides users with powerfully simple tools that facilitate the export and import of virtual machines and virtual machine based workloads (virtual appliances) using the Open Virtual Machine Format (OVF) and Common Information Model (CIM) industry standards developed by the Distributed Management Task Force's (DMTF) Virtualization Management Initiative (VMAN).</p>

<p>The Project Kensho OVF Tool utilizes the OVF standard for the creation and consumption of virtual appliance packages.  The Open Virtual Machine Format describes the metadata of virtual machine(s) and the behavior of the appliance when consumed by the hypervisor.</p>

<p>Citrix Project Kensho also provides a CIM interface to the XenServer™ API and introduces a WSMAN interface to XenServer™.&nbsp;</p>
</td>
<td class="confluenceTd"  valign="top"><p> <a href="http://download.citrix.com/English/ss/downloads/details.asp?downloadId=1682855&amp;productId=683148"><img src="http://community.citrix.com/download/attachments/45810048/button3.png" align="absmiddle" border="0" /></a><br/>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<b>MyCitrix login required for download</b></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h4><a name="Kensho-%26nbsp%3BResources"></a><b>&nbsp; Resources</b></h4>

<p>&nbsp; <a href="http://forums.citrix.com/forum.jspa?forumID=780"><img src="http://community.citrix.com/download/attachments/45810048/btn_search.png" align="absmiddle" border="0" /> <b>Discuss in Forum</b></a></p>
</div></td></tr></tbody></table>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Featured Videos</font></h3></div>
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd"  valign="top">
<p><a href="http://www.citrix.com/tv/#video/956"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/Kensho.png" border="0" width="100" /></div></a> </p>
<div class="" align='center'><b>Installing the Project Kensho OVF Tool</b></div>
</td>
<td class="confluenceTd"  valign="top">
<p><a href="http://www.citrix.com/tv/#video/963"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/cim.png" border="0" width="100" /></div></a> </p>
<div class="" align='center'><b>Installing XenServer CIM Interfaces</b></div>
</td>
<td class="confluenceTd"  valign="top">
<p><a href="http://www.citrix.com/tv/#video/965"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/cim.jpg" border="0" width="100" /></div></a></p>
<div class="" align='center'><b>Using the Project Kensho OVF Tool</b></div>
</td>
<td class="confluenceTd"  valign="top">
<p><a href="http://www.citrix.com/tv/#video/1006"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/image13.jpg" border="0" width="100" /></div></a></p>
<div class="" align='center'><b>Project Kensho OVF Tool Advanced Features</b></div>
</td>
<td class="confluenceTd"  valign="top">
<p><a href="http://www.citrix.com/tv/#video/971"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/image14.jpg" border="0" width="100" /></div></a></p>
<div class="" align='center'><b>Project Kensho and Hyper-V</b></div>
</td></tr></tbody></table>
<p><br clear="all" /></p>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Useful Reference</font></h3></div>

<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd"  valign="top">
<p><a href="http://community.citrix.com/download/attachments/45810048/WhatisOVF.pdf"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/ProjectKensho.gif" border="0" width="80" /></div></a> </p>
<div class="" align='center'><b>What is OVF?</b></div>
</td>
<td class="confluenceTd"  valign="top">
<p><a href="http://community.citrix.com/download/attachments/45810048/Kensho+OVF+Technology.pdf"><div align="center"><img src="http://community.citrix.com/download/attachments/45810048/ProjectKensho.gif" border="0" width="80" /></div></a> </p>
<div class="" align='center'><b>Kensho OVF Technology</b></div>

<div class="" align='justify'></div>
</td></tr></tbody></table>
<p><br clear="all" /></p>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">How It Works</font></h3></div>
<p>Project Kensho consists of the following components:<br/>
An <b>OVF Tool</b> , which utilizes the OVF standard for the creation and consumption of virtual appliance packages.   This utility removes much of the complexities found in conversion and packaging tools.  </p>

<p>A <b>CIM interface</b> to the XenServer™ API, which also adds a WSMAN interface to XenServer™. <b>The Xen-CIM component is required by the Project Kensho OVF Tool</b> and installs directly on the XenServer™. It can also be used as an interface for management of XenServer™ and XenServer™ hosted virtual machines.</p>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">What's New?</font></h3>
</div>
<p>Project Kensho 1.3 brings a wealth of powerfully simple features to both the Kensho OVF Tool and the CIM interface.  These new features enable users to both manage a XenServer™ in new ways as well as reap the benefits of OVF in a XenServer™ and Hyper-V environment.</p>

<h4><a name="Kensho-KenshoOVFTool"></a>Kensho OVF Tool</h4>
<ul>
	<li>Compliant with the DMTF OVF 1.0.0 specification</li>
	<li>Compatibility with XenConvert 2.0 OVF content</li>
	<li>Support for importing into and exporting from a user defined XenServer Storage Repository (SR)</li>
	<li>OVF security features:
	<ul>
		<li>Encryption</li>
		<li>Digital signing</li>
	</ul>
	</li>
	<li>OVF compression</li>
	<li>Snapshot support</li>
	<li>Direct import of VMware OVF content simplifying migration and consumption of VMware content</li>
</ul>


<h4><a name="Kensho-XenServerCIMInterface"></a>XenServer-CIM Interface</h4>
<ul>
	<li>Support for XenServer™ 5.5</li>
	<li>Storage profile support</li>
	<li>Networking profile support</li>
	<li>Snapshot classes</li>
</ul>


<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Project Kensho System Requirements</font></h3>
</div>

<p>The minimum environment to use the tools consists of:  Project Kensho OVF Tool Host, a supported virtual machine host, and a Windows SMB share.  Project Kensho requires the following services and software to support the components of the Project Kensho OVF Tool.</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> <b>Software</b> </th>
<th class='confluenceTh'> <b>Description</b> </th>
</tr>
<tr>
<td class='confluenceTd'> Project Kensho OVF Tool Host </td>
<td class='confluenceTd'> Project Kensho OVF Tool requires a personal computer running Windows XP, Vista or Windows Server 2003 or 2008.  Windows 7 and Windows Server 2008 R2 support is experimental. </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenServer™ </td>
<td class='confluenceTd'> Citrix XenServer™ 5.0 or 5.5 is required for creating and consuming OVF based virtual appliances using XenServer™ and management of the XenServer™ environment via the Common Information Model (CIM).   <br clear="all" />
<br clear="all" />
The Project Kensho XenServer™ CIM installation utility provides support for management of the XenServer™ through the standards based CIM interface.  It also contains a configuration script to create an ISO storage repository and creates a helper VM template for the Project Kensho OVF Tool.</td>
</tr>
<tr>
<td class='confluenceTd'> Windows Server 2008 with Hyper-V </td>
<td class='confluenceTd'> The Project Kensho OVF Tool supports Windows Server 2008 with the Hyper-V Role for importing and exporting OVF based virtual appliances. <br clear="all" />
<br clear="all" />
Communication between the Project Kensho OVF Tool and the Windows Server occurs through WinRM. Windows Server 2008 installs WinRM by default, no additional installation is required. <br clear="all" /></td>
</tr>
<tr>
<td class='confluenceTd'> Windows Server SMB File Share </td>
<td class='confluenceTd'> The Project Kensho OVF Tool requires a Windows based UNC share to import and export OVF packages. This is called the Kensho (or OVF) Library. <br clear="all" />
The share must be accessible from the Project Kensho OVF Tool as well as any virtual machine hosts targeted for import or export. </td>
</tr>
</tbody></table>

<h4><a name="Kensho-"></a><font color="#00549f">Prerequisites</font></h4>

<p>Complete the following pre-installation tasks before installing Project Kensho components:</p>
<ol>
	<li>Read through this entire document</li>
	<li>Read through the Project Kensho OVF Tool Readme</li>
	<li>Setup a Windows file share:
	<ol>
		<li>Create a file share from a Windows host
		<ol>
			<li>Windows Server 2008 with the File Services Role provides the option of creating SMB or NFS based shares, be sure to select SMB.</li>
			<li>Windows Server 2003 and prior create SMB based shares by default.</li>
		</ol>
		</li>
		<li>Obtain a user account and password that has change level access to this share.</li>
	</ol>
	</li>
	<li>Project Kensho OVF Tool Host:
	<ol>
		<li>Windows XP, Windows Server 2003, or Windows Vista.</li>
		<li>Install .NET Framework version 3.5</li>
		<li>Install WinRM</li>
	</ol>
	</li>
	<li>XenServer™ Host:
	<ol>
		<li>XenServer™ 5.0 or 5.5</li>
	</ol>
	</li>
	<li>Windows Server 2008 with Hyper-V Host
	<ol>
		<li>Add the Hyper-V role</li>
	</ol>
	</li>
</ol>


<h2><a name="Kensho-%26nbsp%3B"></a>&nbsp;</h2>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Install</font></h3>
</div>

<h4><a name="Kensho-XenServerCIMInterfaceInstallation"></a><b>XenServer-CIM Interface Installation</b></h4>

<p>To install the XenServer-CIM Interface on XenServer™, complete the following procedure:</p>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Be Careful</b><br />
<p>The install script creates a hidden ISO Storage Repository and copies two ISOs into it (xenserver-linuxfixup-disk.iso and xenserver-iscsi-target.iso). It also creates a helper VM template called 'iSCSI target' from xenserver-iscsi-target.iso. These are utilized by the Project Kensho OVF Tool.  Do not remove, alter or add content to this storage repository.</p></td></tr></table></div>

<ol>
	<li>Copy XenServerCIM-Install.tgz to the XenServer™ host to the path of: /tmp</li>
	<li>From the XenServer™ console, execute the following:
	<ol>
		<li><b>cd /tmp</b></li>
		<li><b>tar &#45; xvzf XenServer-CIM.tgz</b></li>
		<li><b>cd /XenServer-CIM</b></li>
		<li>Install the XenServer-CIM and WSMAN providers:
		<ol>
			<li><b>bash ./install.sh</b></li>
			<li>Answer the prompt to set the security level of the interface.</li>
		</ol>
		</li>
	</ol>
	</li>
</ol>


<h4><a name="Kensho-ProjectKenshoOVFToolInstallation"></a><b>Project Kensho OVF Tool Installation</b></h4>

<ol>
	<li>From the computer identified as the Project Kensho OVF Tool computer:
	<ol>
		<li>Execute <b>KenshoOVF_x86.msi</b> or <b>KenshoOVF_x64.msi</b></li>
		<li>Follow the prompts</li>
	</ol>
	</li>
</ol>


<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The Project Kensho OVF Tool installer must execute via "run as administrator" option on Vista, Windows Server 2008, Windows 7 and Windows Server 2008 R2.</p></td></tr></table></div>

<h4><a name="Kensho-WindowsServer2008withHyperVConfiguration"></a><b>Windows Server 2008 with</b> <b>Hyper-V Configuration</b></h4>
<p>These steps enable WinRM, modify the Windows Firewall rules and set the appropriate authorization to access WinRM remotely with Kensho OVF Tool.</p>
<ol>
	<li>At the Hyper-V host login as the administrator</li>
	<li>Open a command prompt and execute the following commands:
	<ol>
		<li><b>winrm quickconfig</b></li>
		<li><b>winrm p winrm/config/service @{AllowUnencrypted="true"}</b></li>
		<li><b>winrm p winrm/config/service/auth @{Basic="true"}</b></li>
		<li><b>winrm p winrm/config/client @{AllowUnencrypted="true"}</b></li>
		<li><b>winrm p winrm/config/client/auth @{Basic="true"}</b></li>
	</ol>
	</li>
</ol>



<h3><a name="Kensho-%26nbsp%3B"></a>&nbsp;</h3>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Uninstall</font></h3>
</div>

<h4><a name="Kensho-XenServerCIMInterfaceUninstallProcess"></a><b>XenServer-CIM Interface Uninstall Process</b></h4>

<ol>
	<li>To uninstall the XenServer-CIM and WSMAN providers
	<ol>
		<li><b>bash ./uninstall.sh</b>
		<ol>
			<li>If an ISO image is added to the ISO storage repository, answer the prompt to delete the 'XenServer Internal ISO library'</li>
			<li>If confirmed, the script deletes the hidden internal ISO storage repository created during install. All ISO images added into this storage repository will be deleted.</li>
		</ol>
		</li>
	</ol>
	</li>
</ol>


<h4><a name="Kensho-ProjectKenshoOVFToolUninstallProcess"></a><b>Project Kensho OVF Tool Uninstall Process</b></h4>

<ol>
	<li>To uninstall Project Kensho OVF Tool:
	<ol>
		<li>Open Add / Remove Programs (or Programs)</li>
		<li>Select the Project Kensho OVF Tool</li>
		<li>Select Remove</li>
	</ol>
	</li>
</ol>


<h3><a name="Kensho-%26nbsp%3B"></a>&nbsp;</h3>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="Kensho-"></a><font color="#00549f">Project Kensho Administration</font></h3>
</div>
<p>This section covers general administration and use of the XenServer CIM interface for XenServer™ and the Project Kensho OVF Tool.</p>

<h4><a name="Kensho-XenServerCIMInterface"></a><b>XenServer-CIM Interface</b></h4>

<p>Once installed, the XenServer-CIM interface requires no administration. Documentation is provided within the distribution that further describes using the interface and its options.</p>

<h4><a name="Kensho-ProjectKenshoOVFTool"></a><b>Project Kensho OVF Tool</b></h4>

<p>The Project Kensho OVF Tool is the primary utility to create and consume OVF virtual appliances. When starting the utility, an initialization process occurs.  This process gathers all of the library and server information from the systems defined by the user.  In some scenarios, initialization may take up to 60 seconds or more to collect all data.</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image1.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 1 &#45; Initializing Indicator</b></font></p>

<p>After completing initialization, the main UI appears</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image2.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 2 &#45; Project Kensho OVF Tool</b></font></p>

<h4><a name="Kensho-AddingvirtualmachineHost%28s%29andOVFLibraryResources%3A"></a><b>Adding virtual machine Host(s) and OVF Library Resources:</b></h4>
<p>To begin using the utility, it is necessary to add at least one virtual machine host and an OVF Library.  To add a virtual machine host or Library share:</p>

<p>1.&nbsp;&nbsp; From the menu bar, select <b>File &gt; Add Server</b>.  Alternatively, pressing the hotkey combination <b>Alt &#43;A</b> or clicking the Add Server icon <img src="http://community.citrix.com/download/attachments/45810048/addhost_16.jpg" align="absmiddle" border="0" /> on the toolbar invokes the Add Server configuration window.</p>

<p>2.&nbsp;&nbsp; Select the platform type from the drop down menu:</p>

<table class='confluenceTable'><tbody>
<tr>
<td class='confluenceTd'> <img src="http://community.citrix.com/download/attachments/45810048/image3.jpg" align="absmiddle" border="0" /> </td>
<td class='confluenceTd'><ul>
	<li><b>For a Library</b> :
	<ol>
		<li>Enter the server name (or IP address)</li>
		<li>Enter the share name (without slashes or subfolders)</li>
		<li>Enter the username and password</li>
		<li>Click <b>Add</b> .</li>
	</ol>
	</li>
</ul>
</td>
</tr>
<tr>
<td class='confluenceTd'> <font color="#4f81bd"><b>Figure 3 &#45; Adding a Library Server</b></font> </td>
</tr>
<tr>
<td class='confluenceTd'> <img src="http://community.citrix.com/download/attachments/45810048/image4.jpg" align="absmiddle" border="0" /> </td>
<td class='confluenceTd'><ul>
	<li><b>For a virtual machine host:</b>
	<ol>
		<li>Enter the server name (or IP address)</li>
		<li>Select the Host server protocol: Unsecure or Secure (HTTP/HTTPS)</li>
		<li>Enter the username and password</li>
		<li>Click <b>Add</b></li>
	</ol>
	</li>
</ul>
</td>
</tr>
<tr>
<td class='confluenceTd'> <font color="#4f81bd"><b>Figure 4 &#45; Adding a XenServer™ Host</b></font> </td>
</tr>
</tbody></table>

<p>3. &nbsp;The window will stay open after clicking the <b>Add</b> button. Repeat this process for each hypervisor and or library the Project Kensho OVF Tool will manage. Click the <b>Close</b> button when finished adding all servers.</p>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>When adding a Hyper V server the account used must be a member of the local Hyper-V host administrators group.</p></td></tr></table></div>

<h4><a name="Kensho-CreatingaVirtualAppliance"></a><b>Creating a Virtual Appliance</b></h4>
<p>After configuring a library and virtual machine host(s), the Project Kensho OVF Tool is ready to create a virtual appliance from one or more virtual machines.  The virtual appliance will become an OVF package.  The virtual appliance is exported from either a XenServer™ or Hyper-V host.</p>

<p>To export a virtual machine as an OVF virtual appliance, follow these easy steps:</p>

<p>1.&nbsp;&nbsp; Select the Export Tab</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image5.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 5 &#45; Export Tab</b></font></p>

<p>2.&nbsp;&nbsp; Select the target library share from the Library tree view. This is where the OVF and associated VHD(s) will reside after export.</p>

<p>3.&nbsp;&nbsp; From the tree view, expand the list of virtual machines under each virtual machine host.</p>

<p>4.&nbsp;&nbsp; Select a virtual machine with a single click. This will place its qualified name into the <em>Selected vMachine(s)</em> list box. To remove the selection, double click the selection.</p>
<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/warning.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Be Aware</b><br />
<p>There is no limit to the number of virtual machines to select for export. The more virtual machines selected, the longer the export will take and require more storage on the Library server.  The amount of time to export per virtual machine is dependent on the virtual disk size, type, and network bandwidth between the virtual machine host and the library server.</p></td></tr></table></div>
<p>5.&nbsp;&nbsp; Click the Export button to begin.  The result will be the OVF virtual appliance package containing the virtual machine(s) selected.  It is important to enusre that  the OVF package is tested before assuming it is good.  The next section describes the import process.</p>


<h4><a name="Kensho-ConsumingaVirtualAppliance"></a><b>Consuming a Virtual Appliance</b></h4>
<p>The Project Kensho OVF Tool can consume any DMTF compliant OVF file that contains virtual machine disk(s) in the VHD or VMDK format.  The virtual appliance is imported into either a XenServer™ or Hyper-V host.</p>

<p>To import an OVF virtual appliance, follow these easy steps:</p>

<p>1.&nbsp;&nbsp; Select the Import Tab.</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image6.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd">*Figure 6 &#45; Import Tab</font></p>

<p>2.&nbsp;&nbsp; Select the target virtual machine host or hosts from the respective Host type tree view.</p>

<p>3.&nbsp;&nbsp; From the Kensho Library tree view, select an OVF virtual appliance.</p>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>OVA packages must be converted to OVF prior to Import. Please see: Converting an OVF package to an OVA for more information.</p></td></tr></table></div>

<p>4.&nbsp;&nbsp; If a virtual machine to host resource mapping is required - it is noted in the Mapping status field as Mapping: Required.</p>

<p>5.&nbsp;&nbsp; Click the Mapping wizard button <img src="http://community.citrix.com/download/attachments/45810048/newvirtualnetwork_32.jpg" align="absmiddle" border="0" /> in the Tool bar to map virtual machine to host resources.</p>

<p>6.&nbsp;&nbsp; Click the <b>Import</b> or <b>Force</b> button to begin the import.</p>
<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The button will display <b>Force</b> if mapping is either incomplete or non-existent.</p></td></tr></table></div>
<p>During a forced import devices are attached in a first found fashion. I.E. if the OVF has a network device defined on the VM an attempt will be made to attach that network to the first virtual network switch listed on the target host.</p>


<h4><a name="Kensho-AdvancedPackagingCapabilities"></a><b>Advanced Packaging Capabilities</b></h4>
<p>New to the Project Kensho 1.3 OVF Tool is support for a wide range of OVF virtual appliance packaging options.  When selecting one or more VMs to export as a virtual appliance, the utility presents the following options:</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image7.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 7 &#45; Export Options</b></font></p>

<p>Each option is unique and may be applied to any virtual appliance export.  Selecting a check box enables the feature.  Some features, like security options, require user input.  </p>

<ul>
	<li><b>Create OVA Package</b><br/>
Selecting this option allows the user to create an OVA package.  An OVA package is an archive containing OVF metadata, virtual disks, manifest and certificates in a single file.   This feature is useful for scenarios where a single file containing all the necessary virtual machine components is desired.  This option produces a file with an .ova extension.  If a file inside of the OVF package is greater than 8 GB, the operation to create the OVA will fail.</li>
</ul>


<ul>
	<li><b>Compress OVA Package</b><br/>
Selecting this option allows the user to compress the entire OVA package.  To enable this option, the user must select the Create OVA Package option.  This option is useful when the user seeks to reduce the overall file size of the of the OVA package.  This option produces a file with the .ova.gz extension.</li>
</ul>


<ul>
	<li><b>Compress OVF Files Individually</b><br/>
Selecting this option allows the user to compress the individual files within the OVA package.  This differs from the option above in that each file within the OVA package is compressed.  Selecting this option allows the user to achieve maximum compression of an OVA file.  This option produces files within the OVA package with the .gz extension.  The OVA package will have the .ova extension.</li>
</ul>


<ul>
	<li><b>Add Manifest</b><br/>
Selecting this option instructs the Project Kensho OVF Tool to create a manifest file referencing the OVF files and their checksum.  This option is useful when a user seeks improved reliability of the content.  This option produces a file with the .mf extension.</li>
</ul>


<ul>
	<li><b>Encrypt Attached Files</b><br/>
Selecting this option allows the user to encrypt the OVF related files.  When selecting this option, the user must enter a passphrase.  This option is useful when protecting appliance content is required.</li>
</ul>


<ul>
	<li><b>Sign OVF Package</b><br/>
Selecting this option allows the user to digitally sign the OVF file with a certificate.  This option is useful in providing security against unauthorized changes to the OVF file content.  </li>
</ul>


<ul>
	<li><b>Include EULA(s)</b><br/>
Selecting this option allows the user to create a virtual appliance with an End User License Agreement (EULA).  This feature is useful when a virtual appliance requires end user agreement to a EULA before the virtual appliance installs on the target hypervisor.  To add a EULA follow these directions:</li>
</ul>


<p>1.&nbsp;&nbsp; Click the Add EULA button</p>

<p>2.&nbsp;&nbsp; Browse to the desired text file containing the EULA text.</p>

<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The EULA must be a plain text file and cannot contain any formatting (such as HTML tags) or special characters.</p></td></tr></table></div>

<p>3.&nbsp;&nbsp; Select the EULA text file. </p>

<p>4.&nbsp;&nbsp; Click Open</p>

<ul>
	<li><b>Export Metadata Only</b><br/>
Selecting this option allows the user to create an OVF without any virtual disk(s).  This is useful when the user needs an OVF without virtual disk information.</li>
</ul>



<h4><a name="Kensho-AdvancedImportCapabilities"></a><b>Advanced Import Capabilities</b></h4>
<p>New to the Project Kensho 1.3 OVF Tool is support for a range of OVF virtual appliance import options.  When selecting one or more OVF virtual appliances to import, the utility presents the following options:</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image8.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 8 &#45; Import Options</b></font></p>

<ul>
	<li><b>Verify Digital Signature</b><br/>
Selecting this option forces the import process to verify the digital signature that was used to sign the OVF during export.  If the verification fails, this typically indicates that the OVF has been tampered with.</li>
</ul>


<ul>
	<li><b>Verify Manifest Content</b><br/>
Selecting this option forces the import process to verify that the content of the manifest file matches what is in the OVF package.  If this verification fails, it typically indicates that files are missing.</li>
</ul>


<ul>
	<li><b>Validate OVF Package</b><br/>
Selecting this option forces the import process to validate the selected OVF file against the DMTF OVF 1.0.0 schema.  This is useful to determine the compatibility of an OVF file.</li>
</ul>


<ul>
	<li><b>Import Metadata Only</b><br/>
Selecting this option imports the metadata only.  This is useful if configuration content is all that is needed.  The virtual machine content will be created from a template or an existing virtual disk will be attached after import. </li>
</ul>


<ul>
	<li><b>Run Operating System Fixups</b><br/>
Selecting this option runs automated scripts against the imported VMware based virtual appliance.  This is necessary to ensure the VM boots properly.  Select this option for Windows or Linux virtual machines imported from VMware sources.  Fixup of virtual machines with more than two virtual disks is unsupported.</li>
</ul>



<h4><a name="Kensho-VMtoHostResourceMappingWizard"></a><b>VM to Host Resource Mapping Wizard</b></h4>

<p>The Project Kensho OVF Tool allows users to map system, storage, and networking resources defined in the OVF virtual appliance to the resources on the virtual machine host(s).  This ensures that prior to import, the proper resources are paired and the virtual machine can power on minimizing administrative tasks.  </p>

<p>Mapping is performed by selecting items (one or more) in the left column of the Mapping dialog and then selecting a target device in the right</p>

<p>The padlock icon <img src="http://community.citrix.com/download/attachments/45810048/image007.jpg" align="absmiddle" border="0" /> depicts that a mapping of a VM device to Host resource has been set. Individual mappings may be cleared by selecting and clearing the lock icon.</p>

<p>An existing OVF to Host resource mapping may be cleared by clicking the <b>Clear</b> button on the Import tab.</p>

<p>1.&nbsp;&nbsp; Begin the resource mapping process by Clicking the Mapping button <img src="http://community.citrix.com/download/attachments/45810048/newvirtualnetwork_32.jpg" align="absmiddle" border="0" /> in the Tool bar</p>

<p>2.&nbsp;&nbsp; The mapping wizard launches and presents the Systems tab (this is the target Host for a VM workload).</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image9.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 9 &#45; Unmapped VM CPU and memory workload</b></font></p>

<p>3.&nbsp;&nbsp;Select the desired host resource in the right pane</p>

<p>4.&nbsp;&nbsp;Select a VM resource(s) in the left pane</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image10.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd">8Figure 10 &#45; VM CPU and memory workload mapped Host*</font></p>

<p>5.&nbsp;&nbsp;Click the <b>Next</b> button to map the Network resources.</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image11.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd">*Figure 11 &#45; Mapped VM Network Device to Hypervisor Network Device</font></p>

<p>6.&nbsp;&nbsp; Select the desired host resource in the right pane</p>

<p>7.&nbsp;&nbsp; Select a VM resource(s) in the left pane</p>

<p>8.&nbsp;&nbsp; Click the <b>Next</b> button to map the Storage resources</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image12.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 12 &#45; Mapped VM Storage to Hypervisor Storage</b></font></p>

<p>9. &nbsp;&nbsp; Select the desired host resource in the right pane</p>

<p>10.&nbsp;&nbsp; Select a VM resource(s) in the left pane</p>

<p>11. &nbsp; Click <b>Done</b> to complete the wizard, save the mapping, and return to the Import screen.</p>

<h4><a name="Kensho-ConvertinganOVFpackagetoanOVAandviceversa"></a><b>Converting an OVF package to an OVA and vice versa</b></h4>
<p>The Project Kensho OVF Tool facilitates the conversion of any DMTF compliant OVF export to a single OVA file.</p>

<p>To convert an OVF with the Project Kensho OVF Tool:</p>

<p>1.&nbsp;&nbsp; Select the Import Tab</p>

<p><img src="http://community.citrix.com/download/attachments/45810048/image13.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 13 &#45; OVA Menu</b></font></p>

<p>2.&nbsp;&nbsp; From the Kensho Library, select an OVF.</p>

<p>3.&nbsp;&nbsp; Right click the OVF and Select 'Convert to OVA'</p>

<p>4.&nbsp;&nbsp; The reverse process is used to convert an OVA into an OVF.</p>

<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>Note</b><br />
<p>The OVF icon <img src="http://community.citrix.com/download/attachments/45810048/image013.jpg" align="absmiddle" border="0" height="26" width="26" /> depicts a folder that includes the OVF package configuration and associated file.<br/>
The OVA icon <img src="http://community.citrix.com/download/attachments/45810048/image014.jpg" align="absmiddle" border="0" height="26" width="26" /> indicates an OVF package that has been compressed, using tar format, into a single file with the extension .OVA<br/>
The X icon <img src="http://community.citrix.com/download/attachments/45810048/error_16.jpg" align="absmiddle" border="0" height="22" width="22" /> indicates an OVF package that is not compliant with the DMTF Standards.</p></td></tr></table></div>

<h4><a name="Kensho-EnvironmentTab"></a><b>Environment Tab</b></h4>
<p>The environment tab is a read-only view of the virtual machine host resources and environment.<br/>
<img src="http://community.citrix.com/download/attachments/45810048/image14.jpg" align="absmiddle" border="0" /><br/>
<font color="#4f81bd"><b>Figure 14 &#45; Environment Tab</b></font></p>

<h3><a name="Kensho-"></a><font color="#00549f">VMware OVF Support</font></h3>

<p>The Project Kensho OVF Tool facilitates importing VMware derived OVF content directly into a XenServer Storage Repository in the same manner as importing a XenConvert or Project Kensho produced OVF.  </p>

<p>It is important to note that not all VMware OVF content is equal.  VMware OVF content produced through the latest VMware utilities will result in a higher degree of import success.  The following VMware OVF content has been successfully tested:</p>

<ul>
	<li>vSphere 4</li>
	<li>Virtual Infrastructure 3</li>
	<li>VMware OVF Tool 0.9</li>
	<li>VMware OVF Tool 1.0</li>
	<li>VMware Studio 1.0</li>
	<li>VMware Workstation 6.5.3</li>
	<li>VMware Converter 4.0.x</li>
	<li>VMware Converter 3.0.3</li>
</ul>



<h3><a name="Kensho-"></a><font color="#00549f">Snapshot Support</font></h3>

<p>The Project Kensho OVF Tool now supports creating virtual appliances from virtual machines with snapshots. Both XenServer 5.5 and Hyper-V support virtual machine snapshots.  </p>

<p>When creating an OVF virtual appliance from a virtual machine with a snapshot, the current running state of the virtual machine is what the tool creates as a virtual appliance.  This can also be described as the state that is experienced when the virtual machine is powered on. </p>

<p>If a virtual machine contains multiple snapshots, only the current running state of the virtual machine is exported.  No snapshot history or detail is exported as part of the virtual appliance</p>


    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/Kensho">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/Kensho?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/Kensho?pageVersion=89">revision 89</a>
            and <a href="http://community.citrix.com/display/xs/Kensho">revision 90</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h1. Project Kensho v1.3 Technology Preview</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{anchor:OLE_LINK1} {anchor:OLE_LINK2}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column:width=67%}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">h3. {color:#00549f}Breaking News{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffadded">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffadded">Kensho OVF technology is now available from within XenServer 5.6.  We still take feed back and provide limited support for the Project Kensho OVF Tool 1.3's Hyper-V functionality.  Bring your issues and comments to the forum.  We'd love to hear from you.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffadded">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffadded">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffadded">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}Introduction{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Simplicity is Power.  Simplicity is Project Kensho.  Citrix Project Kensho provides users with powerfully simple tools that facilitate the export and import of virtual machines and virtual machine based workloads (virtual appliances) using the Open Virtual Machine Format (OVF) and Common Information Model (CIM) industry standards developed by the Distributed Management Task Force's (DMTF) Virtualization Management Initiative (VMAN).</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool utilizes the OVF standard for the creation and consumption of virtual appliance packages.  The Open Virtual Machine Format describes the metadata of virtual machine(s) and the behavior of the appliance when consumed by the hypervisor.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Citrix Project Kensho also provides a CIM interface to the XenServer™ API and introduces a WSMAN interface to XenServer™.&amp;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column} [!button3.png!|http://download.citrix.com/English/ss/downloads/details.asp?downloadId=1682855&amp;productId=683148]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*MyCitrix login required for download*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *&amp;nbsp; Resources*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp; [!btn_search.png! *Discuss in Forum*|http://forums.citrix.com/forum.jspa?forumID=780]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}Featured Videos{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[!Kensho.png|align=centre,width=100,heigh=72!|http://www.citrix.com/tv/#video/956] </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align:center}*Installing the Project Kensho OVF Tool*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[!cim.png|align=centre,width=100,heigh=72!|http://www.citrix.com/tv/#video/963] </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align:center}*Installing XenServer CIM Interfaces*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[!cim.jpg|align=centre,width=100,heigh=72!|http://www.citrix.com/tv/#video/965]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align:center}*Using the Project Kensho OVF Tool*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[!image13.jpg|align=centre,width=100,heigh=60!|http://www.citrix.com/tv/#video/1006]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align:center}*Project Kensho OVF Tool Advanced Features*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[!image14.jpg|align=centre,width=100,heigh=60!|http://www.citrix.com/tv/#video/971]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align:center}*Project Kensho and Hyper-V*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}Useful Reference{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[!ProjectKensho.gif|align=centre,width=80,heigh=40!|http://community.citrix.com/download/attachments/45810048/WhatisOVF.pdf] </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align:center}*What is OVF?*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[!ProjectKensho.gif|align=centre,width=80,heigh=40!|http://community.citrix.com/download/attachments/45810048/Kensho+OVF+Technology.pdf] </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align:center}*Kensho OVF Technology*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{align}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}How It Works{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Project Kensho consists of the following components:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">An *OVF Tool* , which utilizes the OVF standard for the creation and consumption of virtual appliance packages.   This utility removes much of the complexities found in conversion and packaging tools.  </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">A *CIM interface* to the XenServer™ API, which also adds a WSMAN interface to XenServer™. *The Xen-CIM component is required by the Project Kensho OVF Tool* and installs directly on the XenServer™. It can also be used as an interface for management of XenServer™ and XenServer™ hosted virtual machines.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}What's New?{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Project Kensho 1.3 brings a wealth of powerfully simple features to both the Kensho OVF Tool and the CIM interface.  These new features enable users to both manage a XenServer™ in new ways as well as reap the benefits of OVF in a XenServer™ and Hyper-V environment.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. Kensho OVF Tool</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Compliant with the DMTF OVF 1.0.0 specification</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Compatibility with XenConvert 2.0 OVF content</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Support for importing into and exporting from a user defined XenServer Storage Repository (SR)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	OVF security features:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	**    Encryption</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	**    Digital signing</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	OVF compression</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Snapshot support </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Direct import of VMware OVF content simplifying migration and consumption of VMware content</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. XenServer-CIM Interface</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Support for XenServer™ 5.5</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Storage profile support</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Networking profile support</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Snapshot classes</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}Project Kensho System Requirements{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The minimum environment to use the tools consists of:  Project Kensho OVF Tool Host, a supported virtual machine host, and a Windows SMB share.  Project Kensho requires the following services and software to support the components of the Project Kensho OVF Tool.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">|| *Software* || *Description* ||</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Project Kensho OVF Tool Host | Project Kensho OVF Tool requires a personal computer running Windows XP, Vista or Windows Server 2003 or 2008.  Windows 7 and Windows Server 2008 R2 support is experimental. |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Citrix XenServer™ | Citrix XenServer™ 5.0 or 5.5 is required for creating and consuming OVF based virtual appliances using XenServer™ and management of the XenServer™ environment via the Common Information Model (CIM).   \\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho XenServer™ CIM installation utility provides support for management of the XenServer™ through the standards based CIM interface.  It also contains a configuration script to create an ISO storage repository and creates a helper VM template for the Project Kensho OVF Tool.|</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Windows Server 2008 with Hyper-V | The Project Kensho OVF Tool supports Windows Server 2008 with the Hyper-V Role for importing and exporting OVF based virtual appliances. \\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Communication between the Project Kensho OVF Tool and the Windows Server occurs through WinRM. Windows Server 2008 installs WinRM by default, no additional installation is required. \\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Windows Server SMB File Share | The Project Kensho OVF Tool requires a Windows based UNC share to import and export OVF packages. This is called the Kensho (or OVF) Library. \\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The share must be accessible from the Project Kensho OVF Tool as well as any virtual machine hosts targeted for import or export. |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. {color:#00549f}Prerequisites{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Complete the following pre-installation tasks before installing Project Kensho components:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Read through this entire document</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Read through the Project Kensho OVF Tool Readme</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Setup a Windows file share:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Create a file share from a Windows host</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">### Windows Server 2008 with the File Services Role provides the option of creating SMB or NFS based shares, be sure to select SMB.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">### Windows Server 2003 and prior create SMB based shares by default.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Obtain a user account and password that has change level access to this share.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Project Kensho OVF Tool Host:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Windows XP, Windows Server 2003, or Windows Vista.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Install .NET Framework version 3.5</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Install WinRM</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># XenServer™ Host:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## XenServer™ 5.0 or 5.5</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Windows Server 2008 with Hyper-V Host</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Add the Hyper-V role</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. &amp;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}Install{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *XenServer-CIM Interface Installation*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">To install the XenServer-CIM Interface on XenServer™, complete the following procedure:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{note:title=Be Careful}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The install script creates a hidden ISO Storage Repository and copies two ISOs into it (xenserver-linuxfixup-disk.iso and xenserver-iscsi-target.iso). It also creates a helper VM template called 'iSCSI target' from xenserver-iscsi-target.iso. These are utilized by the Project Kensho OVF Tool.  Do not remove, alter or add content to this storage repository.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Copy XenServerCIM-Install.tgz to the XenServer™ host to the path of: /tmp</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># From the XenServer™ console, execute the following:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## *cd /tmp*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## *tar \- xvzf XenServer-CIM.tgz*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## *cd /XenServer-CIM*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Install the XenServer-CIM and WSMAN providers:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">### *bash ./install.sh*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">### Answer the prompt to set the security level of the interface.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Project Kensho OVF Tool Installation*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># From the computer identified as the Project Kensho OVF Tool computer:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Execute *KenshoOVF_x86.msi* or *KenshoOVF_x64.msi*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Follow the prompts</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info:title=Note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool installer must execute via &quot;run as administrator&quot; option on Vista, Windows Server 2008, Windows 7 and Windows Server 2008 R2.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Windows Server 2008 with* *Hyper-V Configuration*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">These steps enable WinRM, modify the Windows Firewall rules and set the appropriate authorization to access WinRM remotely with Kensho OVF Tool.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># At the Hyper-V host login as the administrator</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Open a command prompt and execute the following commands:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">##	*winrm quickconfig*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">##	*winrm p winrm/config/service @\{AllowUnencrypted=&quot;true&quot;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">##	*winrm p winrm/config/service/auth @\{Basic=&quot;true&quot;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">##	*winrm p winrm/config/client @\{AllowUnencrypted=&quot;true&quot;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">##	*winrm p winrm/config/client/auth @\{Basic=&quot;true&quot;\}*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. &amp;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}Uninstall{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *XenServer-CIM Interface Uninstall Process*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># To uninstall the XenServer-CIM and WSMAN providers</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## *bash ./uninstall.sh*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">### If an ISO image is added to the ISO storage repository, answer the prompt to delete the 'XenServer Internal ISO library'</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">### If confirmed, the script deletes the hidden internal ISO storage repository created during install. All ISO images added into this storage repository will be deleted.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Project Kensho OVF Tool Uninstall Process*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># To uninstall Project Kensho OVF Tool:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Open Add / Remove Programs (or Programs)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Select the Project Kensho OVF Tool</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">## Select Remove</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. &amp;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}Project Kensho Administration{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">This section covers general administration and use of the XenServer CIM interface for XenServer™ and the Project Kensho OVF Tool.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *XenServer-CIM Interface*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Once installed, the XenServer-CIM interface requires no administration. Documentation is provided within the distribution that further describes using the interface and its options.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Project Kensho OVF Tool*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool is the primary utility to create and consume OVF virtual appliances. When starting the utility, an initialization process occurs.  This process gathers all of the library and server information from the systems defined by the user.  In some scenarios, initialization may take up to 60 seconds or more to collect all data.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image1.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 1 \- Initializing Indicator*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">After completing initialization, the main UI appears</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image2.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 2 \- Project Kensho OVF Tool*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Adding virtual machine Host(s) and OVF Library Resources:*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">To begin using the utility, it is necessary to add at least one virtual machine host and an OVF Library.  To add a virtual machine host or Library share:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">1.&amp;nbsp;&amp;nbsp; From the menu bar, select *File &gt; Add Server*.  Alternatively, pressing the hotkey combination *Alt \+A* or clicking the Add Server icon !addhost_16.jpg! on the toolbar invokes the Add Server configuration window.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">2.&amp;nbsp;&amp;nbsp; Select the platform type from the drop down menu:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| !image3.jpg! | * *For a Library* :</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Enter the server name (or IP address)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Enter the share name (without slashes or subfolders)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Enter the username and password</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Click *Add* . |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| {color:#4f81bd}*Figure 3 \- Adding a Library Server*{color} |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| !image4.jpg! | * *For a virtual machine host:*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Enter the server name (or IP address)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Select the Host server protocol: Unsecure or Secure (HTTP/HTTPS)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Enter the username and password</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*# Click *Add* |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| {color:#4f81bd}*Figure 4 \- Adding a XenServer™ Host*{color} |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">3. &amp;nbsp;The window will stay open after clicking the *Add* button. Repeat this process for each hypervisor and or library the Project Kensho OVF Tool will manage. Click the *Close* button when finished adding all servers.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info:title=Note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">When adding a Hyper V server the account used must be a member of the local Hyper-V host administrators group.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Creating a Virtual Appliance*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">After configuring a library and virtual machine host(s), the Project Kensho OVF Tool is ready to create a virtual appliance from one or more virtual machines.  The virtual appliance will become an OVF package.  The virtual appliance is exported from either a XenServer™ or Hyper-V host.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">To export a virtual machine as an OVF virtual appliance, follow these easy steps:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">1.&amp;nbsp;&amp;nbsp; Select the Export Tab</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image5.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 5 \- Export Tab*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">2.&amp;nbsp;&amp;nbsp; Select the target library share from the Library tree view. This is where the OVF and associated VHD(s) will reside after export.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">3.&amp;nbsp;&amp;nbsp; From the tree view, expand the list of virtual machines under each virtual machine host.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">4.&amp;nbsp;&amp;nbsp; Select a virtual machine with a single click. This will place its qualified name into the _Selected vMachine(s)_ list box. To remove the selection, double click the selection.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{note:title=Be Aware}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">There is no limit to the number of virtual machines to select for export. The more virtual machines selected, the longer the export will take and require more storage on the Library server.  The amount of time to export per virtual machine is dependent on the virtual disk size, type, and network bandwidth between the virtual machine host and the library server.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">5.&amp;nbsp;&amp;nbsp; Click the Export button to begin.  The result will be the OVF virtual appliance package containing the virtual machine(s) selected.  It is important to enusre that  the OVF package is tested before assuming it is good.  The next section describes the import process.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Consuming a Virtual Appliance*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool can consume any DMTF compliant OVF file that contains virtual machine disk(s) in the VHD or VMDK format.  The virtual appliance is imported into either a XenServer™ or Hyper-V host.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">To import an OVF virtual appliance, follow these easy steps:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">1.&amp;nbsp;&amp;nbsp; Select the Import Tab.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image6.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 6 \- Import Tab{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">2.&amp;nbsp;&amp;nbsp; Select the target virtual machine host or hosts from the respective Host type tree view.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">3.&amp;nbsp;&amp;nbsp; From the Kensho Library tree view, select an OVF virtual appliance.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info:title=Note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">OVA packages must be converted to OVF prior to Import. Please see: Converting an OVF package to an OVA for more information.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">4.&amp;nbsp;&amp;nbsp; If a virtual machine to host resource mapping is required - it is noted in the Mapping status field as Mapping: Required.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">5.&amp;nbsp;&amp;nbsp; Click the Mapping wizard button !newvirtualnetwork_32.jpg! in the Tool bar to map virtual machine to host resources.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">6.&amp;nbsp;&amp;nbsp; Click the *Import* or *Force* button to begin the import.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info:title=Note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The button will display *Force* if mapping is either incomplete or non-existent.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">During a forced import devices are attached in a first found fashion. I.E. if the OVF has a network device defined on the VM an attempt will be made to attach that network to the first virtual network switch listed on the target host.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Advanced Packaging Capabilities*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">New to the Project Kensho 1.3 OVF Tool is support for a wide range of OVF virtual appliance packaging options.  When selecting one or more VMs to export as a virtual appliance, the utility presents the following options:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image7.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 7 \- Export Options*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Each option is unique and may be applied to any virtual appliance export.  Selecting a check box enables the feature.  Some features, like security options, require user input.  </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*    *Create OVA Package*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option allows the user to create an OVA package.  An OVA package is an archive containing OVF metadata, virtual disks, manifest and certificates in a single file.   This feature is useful for scenarios where a single file containing all the necessary virtual machine components is desired.  This option produces a file with an .ova extension.  If a file inside of the OVF package is greater than 8 GB, the operation to create the OVA will fail.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*    *Compress OVA Package*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option allows the user to compress the entire OVA package.  To enable this option, the user must select the Create OVA Package option.  This option is useful when the user seeks to reduce the overall file size of the of the OVA package.  This option produces a file with the .ova.gz extension.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*    *Compress OVF Files Individually*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option allows the user to compress the individual files within the OVA package.  This differs from the option above in that each file within the OVA package is compressed.  Selecting this option allows the user to achieve maximum compression of an OVA file.  This option produces files within the OVA package with the .gz extension.  The OVA package will have the .ova extension.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*     *Add Manifest*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option instructs the Project Kensho OVF Tool to create a manifest file referencing the OVF files and their checksum.  This option is useful when a user seeks improved reliability of the content.  This option produces a file with the .mf extension.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*     *Encrypt Attached Files*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option allows the user to encrypt the OVF related files.  When selecting this option, the user must enter a passphrase.  This option is useful when protecting appliance content is required.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*     *Sign OVF Package*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option allows the user to digitally sign the OVF file with a certificate.  This option is useful in providing security against unauthorized changes to the OVF file content.  </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*     *Include EULA(s)*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option allows the user to create a virtual appliance with an End User License Agreement (EULA).  This feature is useful when a virtual appliance requires end user agreement to a EULA before the virtual appliance installs on the target hypervisor.  To add a EULA follow these directions:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">1.&amp;nbsp;&amp;nbsp; Click the Add EULA button</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">2.&amp;nbsp;&amp;nbsp; Browse to the desired text file containing the EULA text.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info:title=Note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The EULA must be a plain text file and cannot contain any formatting (such as HTML tags) or special characters.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">3.&amp;nbsp;&amp;nbsp; Select the EULA text file. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">4.&amp;nbsp;&amp;nbsp; Click Open</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*     *Export Metadata Only*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option allows the user to create an OVF without any virtual disk(s).  This is useful when the user needs an OVF without virtual disk information.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Advanced Import Capabilities*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">New to the Project Kensho 1.3 OVF Tool is support for a range of OVF virtual appliance import options.  When selecting one or more OVF virtual appliances to import, the utility presents the following options:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image8.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 8 \- Import Options*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	*Verify Digital Signature*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option forces the import process to verify the digital signature that was used to sign the OVF during export.  If the verification fails, this typically indicates that the OVF has been tampered with.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	*Verify Manifest Content*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option forces the import process to verify that the content of the manifest file matches what is in the OVF package.  If this verification fails, it typically indicates that files are missing.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	*Validate OVF Package*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option forces the import process to validate the selected OVF file against the DMTF OVF 1.0.0 schema.  This is useful to determine the compatibility of an OVF file.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	*Import Metadata Only*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option imports the metadata only.  This is useful if configuration content is all that is needed.  The virtual machine content will be created from a template or an existing virtual disk will be attached after import. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	*Run Operating System Fixups*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Selecting this option runs automated scripts against the imported VMware based virtual appliance.  This is necessary to ensure the VM boots properly.  Select this option for Windows or Linux virtual machines imported from VMware sources.  Fixup of virtual machines with more than two virtual disks is unsupported.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *VM to Host Resource Mapping Wizard*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool allows users to map system, storage, and networking resources defined in the OVF virtual appliance to the resources on the virtual machine host(s).  This ensures that prior to import, the proper resources are paired and the virtual machine can power on minimizing administrative tasks.  </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Mapping is performed by selecting items (one or more) in the left column of the Mapping dialog and then selecting a target device in the right</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The padlock icon !image007.jpg! depicts that a mapping of a VM device to Host resource has been set. Individual mappings may be cleared by selecting and clearing the lock icon.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">An existing OVF to Host resource mapping may be cleared by clicking the *Clear* button on the Import tab.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">1.&amp;nbsp;&amp;nbsp; Begin the resource mapping process by Clicking the Mapping button !newvirtualnetwork_32.jpg! in the Tool bar</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">2.&amp;nbsp;&amp;nbsp; The mapping wizard launches and presents the Systems tab (this is the target Host for a VM workload).</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image9.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 9 \- Unmapped VM CPU and memory workload*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">3.&amp;nbsp;&amp;nbsp;Select the desired host resource in the right pane</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">4.&amp;nbsp;&amp;nbsp;Select a VM resource(s) in the left pane</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image10.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}8Figure 10 \- VM CPU and memory workload mapped Host*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">5.&amp;nbsp;&amp;nbsp;Click the *Next* button to map the Network resources.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image11.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 11 \- Mapped VM Network Device to Hypervisor Network Device{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">6.&amp;nbsp;&amp;nbsp; Select the desired host resource in the right pane</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">7.&amp;nbsp;&amp;nbsp; Select a VM resource(s) in the left pane</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">8.&amp;nbsp;&amp;nbsp; Click the *Next* button to map the Storage resources</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image12.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 12 \- Mapped VM Storage to Hypervisor Storage*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">9. &amp;nbsp;&amp;nbsp; Select the desired host resource in the right pane</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">10.&amp;nbsp;&amp;nbsp; Select a VM resource(s) in the left pane</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">11. &amp;nbsp; Click *Done* to complete the wizard, save the mapping, and return to the Import screen.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Converting an OVF package to an OVA and vice versa*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool facilitates the conversion of any DMTF compliant OVF export to a single OVA file.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">To convert an OVF with the Project Kensho OVF Tool:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">1.&amp;nbsp;&amp;nbsp; Select the Import Tab</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image13.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 13 \- OVA Menu*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">2.&amp;nbsp;&amp;nbsp; From the Kensho Library, select an OVF.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">3.&amp;nbsp;&amp;nbsp; Right click the OVF and Select 'Convert to OVA'</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">4.&amp;nbsp;&amp;nbsp; The reverse process is used to convert an OVA into an OVF.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info:title=Note}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The OVF icon !image013.jpg|width=26,height=26! depicts a folder that includes the OVF package configuration and associated file.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The OVA icon !image014.jpg|width=26,height=26! indicates an OVF package that has been compressed, using tar format, into a single file with the extension .OVA</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The X icon !error_16.jpg|width=22,height=22! indicates an OVF package that is not compliant with the DMTF Standards.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h4. *Environment Tab*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The environment tab is a read-only view of the virtual machine host resources and environment.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!image14.jpg!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{color:#4f81bd}*Figure 14 \- Environment Tab*{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#00549f}VMware OVF Support{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool facilitates importing VMware derived OVF content directly into a XenServer Storage Repository in the same manner as importing a XenConvert or Project Kensho produced OVF.  </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">It is important to note that not all VMware OVF content is equal.  VMware OVF content produced through the latest VMware utilities will result in a higher degree of import success.  The following VMware OVF content has been successfully tested:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	vSphere 4</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	Virtual Infrastructure 3</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	VMware OVF Tool 0.9</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	VMware OVF Tool 1.0</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	VMware Studio 1.0</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	VMware Workstation 6.5.3</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	VMware Converter 4.0.x</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*	VMware Converter 3.0.3</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3.{color:#00549f}Snapshot Support{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The Project Kensho OVF Tool now supports creating virtual appliances from virtual machines with snapshots. Both XenServer 5.5 and Hyper-V support virtual machine snapshots.  </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">When creating an OVF virtual appliance from a virtual machine with a snapshot, the current running state of the virtual machine is what the tool creates as a virtual appliance.  This can also be described as the state that is experienced when the virtual machine is powered on. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">If a virtual machine contains multiple snapshots, only the current running state of the virtual machine is exported.  No snapshot history or detail is exported as part of the virtual appliance</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=45810048">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=45810048&version=89">Revert To Version 89</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/Kensho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuring Debian (Lenny) 64-bit (v5.04) on XenServer 5.5</title>
		<link>http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5</link>
		<comments>http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5#comments</comments>
		<pubDate>Tue, 29 Jun 2010 13:53:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <p>This page provides details on how to install Debian Lenny 5.03 and 5.04 64-bit but should be repeatable for other Linux distributions and has been tested on XenServer 5.5 and XenServer 5.6 RC3.</p>

<div class='panelMacro'><table class='infoMacro'><col width='24'><col><tr><td valign='top'><img src="/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
<p>Please note the following supportability disclaimer:  Only OSs listed in the XenServer Virtual Machine Installation Guide is supported by Citrix Technical Support. The OS within this and related pages are not supported and are installed at the users own risk.</p></td></tr></table></div>

<p>One prerequisite for this procedure is the VM be installed into an environment with working DHCP, DNS and internet access. This is due to DomU kernel updates will need to be downloaded from the internet.</p>

<p>Listed below is an outline of the overall process:<br />
Installation Mode 2 (HVM mode, but can be switched into PV mode by installing/enabling PV kernel mode)</p>
<ul class="alternate" type="square">
	<li>Create a VM is HMV mode by using the "Other install media" VM template</li>
	<li>Performance a installation of the Linux guest OS,( in this case Lenny 5.04 64-bit)</li>
	<li>Generate the Paravirtualised kernel and drivers</li>
	<li>Use nano or vi  text editor to amend "/etc/inittab"</li>
	<li>Use nano or vi text editor to amend "/etc/fstab"</li>
	<li>Use nano or vi text editor to amend "/boot/grub/menu.lst"</li>
	<li>Shutdown VM</li>
	<li>Identify &#60;uuid&#62; for newly created Linux guest VM</li>
	<li>Execute "xe" commands to modify VM parameters for PV mode and boot.</li>
	<li>Start-up VM in PV mode</li>
	<li>Install XenTools</li>
</ul>


<p>The ISO file for this distribution media can be obtained from <a href="http://cdimage.debian.org">http://cdimage.debian.org</a>. The specific links for the 5.04 distribution is located at <a href="http://cdimage.debian.org/debian-cd/5.0.4/amd64/iso-dvd/">Debian Lenny amd64 5.04</a>.</p>

<h2><a name="ConfiguringDebian%28Lenny%2964-bit%28v5.04%29onXenServer5.5-ProcedureforDebianLenny5.0464bit"></a>Procedure for Debian Lenny 5.04 64-bit</h2>

<ol>
	<li>Create a VM using the "Other install media" VM template.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/1.jpg" border="0" /></div><br /></li>
	<li>Give the new VM a name.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/2.jpg" border="0" /></div><br /></li>
	<li>Select the debain-504-amd64-DVD-1.iso or debain-503-amd64-DVD-1 media
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/3.jpg" border="0" /></div><br /></li>
	<li>Select automatic placement of home server for VM is possible.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/4.jpg" border="0" /></div><br /></li>
	<li>Select required CPU and Memory settings for VM, (this example uses the default settings.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/5.jpg" border="0" /></div><br /></li>
	<li>Add virtual disk storage, ( this example uses the default 5GB settings)
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/6.jpg" border="0" /></div><br /></li>
	<li>Select the required virtual network interface, ( this example uses the default single NIC settings)
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/7.jpg" border="0" /></div><br /></li>
	<li>Finish VM creation and ensure VM is set to start automatically.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/8.jpg" border="0" /></div><br /></li>
	<li>Select "Install" from the Lenny amd64 installer boot menu.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/9.jpg" border="0" /></div><br /></li>
	<li>Select the required language.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/10.jpg" border="0" /></div><br /></li>
	<li>Select the required keyboard.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/11.jpg" border="0" /></div><br /></li>
	<li>Select the required country.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/12.jpg" border="0" /></div><br /></li>
	<li>Enter hostname.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/13.jpg" border="0" /></div><br /></li>
	<li>Accepted or enter DNS settings.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/14.jpg" border="0" /></div><br /></li>
	<li>Select the guided partition method that uses the entire disk.
<br />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/15.jpg" border="0" /></div><br /></li>
	<li>Select the disk partition displayed, this will reflect to disk size chosen back at step 6. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/16.jpg" border="0" /></div><br /></li>
	<li>Select the required disk partitioning scheme, (this example used "All files in one partition"). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/17.jpg" border="0" /></div><br /></li>
	<li>Select "Finish partitioning and write changes to disk". <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/18.jpg" border="0" /></div><br /></li>
	<li>Select yes to write the changes to disk. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/19.jpg" border="0" /></div><br /></li>
	<li>Enter a root password and confirm. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/20.jpg" border="0" /></div><br /></li>
	<li>Enter a new user name. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/21.jpg" border="0" /></div><br /></li>
	<li>Enter a password for the new user and confirm. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/22.jpg" border="0" /></div><br /></li>
	<li>Select "No" to scanning for another CD or DVD. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/23.jpg" border="0" /></div><br /></li>
	<li>Select "No" to use a network mirror (although if the VM has a working internet connection at this point, "Yes" can also be selected). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/24.jpg" border="0" /></div><br /></li>
	<li>Select "No" to participate in package usage survey. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/25.jpg" border="0" /></div><br /></li>
	<li>Use the spacebar to select or de-select the required software to install, (this example selected a standard system). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/26.jpg" border="0" /></div><br /></li>
	<li>Select "yes" to install the grub boot loader to master boot record, (MBR). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/27.jpg" border="0" /></div><br /></li>
	<li>Select "Continue" to complete Lenny Guest installation that will reboot the VM. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/28.jpg" border="0" /></div><br /></li>
	<li>Once the VM has booted the newly install Lenny amd64 guest operating system, login as root. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/29.jpg" border="0" /></div><br /></li>
	<li>Execute the command
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>aptitude install linux-image-xen-amd64</pre>
</div></div>
<p>or when using Lenny 5.04</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>aptitude install linux-image-2.6.26-2-xen-amd64</pre>
</div></div>
<p>should work but if in doubt execute</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>aptitude search xen</pre>
</div></div>
<p>and select the latest DomU amd64 kernel image starting with <em>linux-image</em>. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/30.jpg" border="0" /></div><br />
<br /></p></li>
	<li>Press "y" to download the required kernel update from the internet. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/31.jpg" border="0" /></div><br /></li>
	<li>When the kernel has been installed and packaged be sure not to reboot the VM until three files have been edited. Use nano to edit <em>/etc/inittab</em>. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/32.jpg" border="0" /></div><br /></li>
	<li>Add the following new line at line 53
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>co:2345:respawn:/sbin/getty 38400 hvc0</pre>
</div></div>
<p><div align="center"><img src="http://community.citrix.com/download/attachments/139560318/32b.jpg" border="0" /></div><br /></p></li>
	<li>Use nano to edit <em>/etc/fstab</em> switch from <em>/dev/hd&#42;</em> to <em>/dev/xvd&#42;</em>. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/33.jpg" border="0" /></div><br /></li>
	<li>Use nano to edit <em>/boot/grub/menu.lst</em> and change the line
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>#kopt=root=/dev/hda1 ro</pre>
</div></div>
<p>to<br />
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>#kopt=root=/dev/xvda1 ro console=hvc0</pre>
</div></div> <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/34.jpg" border="0" /></div><br />
<br /></p></li>
	<li>Also change the first two <em>Debian GNU/Linux, kernel 2.6.26-2-xen-amd64</em> kernel boot lines to<br />
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>/boot/vmlinuz-2.6.26-2-xen-amd64 /root=/dev/xvda1 ro console=hvc0$</pre>
</div></div> <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/35.jpg" border="0" /></div><br /></li>
	<li>Once all three files have been edited execute
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>shutdown -h now</pre>
</div></div>
<p>to shutdown the VM then within XenCenter switch to the console tab of the XenServer host. At the host console, execute</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>xe vm-list</pre>
</div></div>
<p>to obtain the uuid of the newly created VM. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/36.jpg" border="0" /></div><br />
<br /></p></li>
	<li>Identify the uuid for the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file.<br />
<div align="center"><img src="http://community.citrix.com/download/attachments/139560318/37.jpg" border="0" /></div><br /></li>
	<li>Execute
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>xe vm-param-clear uuid=&#60;uuid&#62; param-name=HVM-boot-policy</pre>
</div></div>
<p>using the uuid pasted from step 38. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/38.jpg" border="0" /></div><br /></p></li>
	<li>Execute
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>xe vm-param-set uuid=&#60;uuid&#62; PV-bootloader=pygrub</pre>
</div></div>
<p>using the uuid pasted from step 38. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/39.jpg" border="0" /></div><br /></p></li>
	<li>Execute
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>xe vm-disk-list uuid=&#60;uuid&#62;</pre>
</div></div>
<p>using the uuid pasted from step 38. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/40.jpg" border="0" /></div><br />
<br /></p></li>
	<li>Identify the uuid for Disk 0 of the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/41.jpg" border="0" /></div><br /></li>
	<li>Execute
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>xe vbd-param-set uuid=&#60;uuid&#62; bootable=<span class="code-keyword">true</span></pre>
</div></div>
<p>using the disk uuid pasted from step 42. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/42.jpg" border="0" /></div><br />
<br /></p></li>
	<li>Start the Linux guest VM and login as root. (Please ensure that there is no CD/DVD connected or the VM may not start. Also note that if you experience any issue with the keyboard, exit and restart XenCenter). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/44.jpg" border="0" /></div><br /></li>
	<li>In XenCenter under the Storage tab for the VM, change the DVD drive to xs-tools.iso which is the XenTools media. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/43.jpg" border="0" /></div><br /></li>
	<li>Execute
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>mount/dev/xvdd /mnt</pre>
</div></div>
<p>and then</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>/mnt/Linux/install.sh</pre>
</div></div>
<p>When prompted to continue press "y". <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/45.jpg" border="0" /></div><br />
<br /></p></li>
	<li>When the XenTools installation scripted has successfully completed you will the following message, "You should now reboot this Virtual Machine." <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/46.jpg" border="0" /></div><br /></li>
	<li>When the VM has rebooted check the Virtualisation state in the general tab of the VM in XenCenter and if the state is "Optimised (version 5.5 installed)" then the procedure is completed. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/47.jpg" border="0" /></div><br /></li>
</ol>

    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5?pageVersion=6">revision 6</a>
            and <a href="/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5">revision 7</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">This page provides details on how to install Debian Lenny 5.03 and 5.04 64-bit but should be repeatable for other Linux distributions and has been tested on XenServer 5.5 and XenServer 5.6 RC3.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Please note the following supportability disclaimer:  Only OSs listed in the XenServer Virtual Machine Installation Guide is supported by Citrix Technical Support. The OS within this and related pages are not supported and are installed at the users own risk.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">One prerequisite for this procedure is the VM be installed into an environment with working DHCP, DNS and internet access. This is due to DomU kernel updates will need to be downloaded from the internet.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Listed below is an outline of the overall process:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Installation Mode 2 (HVM mode, but can be switched into PV mode by installing/enabling PV kernel mode)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Create a VM is HMV mode by using the &#34;Other install media&#34; VM template</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Performance a installation of the Linux guest OS,( in this case Lenny 5.04 64-bit)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Generate the Paravirtualised kernel and drivers</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Use nano or vi  text editor to amend &#34;/etc/inittab&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Use nano or vi text editor to amend &#34;/etc/fstab&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Use nano or vi text editor to amend &#34;/boot/grub/menu.lst&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Shutdown VM</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Identify &#60;uuid&#62; for newly created Linux guest VM</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Execute &#34;xe&#34; commands to modify VM parameters for PV mode and boot.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Start-up VM in PV mode</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Install XenTools</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The ISO file for this distribution media can be obtained from [http://cdimage.debian.org&#124;http://cdimage.debian.org]. The specific links for the 5.04 distribution is located at [Debian Lenny amd64 5.04&#124;http://cdimage.debian.org/debian-cd/5.0.4/amd64/iso-dvd/].</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Procedure for Debian Lenny 5.04 64-bit</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Create a VM using the &#34;Other install media&#34; VM template.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !1.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Give the new VM a name.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !2.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the debain-504-amd64-DVD-1.iso or debain-503-amd64-DVD-1 media</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !3.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select automatic placement of home server for VM is possible.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !4.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select required CPU and Memory settings for VM, (this example uses the default settings.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !5.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Add virtual disk storage, ( this example uses the default 5GB settings)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !6.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the required virtual network interface, ( this example uses the default single NIC settings)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !7.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Finish VM creation and ensure VM is set to start automatically.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !8.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select &#34;Install&#34; from the Lenny amd64 installer boot menu.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !9.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the required language.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !10.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the required keyboard.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !11.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the required country.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !12.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Enter hostname.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !13.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Accepted or enter DNS settings.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !14.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the guided partition method that uses the entire disk.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !15.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the disk partition displayed, this will reflect to disk size chosen back at step 6. !16.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select the required disk partitioning scheme, (this example used &#34;All files in one partition&#34;). !17.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select &#34;Finish partitioning and write changes to disk&#34;. !18.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select yes to write the changes to disk. !19.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Enter a root password and confirm. !20.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Enter a new user name. !21.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Enter a password for the new user and confirm. !22.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select &#34;No&#34; to scanning for another CD or DVD. !23.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select &#34;No&#34; to use a network mirror (although if the VM has a working internet connection at this point, &#34;Yes&#34; can also be selected). !24.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select &#34;No&#34; to participate in package usage survey. !25.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Use the spacebar to select or de-select the required software to install, (this example selected a standard system). !26.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select &#34;yes&#34; to install the grub boot loader to master boot record, (MBR). !27.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Select &#34;Continue&#34; to complete Lenny Guest installation that will reboot the VM. !28.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Once the VM has booted the newly install Lenny amd64 guest operating system, login as root. !29.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Execute the command</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">aptitude install linux-image-xen-amd64</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">or when using Lenny 5.04</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">aptitude install linux-image-2.6.26-2-xen-amd64</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">should work but if in doubt execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">aptitude search xen</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">and select the latest DomU amd64 kernel image starting with _linux-image_. !30.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Press &#34;y&#34; to download the required kernel update from the internet. !31.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># When the kernel has been installed and packaged be sure not to reboot the VM until three files have been edited. Use nano to edit _/etc/inittab_. !32.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Add the following new line at line 53</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">co:2345:respawn:/sbin/getty 38400 hvc0</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!32b.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Use nano to edit _/etc/fstab_ switch from _/dev/hd\*_ to _/dev/xvd\*_. !33.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Use nano to edit _/boot/grub/menu.lst_ and change the line</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">#kopt=root=/dev/hda1 ro</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">to</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">#kopt=root=/dev/xvda1 ro console=hvc0</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code} !34.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Also change the first two _Debian GNU/Linux, kernel 2.6.26-2-xen-amd64_ kernel boot lines to</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffdeleted"><span class="diffremovedchars">/boot/vmliuz-2.6.26-2-xen-amd64</span> /root=/dev/xvda1 ro console=hvc0$ </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded"><span class="diffaddedchars">/boot/vmlinuz-2.6.26-2-xen-amd64</span> /root=/dev/xvda1 ro console=hvc0$ </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code} !35.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Once all three files have been edited execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">shutdown -h now</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">to shutdown the VM then within XenCenter switch to the console tab of the XenServer host. At the host console, execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">xe vm-list</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">to obtain the uuid of the newly created VM. !36.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Identify the uuid for the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!37.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">xe vm-param-clear uuid=&#60;uuid&#62; param-name=HVM-boot-policy</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">using the uuid pasted from step 38. !38.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">xe vm-param-set uuid=&#60;uuid&#62; PV-bootloader=pygrub</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">using the uuid pasted from step 38. !39.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">xe vm-disk-list uuid=&#60;uuid&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">using the uuid pasted from step 38. !40.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Identify the uuid for Disk 0 of the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file. !41.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">xe vbd-param-set uuid=&#60;uuid&#62; bootable=true</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">using the disk uuid pasted from step 42. !42.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Start the Linux guest VM and login as root. (Please ensure that there is no CD/DVD connected or the VM may not start. Also note that if you experience any issue with the keyboard, exit and restart XenCenter). !44.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># In XenCenter under the Storage tab for the VM, change the DVD drive to xs-tools.iso which is the XenTools media. !43.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">mount/dev/xvdd /mnt</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">and then</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">/mnt/Linux/install.sh</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">When prompted to continue press &#34;y&#34;. !45.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># When the XenTools installation scripted has successfully completed you will the following message, &#34;You should now reboot this Virtual Machine.&#34; !46.jpg&#124;align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># When the VM has rebooted check the Virtualisation state in the general tab of the VM in XenCenter and if the state is &#34;Optimised (version 5.5 installed)&#34; then the procedure is completed. !47.jpg&#124;align=centre!\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=139560318">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=139560318&#38;version=6">Revert To Version 6</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <p>This page provides details on how to install Debian Lenny 5.03 and 5.04 64-bit but should be repeatable for other Linux distributions and has been tested on XenServer 5.5 and XenServer 5.6 RC3.</p>

<div class='panelMacro'><table class='infoMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/information.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td>
<p>Please note the following supportability disclaimer:  Only OSs listed in the XenServer Virtual Machine Installation Guide is supported by Citrix Technical Support. The OS within this and related pages are not supported and are installed at the users own risk.</p></td></tr></table></div>

<p>One prerequisite for this procedure is the VM be installed into an environment with working DHCP, DNS and internet access. This is due to DomU kernel updates will need to be downloaded from the internet.</p>

<p>Listed below is an outline of the overall process:<br/>
Installation Mode 2 (HVM mode, but can be switched into PV mode by installing/enabling PV kernel mode)</p>
<ul class="alternate" type="square">
	<li>Create a VM is HMV mode by using the "Other install media" VM template</li>
	<li>Performance a installation of the Linux guest OS,( in this case Lenny 5.04 64-bit)</li>
	<li>Generate the Paravirtualised kernel and drivers</li>
	<li>Use nano or vi  text editor to amend "/etc/inittab"</li>
	<li>Use nano or vi text editor to amend "/etc/fstab"</li>
	<li>Use nano or vi text editor to amend "/boot/grub/menu.lst"</li>
	<li>Shutdown VM</li>
	<li>Identify &lt;uuid&gt; for newly created Linux guest VM</li>
	<li>Execute "xe" commands to modify VM parameters for PV mode and boot.</li>
	<li>Start-up VM in PV mode</li>
	<li>Install XenTools</li>
</ul>


<p>The ISO file for this distribution media can be obtained from <a href="http://cdimage.debian.org">http://cdimage.debian.org</a>. The specific links for the 5.04 distribution is located at <a href="http://cdimage.debian.org/debian-cd/5.0.4/amd64/iso-dvd/">Debian Lenny amd64 5.04</a>.</p>

<h2><a name="ConfiguringDebian%28Lenny%2964-bit%28v5.04%29onXenServer5.5-ProcedureforDebianLenny5.0464bit"></a>Procedure for Debian Lenny 5.04 64-bit</h2>

<ol>
	<li>Create a VM using the "Other install media" VM template.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/1.jpg" border="0" /></div><br clear="all" /></li>
	<li>Give the new VM a name.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/2.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the debain-504-amd64-DVD-1.iso or debain-503-amd64-DVD-1 media
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/3.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select automatic placement of home server for VM is possible.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/4.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select required CPU and Memory settings for VM, (this example uses the default settings.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/5.jpg" border="0" /></div><br clear="all" /></li>
	<li>Add virtual disk storage, ( this example uses the default 5GB settings)
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/6.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the required virtual network interface, ( this example uses the default single NIC settings)
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/7.jpg" border="0" /></div><br clear="all" /></li>
	<li>Finish VM creation and ensure VM is set to start automatically.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/8.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select "Install" from the Lenny amd64 installer boot menu.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/9.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the required language.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/10.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the required keyboard.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/11.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the required country.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/12.jpg" border="0" /></div><br clear="all" /></li>
	<li>Enter hostname.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/13.jpg" border="0" /></div><br clear="all" /></li>
	<li>Accepted or enter DNS settings.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/14.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the guided partition method that uses the entire disk.
<br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/15.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the disk partition displayed, this will reflect to disk size chosen back at step 6. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/16.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select the required disk partitioning scheme, (this example used "All files in one partition"). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/17.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select "Finish partitioning and write changes to disk". <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/18.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select yes to write the changes to disk. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/19.jpg" border="0" /></div><br clear="all" /></li>
	<li>Enter a root password and confirm. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/20.jpg" border="0" /></div><br clear="all" /></li>
	<li>Enter a new user name. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/21.jpg" border="0" /></div><br clear="all" /></li>
	<li>Enter a password for the new user and confirm. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/22.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select "No" to scanning for another CD or DVD. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/23.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select "No" to use a network mirror (although if the VM has a working internet connection at this point, "Yes" can also be selected). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/24.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select "No" to participate in package usage survey. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/25.jpg" border="0" /></div><br clear="all" /></li>
	<li>Use the spacebar to select or de-select the required software to install, (this example selected a standard system). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/26.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select "yes" to install the grub boot loader to master boot record, (MBR). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/27.jpg" border="0" /></div><br clear="all" /></li>
	<li>Select "Continue" to complete Lenny Guest installation that will reboot the VM. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/28.jpg" border="0" /></div><br clear="all" /></li>
	<li>Once the VM has booted the newly install Lenny amd64 guest operating system, login as root. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/29.jpg" border="0" /></div><br clear="all" /></li>
	<li>Execute the command
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">aptitude install linux-image-xen-amd64</pre>
</div></div>
<p>or when using Lenny 5.04</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">aptitude install linux-image-2.6.26-2-xen-amd64</pre>
</div></div>
<p>should work but if in doubt execute</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">aptitude search xen</pre>
</div></div>
<p>and select the latest DomU amd64 kernel image starting with <em>linux-image</em>. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/30.jpg" border="0" /></div><br clear="all" />
<br clear="all" /></p></li>
	<li>Press "y" to download the required kernel update from the internet. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/31.jpg" border="0" /></div><br clear="all" /></li>
	<li>When the kernel has been installed and packaged be sure not to reboot the VM until three files have been edited. Use nano to edit <em>/etc/inittab</em>. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/32.jpg" border="0" /></div><br clear="all" /></li>
	<li>Add the following new line at line 53
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">co:2345:respawn:/sbin/getty 38400 hvc0</pre>
</div></div>
<p><div align="center"><img src="http://community.citrix.com/download/attachments/139560318/32b.jpg" border="0" /></div><br clear="all" /></p></li>
	<li>Use nano to edit <em>/etc/fstab</em> switch from <em>/dev/hd&#42;</em> to <em>/dev/xvd&#42;</em>. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/33.jpg" border="0" /></div><br clear="all" /></li>
	<li>Use nano to edit <em>/boot/grub/menu.lst</em> and change the line
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">#kopt=root=/dev/hda1 ro</pre>
</div></div>
<p>to<br/>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">#kopt=root=/dev/xvda1 ro console=hvc0</pre>
</div></div> <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/34.jpg" border="0" /></div><br clear="all" />
<br clear="all" /></p></li>
	<li>Also change the first two <em>Debian GNU/Linux, kernel 2.6.26-2-xen-amd64</em> kernel boot lines to<br/>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">/boot/vmlinuz-2.6.26-2-xen-amd64 /root=/dev/xvda1 ro console=hvc0$</pre>
</div></div> <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/35.jpg" border="0" /></div><br clear="all" /></li>
	<li>Once all three files have been edited execute
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">shutdown -h now</pre>
</div></div>
<p>to shutdown the VM then within XenCenter switch to the console tab of the XenServer host. At the host console, execute</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">xe vm-list</pre>
</div></div>
<p>to obtain the uuid of the newly created VM. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/36.jpg" border="0" /></div><br clear="all" />
<br clear="all" /></p></li>
	<li>Identify the uuid for the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file.<br/>
<div align="center"><img src="http://community.citrix.com/download/attachments/139560318/37.jpg" border="0" /></div><br clear="all" /></li>
	<li>Execute
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">xe vm-param-clear uuid=&lt;uuid&gt; param-name=HVM-boot-policy</pre>
</div></div>
<p>using the uuid pasted from step 38. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/38.jpg" border="0" /></div><br clear="all" /></p></li>
	<li>Execute
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">xe vm-param-set uuid=&lt;uuid&gt; PV-bootloader=pygrub</pre>
</div></div>
<p>using the uuid pasted from step 38. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/39.jpg" border="0" /></div><br clear="all" /></p></li>
	<li>Execute
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">xe vm-disk-list uuid=&lt;uuid&gt;</pre>
</div></div>
<p>using the uuid pasted from step 38. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/40.jpg" border="0" /></div><br clear="all" />
<br clear="all" /></p></li>
	<li>Identify the uuid for Disk 0 of the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/41.jpg" border="0" /></div><br clear="all" /></li>
	<li>Execute
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">xe vbd-param-set uuid=&lt;uuid&gt; bootable=<span class="code-keyword">true</span></pre>
</div></div>
<p>using the disk uuid pasted from step 42. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/42.jpg" border="0" /></div><br clear="all" />
<br clear="all" /></p></li>
	<li>Start the Linux guest VM and login as root. (Please ensure that there is no CD/DVD connected or the VM may not start. Also note that if you experience any issue with the keyboard, exit and restart XenCenter). <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/44.jpg" border="0" /></div><br clear="all" /></li>
	<li>In XenCenter under the Storage tab for the VM, change the DVD drive to xs-tools.iso which is the XenTools media. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/43.jpg" border="0" /></div><br clear="all" /></li>
	<li>Execute
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">mount/dev/xvdd /mnt</pre>
</div></div>
<p>and then</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">/mnt/Linux/install.sh</pre>
</div></div>
<p>When prompted to continue press "y". <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/45.jpg" border="0" /></div><br clear="all" />
<br clear="all" /></p></li>
	<li>When the XenTools installation scripted has successfully completed you will the following message, "You should now reboot this Virtual Machine." <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/46.jpg" border="0" /></div><br clear="all" /></li>
	<li>When the VM has rebooted check the Virtualisation state in the general tab of the VM in XenCenter and if the state is "Optimised (version 5.5 installed)" then the procedure is completed. <div align="center"><img src="http://community.citrix.com/download/attachments/139560318/47.jpg" border="0" /></div><br clear="all" /></li>
</ol>

    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5?pageVersion=6">revision 6</a>
            and <a href="http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5">revision 7</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">This page provides details on how to install Debian Lenny 5.03 and 5.04 64-bit but should be repeatable for other Linux distributions and has been tested on XenServer 5.5 and XenServer 5.6 RC3.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Please note the following supportability disclaimer:  Only OSs listed in the XenServer Virtual Machine Installation Guide is supported by Citrix Technical Support. The OS within this and related pages are not supported and are installed at the users own risk.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{info}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">One prerequisite for this procedure is the VM be installed into an environment with working DHCP, DNS and internet access. This is due to DomU kernel updates will need to be downloaded from the internet.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Listed below is an outline of the overall process:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Installation Mode 2 (HVM mode, but can be switched into PV mode by installing/enabling PV kernel mode)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Create a VM is HMV mode by using the &quot;Other install media&quot; VM template</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Performance a installation of the Linux guest OS,( in this case Lenny 5.04 64-bit)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Generate the Paravirtualised kernel and drivers</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Use nano or vi  text editor to amend &quot;/etc/inittab&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Use nano or vi text editor to amend &quot;/etc/fstab&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Use nano or vi text editor to amend &quot;/boot/grub/menu.lst&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Shutdown VM</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Identify &lt;uuid&gt; for newly created Linux guest VM</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Execute &quot;xe&quot; commands to modify VM parameters for PV mode and boot.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Start-up VM in PV mode</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Install XenTools</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The ISO file for this distribution media can be obtained from [http://cdimage.debian.org|http://cdimage.debian.org]. The specific links for the 5.04 distribution is located at [Debian Lenny amd64 5.04|http://cdimage.debian.org/debian-cd/5.0.4/amd64/iso-dvd/].</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Procedure for Debian Lenny 5.04 64-bit</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Create a VM using the &quot;Other install media&quot; VM template.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !1.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Give the new VM a name.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !2.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the debain-504-amd64-DVD-1.iso or debain-503-amd64-DVD-1 media</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !3.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select automatic placement of home server for VM is possible.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !4.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select required CPU and Memory settings for VM, (this example uses the default settings.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !5.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Add virtual disk storage, ( this example uses the default 5GB settings)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !6.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the required virtual network interface, ( this example uses the default single NIC settings)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !7.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Finish VM creation and ensure VM is set to start automatically.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !8.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select &quot;Install&quot; from the Lenny amd64 installer boot menu.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !9.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the required language.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !10.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the required keyboard.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !11.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the required country.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !12.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Enter hostname.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !13.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Accepted or enter DNS settings.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !14.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the guided partition method that uses the entire disk.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !15.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the disk partition displayed, this will reflect to disk size chosen back at step 6. !16.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select the required disk partitioning scheme, (this example used &quot;All files in one partition&quot;). !17.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select &quot;Finish partitioning and write changes to disk&quot;. !18.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select yes to write the changes to disk. !19.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Enter a root password and confirm. !20.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Enter a new user name. !21.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Enter a password for the new user and confirm. !22.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select &quot;No&quot; to scanning for another CD or DVD. !23.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select &quot;No&quot; to use a network mirror (although if the VM has a working internet connection at this point, &quot;Yes&quot; can also be selected). !24.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select &quot;No&quot; to participate in package usage survey. !25.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Use the spacebar to select or de-select the required software to install, (this example selected a standard system). !26.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select &quot;yes&quot; to install the grub boot loader to master boot record, (MBR). !27.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Select &quot;Continue&quot; to complete Lenny Guest installation that will reboot the VM. !28.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Once the VM has booted the newly install Lenny amd64 guest operating system, login as root. !29.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Execute the command</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">aptitude install linux-image-xen-amd64</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">or when using Lenny 5.04</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">aptitude install linux-image-2.6.26-2-xen-amd64</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">should work but if in doubt execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">aptitude search xen</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">and select the latest DomU amd64 kernel image starting with _linux-image_. !30.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Press &quot;y&quot; to download the required kernel update from the internet. !31.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># When the kernel has been installed and packaged be sure not to reboot the VM until three files have been edited. Use nano to edit _/etc/inittab_. !32.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Add the following new line at line 53</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">co:2345:respawn:/sbin/getty 38400 hvc0</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!32b.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Use nano to edit _/etc/fstab_ switch from _/dev/hd\*_ to _/dev/xvd\*_. !33.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Use nano to edit _/boot/grub/menu.lst_ and change the line</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">#kopt=root=/dev/hda1 ro</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">to</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">#kopt=root=/dev/xvda1 ro console=hvc0</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code} !34.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Also change the first two _Debian GNU/Linux, kernel 2.6.26-2-xen-amd64_ kernel boot lines to</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffdeleted"><span class="diffremovedchars">/boot/vmliuz-2.6.26-2-xen-amd64</span> /root=/dev/xvda1 ro console=hvc0$ </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded"><span class="diffaddedchars">/boot/vmlinuz-2.6.26-2-xen-amd64</span> /root=/dev/xvda1 ro console=hvc0$ </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code} !35.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Once all three files have been edited execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">shutdown -h now</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">to shutdown the VM then within XenCenter switch to the console tab of the XenServer host. At the host console, execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">xe vm-list</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">to obtain the uuid of the newly created VM. !36.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Identify the uuid for the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!37.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">xe vm-param-clear uuid=&lt;uuid&gt; param-name=HVM-boot-policy</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">using the uuid pasted from step 38. !38.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">xe vm-param-set uuid=&lt;uuid&gt; PV-bootloader=pygrub</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">using the uuid pasted from step 38. !39.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">xe vm-disk-list uuid=&lt;uuid&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">using the uuid pasted from step 38. !40.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Identify the uuid for Disk 0 of the newly created Linux guest VM then use your mouse to highlight it and right-click and select paste and copy to a text file. !41.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">xe vbd-param-set uuid=&lt;uuid&gt; bootable=true</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">using the disk uuid pasted from step 42. !42.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Start the Linux guest VM and login as root. (Please ensure that there is no CD/DVD connected or the VM may not start. Also note that if you experience any issue with the keyboard, exit and restart XenCenter). !44.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># In XenCenter under the Storage tab for the VM, change the DVD drive to xs-tools.iso which is the XenTools media. !43.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Execute</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">mount/dev/xvdd /mnt</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">and then</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">/mnt/Linux/install.sh</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">When prompted to continue press &quot;y&quot;. !45.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># When the XenTools installation scripted has successfully completed you will the following message, &quot;You should now reboot this Virtual Machine.&quot; !46.jpg|align=centre!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># When the VM has rebooted check the Virtualisation state in the general tab of the VM in XenCenter and if the state is &quot;Optimised (version 5.5 installed)&quot; then the procedure is completed. !47.jpg|align=centre!\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=139560318">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=139560318&version=6">Revert To Version 6</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/Configuring+Debian+%28Lenny%29+64-bit+%28v5.04%29+on+XenServer+5.5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HelloWorld Example &#8211; C Sharp</title>
		<link>http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp</link>
		<comments>http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp#comments</comments>
		<pubDate>Mon, 28 Jun 2010 14:41:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <h2><a name="HelloWorldExample-CSharp-Introduction"></a>Introduction</h2>

<p>In this example we will run through how to create a C# version of the HelloWorld <a href="/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a>.</p>

<p>It is assumed that you have read through that example for an understanding of the plugin objectives and how to package/resource your plugin.</p>

<p>This example will concentrate on writing a C# console app which provides the same behaviour as the PowerShell example. It also covers how to deal with the parameters which are passed into executables rather than a PowerShell script.</p>

<h2><a name="HelloWorldExample-CSharp-Requirements"></a>Requirements</h2>

<p>The first step is to install the following requirements:</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Requirement <br /> </th>
<th class='confluenceTh'> Download Location <br /> </th>
</tr>
<tr>
<td class='confluenceTd'> Microsoft Visual Studio 2008 express </td>
<td class='confluenceTd'> <a href="http://www.microsoft.com/express/downloads/">http://www.microsoft.com/express/downloads/</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenCenter v5.6 <br /> </td>
<td class='confluenceTd'> <a href="http://www.citrix.com/xenserver/download">http://www.citrix.com/xenserver/download</a> </td>
</tr>
<tr>
<td class='confluenceTd'> XenServer C# Bindings v5.6 <br /> </td>
<td class='confluenceTd'> <a href="http://community.citrix.com/display/xs/Download+SDKs">http://community.citrix.com/display/xs/Download+SDKs</a> </td>
</tr>
</tbody></table>
<p>You will also need the pre-requisites of the HelloWorld <a href="/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a> if you wish to package up the plugin as described in that example. Please refer to the other example for an explaination of how to do this.</p>

<h2><a name="HelloWorldExample-CSharp-XCPluginfile"></a>XCPlugin file</h2>

<p>The plugin configuration file we will be using here is similar to that in the HelloWorld <a href="/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a>, except we will be using a Shell command rather than a PowerShell command. The Shell command can target any type of executable file and passes information as parameters rather than by defining variables as the PowerShell command does.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&#62;
&#60;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&#62;
</span>&#60;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&#62;
	&#60;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&#62;
		&#60;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
		/&#62;
	&#60;/MenuItem&#62;
&#60;/XenCenterPlugin&#62;</pre>
</div></div>
<p>Notice that we are using the window parameter set to true in this example, as we will be showing the plugin output on the console window.</p>

<h2><a name="HelloWorldExample-CSharp-C%23Code"></a>C# Code</h2>

<p>We are going to write this example in C# and compile it into an executable to target from our plugin MenuItem. Create a C# Console Application project in Visual Studio and reference in the XenServer library from the v5.6 SDK.</p>

<p>We can now begin editing the Program.cs file in your project. The way we handle parameters when using a Shell command is slightly different to the PowerShell Commands. Recall that each parameter set from XenCenter consists of four parameters and describes a selection in the XenCenter resource list. The first thing we do is to read off these parameters from the executable arguaments in groups of four to get each parameter set:</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-keyword">static</span> void Main(string[] args)
{
   List&#60;ParameterSet&#62; ParamSets;
   SeparateParams(args, out ParamSets);
}

<span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets)
{
   ParamSets = <span class="code-keyword">new</span> List&#60;ParameterSet&#62;();
   <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &#60; args.Length; i += 4)
   {
      ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
   }
}

<span class="code-keyword">public</span> class ParameterSet
{
   <span class="code-keyword">public</span> string ServerURL = "";
   <span class="code-keyword">public</span> string SessionRef = "";
   <span class="code-keyword">public</span> string SelectedObjectClass = "";
   <span class="code-keyword">public</span> string SelectedObjectUuid = "";

   <span class="code-keyword">public</span> ParameterSet(string ServerURL, string SessionRef, string SelectedObjectClass, string SelectedObjectUuid)
   {
      <span class="code-keyword">this</span>.ServerURL = ServerURL;
      <span class="code-keyword">this</span>.SessionRef = SessionRef;
      <span class="code-keyword">this</span>.SelectedObjectClass = SelectedObjectClass;
      <span class="code-keyword">this</span>.SelectedObjectUuid = SelectedObjectUuid;
   }
}</pre>
</div></div>
<p>We can now use some of same logic that we did in the PowerShell example, going through each parameter set at a time and taking a list of selected object names - also noting if the XenCenter node is selected.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>bool XenCenterNodeSelected = <span class="code-keyword">false</span>;
List&#60;string&#62; names = <span class="code-keyword">new</span> List&#60;string&#62;();
foreach (ParameterSet pset in ParamSets)
{
	<span class="code-keyword">if</span> (pset.SelectedObjectClass == <span class="code-quote">"blank"</span>)
	{
		<span class="code-comment">// Selecting the XenCenter node adds a parameter set per connected server, with the obj params set to <span class="code-quote">"blank"</span>
</span>		<span class="code-keyword">if</span> (XenCenterNodeSelected)
			<span class="code-keyword">continue</span>;

		names.Add(<span class="code-quote">"XenCenter"</span>);
		XenCenterNodeSelected = <span class="code-keyword">true</span>;
	}
	<span class="code-keyword">else</span> <span class="code-keyword">if</span> (pset.SessionRef == <span class="code-quote">"<span class="code-keyword">null</span>"</span>)
	{
		<span class="code-comment">// Disconnected servers have no session information, and everything apart from the objects class is marked as <span class="code-quote">"<span class="code-keyword">null</span>"</span>
</span>		names.Add(<span class="code-quote">"a disconnected server"</span>);
	}
	<span class="code-keyword">else</span>
	{
		<span class="code-comment">// Use the session ref passedin by XenCenter. This means we don't have to log in or out.
</span>		Session session = <span class="code-keyword">new</span> Session(pset.ServerURL, pset.SessionRef);
		string name = "";
		<span class="code-comment">// Note: Alternatively you could use reflection here to construct and execute the correct methods
</span>		<span class="code-keyword">switch</span> (pset.SelectedObjectClass.ToLowerInvariant())
		{
			<span class="code-keyword">case</span> <span class="code-quote">"pool"</span>:
				name = Pool.get_record(session, Pool.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"vm"</span>:
				name = VM.get_record(session, VM.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"host"</span>:
				name = Host.get_record(session, Host.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"sr"</span>:
				name = SR.get_record(session, SR.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"network"</span>:
				name = Network.get_record(session, Network.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"vdi"</span>:
				name = VDI.get_record(session, VDI.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">default</span>:
				name = <span class="code-quote">"an unknown object"</span>;
				<span class="code-keyword">break</span>;
		}
		names.Add(name);
	}
}</pre>
</div></div>
<p>You can see here that we switch on the class of the parameter set, collect the reference to the server object using <em>get_by_uuid</em> and then using that reference to get the object itself. You could remove the need to do an exhaustive switch such as this by using reflection if you desired.</p>

<p>Finally we output our greeting using this list of names to the console, using a sentence construct similar to the PowerShell version:</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>string outputString = string.Format(<span class="code-quote">"Hello from {0}"</span>, names[0]);
	<span class="code-keyword">if</span> (names.Count &#62; 1)
	{
		outputString += PrettySentence(names.GetRange(1, names.Count - 1));
	}
	<span class="code-object">System</span>.Console.WriteLine(outputString);
}

<span class="code-keyword">private</span> <span class="code-keyword">static</span> string PrettySentence(List&#60;string&#62; items)
{
	string output = "";
	<span class="code-comment">//we are aiming <span class="code-keyword">for</span> <span class="code-quote">"string_1, string_1, string_1...string_n-1 and string_n"</span>
</span>	<span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &#60; items.Count - 1; i++)
	{
		output += string.Format(<span class="code-quote">", {0}"</span>, items[i]);
	}
	output += string.Format(<span class="code-quote">" and {0}"</span>, items[items.Count - 1]);
	<span class="code-keyword">return</span> output;
}</pre>
</div></div>
<p>If you try and execute this code you will be blocked by security failures. As part of using the SDK it is required that you define a policy for handling certificate validation.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-object">System</span>.Net.ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;</pre>
</div></div>
<p>For the purposes of this simple example you could use the following method, but you should strongly consider implementing some validation before releasing a plugin.<br />
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-comment">// Ignore all cert validation (not recommended)
</span>internal <span class="code-keyword">static</span> bool ValidateServerCertificate(
	object sender,
	X509Certificate certificate,
	X509Chain chain,
	SslPolicyErrors sslPolicyErrors)
{
	<span class="code-keyword">return</span> <span class="code-keyword">true</span>;
}</pre>
</div></div><br />
The complete code, including some error handling can be found <a href="/download/attachments/139558963/Program.cs?version=1">here</a>.
<br /></p>
<h2><a name="HelloWorldExample-CSharp-Deployment"></a>Deployment</h2>

<p>See the HelloWorld <a href="/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a> for details of how to produce your resources dll and package your files up into an installer.</p>

<h2><a name="HelloWorldExample-CSharp-Summary"></a>Summary</h2>

<p>This example covered the C# code you would need to write to communicate with XenServer and produce similar results to the PowerShell HelloWorld example.</p>

<ul class="alternate" type="square">
	<li>Compile a console application using <a href="/download/attachments/139558963/Program.cs?version=1">Program.cs</a> and referencing XenServer.dll from the XenServer C# Bindings to get your executable</li>
	<li>Use the <a href="/download/attachments/139558963/HelloWorld.xcplugin.xml?version=2">HelloWorld.xcplugin.xml</a> as your plugin configuration file</li>
	<li><a href="/download/attachments/139558963/HelloWorld.png?version=1">HelloWorld.png</a> is an image file you can us for your icon</li>
</ul>


<p>Put the compiled executable, the configuration file, the icon image file, and XenServer.dll and CookComputing.XmlRpcV2.dll from the XenServer C# Bindings in &#60;XenCenterInstallDirectory&#62;\Plugins\Citrix\HelloWorld\ and start XenCenter to see the new menu item.</p>


<h2><a name="HelloWorldExample-CSharp-Screenshots"></a>Screenshots</h2>
<p><div align="center"><img src="http://community.citrix.com/download/attachments/139558963/HelloWorldCSharpPrompt.png" border="0" /></div></p>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/HelloWorld+Example+-+C+Sharp?pageVersion=7">revision 7</a>
            and <a href="/display/xs/HelloWorld+Example+-+C+Sharp">revision 8</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Introduction</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">In this example we will run through how to create a C# version of the HelloWorld [powershell example&#124;xs:HelloWorld Example - PowerShell].</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">It is assumed that you have read through that example for an understanding of the plugin objectives and how to package/resource your plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">This example will concentrate on writing a C# console app which provides the same behaviour as the PowerShell example. It also covers how to deal with the parameters which are passed into executables rather than a PowerShell script.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Requirements</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The first step is to install the following requirements:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124;&#124; Requirement \\ &#124;&#124; Download Location \\ &#124;&#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Microsoft Visual Studio 2008 express &#124; [http://www.microsoft.com/express/downloads/] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Citrix {nl:XenCenter} v5.6 \\ &#124; [http://www.citrix.com/xenserver/download] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; XenServer C# Bindings v5.6 \\ &#124; [http://community.citrix.com/display/xs/Download+SDKs] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">You will also need the pre-requisites of the HelloWorld [powershell example&#124;xs:HelloWorld Example - PowerShell] if you wish to package up the plugin as described in that example. Please refer to the other example for an explaination of how to do this.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. XCPlugin file</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The plugin configuration file we will be using here is similar to that in the HelloWorld [powershell example&#124;xs:HelloWorld Example - PowerShell], except we will be using a Shell command rather than a PowerShell command. The Shell command can target any type of executable file and passes information as parameters rather than by defining variables as the PowerShell command does.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;!DOCTYPE XenCenterPlugin PUBLIC &#34;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&#34; &#34;xencenter-1.dtd&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	version=&#34;1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		name=&#34;hello-menu-item&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		menu=&#34;view&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		&#60;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.exe&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			window=&#34;true&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		/&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	&#60;/MenuItem&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;/XenCenterPlugin&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Notice that we are using the window parameter set to true in this example, as we will be showing the plugin output on the console window.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. C# Code</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">We are going to write this example in C# and compile it into an executable to target from our plugin MenuItem. Create a C# Console Application project in Visual Studio and reference in the XenServer library from the v5.6 SDK.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">We can now begin editing the Program.cs file in your project. The way we handle parameters when using a Shell command is slightly different to the PowerShell Commands. Recall that each parameter set from XenCenter consists of four parameters and describes a selection in the XenCenter resource list. The first thing we do is to read off these parameters from the executable arguaments in groups of four to get each parameter set:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">static void Main(string[] args)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   List&#60;ParameterSet&#62; ParamSets;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   SeparateParams(args, out ParamSets);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&#60;ParameterSet&#62; ParamSets)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   ParamSets = new List&#60;ParameterSet&#62;();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   for (int i = 0; i &#60; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">public class ParameterSet</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   public string ServerURL = &#34;&#34;;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   public string SessionRef = &#34;&#34;;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   public string SelectedObjectClass = &#34;&#34;;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   public string SelectedObjectUuid = &#34;&#34;;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   public ParameterSet(string ServerURL, string SessionRef, string SelectedObjectClass, string SelectedObjectUuid)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   {</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      this.ServerURL = ServerURL;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      this.SessionRef = SessionRef;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      this.SelectedObjectClass = SelectedObjectClass;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">      this.SelectedObjectUuid = SelectedObjectUuid;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">   }</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">We can now use some of same logic that we did in the PowerShell example, going through each parameter set at a time and taking a list of selected object names - also noting if the XenCenter node is selected.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">bool XenCenterNodeSelected = false;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">List&#60;string&#62; names = new List&#60;string&#62;();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">foreach (ParameterSet pset in ParamSets)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	if (pset.SelectedObjectClass == &#34;blank&#34;)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		// Selecting the XenCenter node adds a parameter set per connected server, with the obj params set to &#34;blank&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		if (XenCenterNodeSelected)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			continue;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		names.Add(&#34;XenCenter&#34;);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		XenCenterNodeSelected = true;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	else if (pset.SessionRef == &#34;null&#34;)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		// Disconnected servers have no session information, and everything apart from the objects class is marked as &#34;null&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		names.Add(&#34;a disconnected server&#34;);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	else</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		// Use the session ref passedin by XenCenter. This means we don't have to log in or out.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		Session session = new Session(pset.ServerURL, pset.SessionRef);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		string name = &#34;&#34;;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		// Note: Alternatively you could use reflection here to construct and execute the correct methods</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		switch (pset.SelectedObjectClass.ToLowerInvariant())</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			case &#34;pool&#34;:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				name = Pool.get_record(session, Pool.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			case &#34;vm&#34;:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				name = VM.get_record(session, VM.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			case &#34;host&#34;:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				name = Host.get_record(session, Host.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			case &#34;sr&#34;:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				name = SR.get_record(session, SR.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			case &#34;network&#34;:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				name = Network.get_record(session, Network.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			case &#34;vdi&#34;:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				name = VDI.get_record(session, VDI.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			default:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				name = &#34;an unknown object&#34;;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		names.Add(name);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">You can see here that we switch on the class of the parameter set, collect the reference to the server object using _get_by_uuid_ and then using that reference to get the object itself. You could remove the need to do an exhaustive switch such as this by using reflection if you desired.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Finally we output our greeting using this list of names to the console, using a sentence construct similar to the PowerShell version:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">string outputString = string.Format(&#34;Hello from {0}&#34;, names[0]);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	if (names.Count &#62; 1)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		outputString += PrettySentence(names.GetRange(1, names.Count - 1));</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	System.Console.WriteLine(outputString);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">private static string PrettySentence(List&#60;string&#62; items)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	string output = &#34;&#34;;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	//we are aiming for &#34;string_1, string_1, string_1...string_n-1 and string_n&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	for (int i = 0; i &#60; items.Count - 1; i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		output += string.Format(&#34;, {0}&#34;, items[i]);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	output += string.Format(&#34; and {0}&#34;, items[items.Count - 1]);</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	return output;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">If you try and execute this code you will be blocked by security failures. As part of using the SDK it is required that you define a policy for handling certificate validation.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">System.Net.ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">For the purposes of this simple example you could use the following method, but you should strongly consider implementing some validation before releasing a plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">// Ignore all cert validation (not recommended)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">internal static bool ValidateServerCertificate(</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	object sender,</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	X509Certificate certificate,</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	X509Chain chain,</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	SslPolicyErrors sslPolicyErrors)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	return true;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The complete code, including some error handling can be found [here&#124;^Program.cs].</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Deployment</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">See the HelloWorld [powershell example&#124;xs:HelloWorld Example - PowerShell] for details of how to produce your resources dll and package your files up into an installer.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Summary</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">This example covered the C# code you would need to write to communicate with XenServer and produce similar results to the PowerShell HelloWorld example.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'><a href='#change1' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">- Compile a <span class="diffremovedchars">project</span> using [Program.cs&#124;^Program.cs] to get your executable </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">- Compile a <span class="diffaddedchars">console application</span> using [Program.cs&#124;^Program.cs] <span class="diffaddedchars">and referencing XenServer.dll from the XenServer C# Bindings</span> to get your executable </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- Use the [HelloWorld.xcplugin.xml&#124;^HelloWorld.xcplugin.xml] as your plugin configuration file</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- [^HelloWorld.png] is an image file you can us for your icon</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a><a href='#change0' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffdeleted">Put the compiled executable, the configuration <span class="diffremovedchars">file and</span> the icon image <span class="diffremovedchars">file</span> in &#60;XenCenterInstallDirectory&#62;\Plugins\Citrix\HelloWorld\ and start XenCenter to see the new menu item. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">Put the compiled executable, the configuration <span class="diffaddedchars">file,</span> the icon image <span class="diffaddedchars">file, and XenServer.dll and CookComputing.XmlRpcV2.dll from the XenServer C# Bindings</span> in &#60;XenCenterInstallDirectory&#62;\Plugins\Citrix\HelloWorld\ and start XenCenter to see the new menu item. </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Screenshots</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!HelloWorldCSharpPrompt.png&#124;align=centre!</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=139558963">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=139558963&#38;version=7">Revert To Version 7</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <h2><a name="HelloWorldExample-CSharp-Introduction"></a>Introduction</h2>

<p>In this example we will run through how to create a C# version of the HelloWorld <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a>.</p>

<p>It is assumed that you have read through that example for an understanding of the plugin objectives and how to package/resource your plugin.</p>

<p>This example will concentrate on writing a C# console app which provides the same behaviour as the PowerShell example. It also covers how to deal with the parameters which are passed into executables rather than a PowerShell script.</p>

<h2><a name="HelloWorldExample-CSharp-Requirements"></a>Requirements</h2>

<p>The first step is to install the following requirements:</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Requirement <br clear="all" /> </th>
<th class='confluenceTh'> Download Location <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> Microsoft Visual Studio 2008 express </td>
<td class='confluenceTd'> <a href="http://www.microsoft.com/express/downloads/">http://www.microsoft.com/express/downloads/</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenCenter v5.6 <br clear="all" /> </td>
<td class='confluenceTd'> <a href="http://www.citrix.com/xenserver/download">http://www.citrix.com/xenserver/download</a> </td>
</tr>
<tr>
<td class='confluenceTd'> XenServer C# Bindings v5.6 <br clear="all" /> </td>
<td class='confluenceTd'> <a href="http://community.citrix.com/display/xs/Download+SDKs">http://community.citrix.com/display/xs/Download+SDKs</a> </td>
</tr>
</tbody></table>
<p>You will also need the pre-requisites of the HelloWorld <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a> if you wish to package up the plugin as described in that example. Please refer to the other example for an explaination of how to do this.</p>

<h2><a name="HelloWorldExample-CSharp-XCPluginfile"></a>XCPlugin file</h2>

<p>The plugin configuration file we will be using here is similar to that in the HelloWorld <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a>, except we will be using a Shell command rather than a PowerShell command. The Shell command can target any type of executable file and passes information as parameters rather than by defining variables as the PowerShell command does.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">&lt;?xml version=<span class="code-quote">"1.0"</span> encoding=<span class="code-quote">"UTF-8"</span>?&gt;
&lt;!DOCTYPE XenCenterPlugin PUBLIC <span class="code-quote">"-<span class="code-comment">//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN"</span> <span class="code-quote">"xencenter-1.dtd"</span>&gt;
</span>&lt;XenCenterPlugin
	xmlns=<span class="code-quote">"http:<span class="code-comment">//www.citrix.com/XenCenter/Plugins/schema"</span>
</span>	version=<span class="code-quote">"1"</span>&gt;
	&lt;MenuItem
		name=<span class="code-quote">"hello-menu-item"</span>
		menu=<span class="code-quote">"view"</span>
		serialized=<span class="code-quote">"none"</span>&gt;
		&lt;Shell
			filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.exe"</span>
			window=<span class="code-quote">"<span class="code-keyword">true</span>"</span>
		/&gt;
	&lt;/MenuItem&gt;
&lt;/XenCenterPlugin&gt;</pre>
</div></div>
<p>Notice that we are using the window parameter set to true in this example, as we will be showing the plugin output on the console window.</p>

<h2><a name="HelloWorldExample-CSharp-C%23Code"></a>C# Code</h2>

<p>We are going to write this example in C# and compile it into an executable to target from our plugin MenuItem. Create a C# Console Application project in Visual Studio and reference in the XenServer library from the v5.6 SDK.</p>

<p>We can now begin editing the Program.cs file in your project. The way we handle parameters when using a Shell command is slightly different to the PowerShell Commands. Recall that each parameter set from XenCenter consists of four parameters and describes a selection in the XenCenter resource list. The first thing we do is to read off these parameters from the executable arguaments in groups of four to get each parameter set:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-keyword">static</span> void Main(string[] args)
{
   List&lt;ParameterSet&gt; ParamSets;
   SeparateParams(args, out ParamSets);
}

<span class="code-keyword">private</span> <span class="code-keyword">static</span> void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets)
{
   ParamSets = <span class="code-keyword">new</span> List&lt;ParameterSet&gt;();
   <span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; args.Length; i += 4)
   {
      ParamSets.Add(<span class="code-keyword">new</span> ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));
   }
}

<span class="code-keyword">public</span> class ParameterSet
{
   <span class="code-keyword">public</span> string ServerURL = "";
   <span class="code-keyword">public</span> string SessionRef = "";
   <span class="code-keyword">public</span> string SelectedObjectClass = "";
   <span class="code-keyword">public</span> string SelectedObjectUuid = "";

   <span class="code-keyword">public</span> ParameterSet(string ServerURL, string SessionRef, string SelectedObjectClass, string SelectedObjectUuid)
   {
      <span class="code-keyword">this</span>.ServerURL = ServerURL;
      <span class="code-keyword">this</span>.SessionRef = SessionRef;
      <span class="code-keyword">this</span>.SelectedObjectClass = SelectedObjectClass;
      <span class="code-keyword">this</span>.SelectedObjectUuid = SelectedObjectUuid;
   }
}</pre>
</div></div>
<p>We can now use some of same logic that we did in the PowerShell example, going through each parameter set at a time and taking a list of selected object names - also noting if the XenCenter node is selected.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">bool XenCenterNodeSelected = <span class="code-keyword">false</span>;
List&lt;string&gt; names = <span class="code-keyword">new</span> List&lt;string&gt;();
foreach (ParameterSet pset in ParamSets)
{
	<span class="code-keyword">if</span> (pset.SelectedObjectClass == <span class="code-quote">"blank"</span>)
	{
		<span class="code-comment">// Selecting the XenCenter node adds a parameter set per connected server, with the obj params set to <span class="code-quote">"blank"</span>
</span>		<span class="code-keyword">if</span> (XenCenterNodeSelected)
			<span class="code-keyword">continue</span>;

		names.Add(<span class="code-quote">"XenCenter"</span>);
		XenCenterNodeSelected = <span class="code-keyword">true</span>;
	}
	<span class="code-keyword">else</span> <span class="code-keyword">if</span> (pset.SessionRef == <span class="code-quote">"<span class="code-keyword">null</span>"</span>)
	{
		<span class="code-comment">// Disconnected servers have no session information, and everything apart from the objects class is marked as <span class="code-quote">"<span class="code-keyword">null</span>"</span>
</span>		names.Add(<span class="code-quote">"a disconnected server"</span>);
	}
	<span class="code-keyword">else</span>
	{
		<span class="code-comment">// Use the session ref passedin by XenCenter. This means we don't have to log in or out.
</span>		Session session = <span class="code-keyword">new</span> Session(pset.ServerURL, pset.SessionRef);
		string name = "";
		<span class="code-comment">// Note: Alternatively you could use reflection here to construct and execute the correct methods
</span>		<span class="code-keyword">switch</span> (pset.SelectedObjectClass.ToLowerInvariant())
		{
			<span class="code-keyword">case</span> <span class="code-quote">"pool"</span>:
				name = Pool.get_record(session, Pool.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"vm"</span>:
				name = VM.get_record(session, VM.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"host"</span>:
				name = Host.get_record(session, Host.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"sr"</span>:
				name = SR.get_record(session, SR.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"network"</span>:
				name = Network.get_record(session, Network.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">case</span> <span class="code-quote">"vdi"</span>:
				name = VDI.get_record(session, VDI.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;
				<span class="code-keyword">break</span>;
			<span class="code-keyword">default</span>:
				name = <span class="code-quote">"an unknown object"</span>;
				<span class="code-keyword">break</span>;
		}
		names.Add(name);
	}
}</pre>
</div></div>
<p>You can see here that we switch on the class of the parameter set, collect the reference to the server object using <em>get_by_uuid</em> and then using that reference to get the object itself. You could remove the need to do an exhaustive switch such as this by using reflection if you desired.</p>

<p>Finally we output our greeting using this list of names to the console, using a sentence construct similar to the PowerShell version:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">string outputString = string.Format(<span class="code-quote">"Hello from {0}"</span>, names[0]);
	<span class="code-keyword">if</span> (names.Count &gt; 1)
	{
		outputString += PrettySentence(names.GetRange(1, names.Count - 1));
	}
	<span class="code-object">System</span>.Console.WriteLine(outputString);
}

<span class="code-keyword">private</span> <span class="code-keyword">static</span> string PrettySentence(List&lt;string&gt; items)
{
	string output = "";
	<span class="code-comment">//we are aiming <span class="code-keyword">for</span> <span class="code-quote">"string_1, string_1, string_1...string_n-1 and string_n"</span>
</span>	<span class="code-keyword">for</span> (<span class="code-object">int</span> i = 0; i &lt; items.Count - 1; i++)
	{
		output += string.Format(<span class="code-quote">", {0}"</span>, items[i]);
	}
	output += string.Format(<span class="code-quote">" and {0}"</span>, items[items.Count - 1]);
	<span class="code-keyword">return</span> output;
}</pre>
</div></div>
<p>If you try and execute this code you will be blocked by security failures. As part of using the SDK it is required that you define a policy for handling certificate validation.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-object">System</span>.Net.ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;</pre>
</div></div>
<p>For the purposes of this simple example you could use the following method, but you should strongly consider implementing some validation before releasing a plugin.<br/>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-comment">// Ignore all cert validation (not recommended)
</span>internal <span class="code-keyword">static</span> bool ValidateServerCertificate(
	object sender,
	X509Certificate certificate,
	X509Chain chain,
	SslPolicyErrors sslPolicyErrors)
{
	<span class="code-keyword">return</span> <span class="code-keyword">true</span>;
}</pre>
</div></div><br clear="all" />
The complete code, including some error handling can be found <a href="http://community.citrix.com/download/attachments/139558963/Program.cs?version=1">here</a>.
<br clear="all" /></p>
<h2><a name="HelloWorldExample-CSharp-Deployment"></a>Deployment</h2>

<p>See the HelloWorld <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell" title="HelloWorld Example - PowerShell">powershell example</a> for details of how to produce your resources dll and package your files up into an installer.</p>

<h2><a name="HelloWorldExample-CSharp-Summary"></a>Summary</h2>

<p>This example covered the C# code you would need to write to communicate with XenServer and produce similar results to the PowerShell HelloWorld example.</p>

<ul class="alternate" type="square">
	<li>Compile a console application using <a href="http://community.citrix.com/download/attachments/139558963/Program.cs?version=1">Program.cs</a> and referencing XenServer.dll from the XenServer C# Bindings to get your executable</li>
	<li>Use the <a href="http://community.citrix.com/download/attachments/139558963/HelloWorld.xcplugin.xml?version=2">HelloWorld.xcplugin.xml</a> as your plugin configuration file</li>
	<li><a href="http://community.citrix.com/download/attachments/139558963/HelloWorld.png?version=1">HelloWorld.png</a> is an image file you can us for your icon</li>
</ul>


<p>Put the compiled executable, the configuration file, the icon image file, and XenServer.dll and CookComputing.XmlRpcV2.dll from the XenServer C# Bindings in &lt;XenCenterInstallDirectory&gt;\Plugins\Citrix\HelloWorld\ and start XenCenter to see the new menu item.</p>


<h2><a name="HelloWorldExample-CSharp-Screenshots"></a>Screenshots</h2>
<p><div align="center"><img src="http://community.citrix.com/download/attachments/139558963/HelloWorldCSharpPrompt.png" border="0" /></div></p>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp?pageVersion=7">revision 7</a>
            and <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp">revision 8</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Introduction</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">In this example we will run through how to create a C# version of the HelloWorld [powershell example|xs:HelloWorld Example - PowerShell].</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">It is assumed that you have read through that example for an understanding of the plugin objectives and how to package/resource your plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">This example will concentrate on writing a C# console app which provides the same behaviour as the PowerShell example. It also covers how to deal with the parameters which are passed into executables rather than a PowerShell script.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Requirements</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The first step is to install the following requirements:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">|| Requirement \\ || Download Location \\ ||</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Microsoft Visual Studio 2008 express | [http://www.microsoft.com/express/downloads/] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Citrix {nl:XenCenter} v5.6 \\ | [http://www.citrix.com/xenserver/download] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| XenServer C# Bindings v5.6 \\ | [http://community.citrix.com/display/xs/Download+SDKs] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">You will also need the pre-requisites of the HelloWorld [powershell example|xs:HelloWorld Example - PowerShell] if you wish to package up the plugin as described in that example. Please refer to the other example for an explaination of how to do this.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. XCPlugin file</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The plugin configuration file we will be using here is similar to that in the HelloWorld [powershell example|xs:HelloWorld Example - PowerShell], except we will be using a Shell command rather than a PowerShell command. The Shell command can target any type of executable file and passes information as parameters rather than by defining variables as the PowerShell command does.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;!DOCTYPE XenCenterPlugin PUBLIC &quot;-//XENCENTERPLUGIN//DTD XENCENTERPLUGIN1//EN&quot; &quot;xencenter-1.dtd&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenCenterPlugin</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	version=&quot;1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;MenuItem</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		name=&quot;hello-menu-item&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		menu=&quot;view&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		&lt;Shell</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.exe&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			window=&quot;true&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		/&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	&lt;/MenuItem&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;/XenCenterPlugin&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Notice that we are using the window parameter set to true in this example, as we will be showing the plugin output on the console window.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. C# Code</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">We are going to write this example in C# and compile it into an executable to target from our plugin MenuItem. Create a C# Console Application project in Visual Studio and reference in the XenServer library from the v5.6 SDK.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">We can now begin editing the Program.cs file in your project. The way we handle parameters when using a Shell command is slightly different to the PowerShell Commands. Recall that each parameter set from XenCenter consists of four parameters and describes a selection in the XenCenter resource list. The first thing we do is to read off these parameters from the executable arguaments in groups of four to get each parameter set:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">static void Main(string[] args)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   List&lt;ParameterSet&gt; ParamSets;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   SeparateParams(args, out ParamSets);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">private static void SeparateParams(string[] args, out List&lt;ParameterSet&gt; ParamSets)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   ParamSets = new List&lt;ParameterSet&gt;();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   for (int i = 0; i &lt; args.Length; i += 4)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      ParamSets.Add(new ParameterSet(args[i], args[i + 1], args[i + 2], args[i + 3]));</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">public class ParameterSet</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   public string ServerURL = &quot;&quot;;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   public string SessionRef = &quot;&quot;;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   public string SelectedObjectClass = &quot;&quot;;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   public string SelectedObjectUuid = &quot;&quot;;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   public ParameterSet(string ServerURL, string SessionRef, string SelectedObjectClass, string SelectedObjectUuid)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   {</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      this.ServerURL = ServerURL;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      this.SessionRef = SessionRef;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      this.SelectedObjectClass = SelectedObjectClass;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">      this.SelectedObjectUuid = SelectedObjectUuid;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">   }</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">We can now use some of same logic that we did in the PowerShell example, going through each parameter set at a time and taking a list of selected object names - also noting if the XenCenter node is selected.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">bool XenCenterNodeSelected = false;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">List&lt;string&gt; names = new List&lt;string&gt;();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">foreach (ParameterSet pset in ParamSets)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	if (pset.SelectedObjectClass == &quot;blank&quot;)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		// Selecting the XenCenter node adds a parameter set per connected server, with the obj params set to &quot;blank&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		if (XenCenterNodeSelected)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			continue;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		names.Add(&quot;XenCenter&quot;);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		XenCenterNodeSelected = true;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	else if (pset.SessionRef == &quot;null&quot;)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		// Disconnected servers have no session information, and everything apart from the objects class is marked as &quot;null&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		names.Add(&quot;a disconnected server&quot;);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	else</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		// Use the session ref passedin by XenCenter. This means we don't have to log in or out.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		Session session = new Session(pset.ServerURL, pset.SessionRef);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		string name = &quot;&quot;;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		// Note: Alternatively you could use reflection here to construct and execute the correct methods</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		switch (pset.SelectedObjectClass.ToLowerInvariant())</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			case &quot;pool&quot;:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				name = Pool.get_record(session, Pool.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			case &quot;vm&quot;:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				name = VM.get_record(session, VM.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			case &quot;host&quot;:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				name = Host.get_record(session, Host.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			case &quot;sr&quot;:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				name = SR.get_record(session, SR.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			case &quot;network&quot;:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				name = Network.get_record(session, Network.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			case &quot;vdi&quot;:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				name = VDI.get_record(session, VDI.get_by_uuid(session, pset.SelectedObjectUuid)).name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			default:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				name = &quot;an unknown object&quot;;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">				break;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		names.Add(name);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">You can see here that we switch on the class of the parameter set, collect the reference to the server object using _get_by_uuid_ and then using that reference to get the object itself. You could remove the need to do an exhaustive switch such as this by using reflection if you desired.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Finally we output our greeting using this list of names to the console, using a sentence construct similar to the PowerShell version:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">string outputString = string.Format(&quot;Hello from {0}&quot;, names[0]);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	if (names.Count &gt; 1)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		outputString += PrettySentence(names.GetRange(1, names.Count - 1));</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	System.Console.WriteLine(outputString);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">private static string PrettySentence(List&lt;string&gt; items)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	string output = &quot;&quot;;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	//we are aiming for &quot;string_1, string_1, string_1...string_n-1 and string_n&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	for (int i = 0; i &lt; items.Count - 1; i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		output += string.Format(&quot;, {0}&quot;, items[i]);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	output += string.Format(&quot; and {0}&quot;, items[items.Count - 1]);</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	return output;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">If you try and execute this code you will be blocked by security failures. As part of using the SDK it is required that you define a policy for handling certificate validation.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">System.Net.ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">For the purposes of this simple example you could use the following method, but you should strongly consider implementing some validation before releasing a plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">// Ignore all cert validation (not recommended)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">internal static bool ValidateServerCertificate(</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	object sender,</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	X509Certificate certificate,</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	X509Chain chain,</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	SslPolicyErrors sslPolicyErrors)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	return true;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The complete code, including some error handling can be found [here|^Program.cs].</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Deployment</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">See the HelloWorld [powershell example|xs:HelloWorld Example - PowerShell] for details of how to produce your resources dll and package your files up into an installer.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Summary</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">This example covered the C# code you would need to write to communicate with XenServer and produce similar results to the PowerShell HelloWorld example.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'><a href='http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp#change1' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">- Compile a <span class="diffremovedchars">project</span> using [Program.cs|^Program.cs] to get your executable </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">- Compile a <span class="diffaddedchars">console application</span> using [Program.cs|^Program.cs] <span class="diffaddedchars">and referencing XenServer.dll from the XenServer C# Bindings</span> to get your executable </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- Use the [HelloWorld.xcplugin.xml|^HelloWorld.xcplugin.xml] as your plugin configuration file</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- [^HelloWorld.png] is an image file you can us for your icon</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a><a href='http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp#change0' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffdeleted">Put the compiled executable, the configuration <span class="diffremovedchars">file and</span> the icon image <span class="diffremovedchars">file</span> in &lt;XenCenterInstallDirectory&gt;\Plugins\Citrix\HelloWorld\ and start XenCenter to see the new menu item. </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">Put the compiled executable, the configuration <span class="diffaddedchars">file,</span> the icon image <span class="diffaddedchars">file, and XenServer.dll and CookComputing.XmlRpcV2.dll from the XenServer C# Bindings</span> in &lt;XenCenterInstallDirectory&gt;\Plugins\Citrix\HelloWorld\ and start XenCenter to see the new menu item. </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Screenshots</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!HelloWorldCSharpPrompt.png|align=centre!</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=139558963">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=139558963&version=7">Revert To Version 7</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/HelloWorld+Example+-+C+Sharp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian Lenny</title>
		<link>http://community.citrix.com/display/xs/Debian+Lenny</link>
		<comments>http://community.citrix.com/display/xs/Debian+Lenny#comments</comments>
		<pubDate>Mon, 28 Jun 2010 13:31:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/Debian+Lenny</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~ianca">ian campbell</a>
             - "Update for 5.0.5 point release."
        </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <h1><a name="DebianLenny-Introduction"></a>Introduction</h1>

<p>From version 5.5 onwards XenServer supports <a href="http://www.debian.org/releases/lenny/">Debian GNU/Linux 5</a> AKA "Lenny" as a guest Virtual Machine. This includes installation of Lenny from a standard Debian network mirror as well as installation from CD/DVD image.</p>

<p>Note that XenServer 5.5 only supports 32 bit installations of Lenny.</p>

<h1><a name="DebianLenny-InstallationFromDVD%2FCD"></a>Installation From DVD/CD</h1>

<p>Unfortunately at the time of release the Official Debian installation CD and DVD ISO images did not contain a XenServer-compatible kernel and therefore cannot be used with XenServer. To remedy this Citrix has made available a custom built Unofficial DVD image containing a XenServer-compatible kernel.</p>

<h2><a name="DebianLenny-DownloadingAXenServercompatibleinstallationISO"></a>Downloading A XenServer-compatible installation ISO</h2>

<p>Citrix has made the DVD image available using the <a href="http://atterer.net/jigdo/">Jigdo</a>(Jigsaw Download) utility. Jigdo allows ISO images to be downloaded quickly and efficiently by retrieving the majority of the data from a nearby mirror only obtaining a minimal template from the centralised download site.</p>

<p>If you have an existing Debian installation the obtaining jigdo is as simple as running</p>
<div class="preformatted panel" style="border-width: 1px"><div class="preformattedContent panelContent">
<pre># aptitude install jigdo-file
</pre>
</div></div>
<p>If you do not have an existing Debian installation then jigdo can be download from its&#160;<a href="http://atterer.net/jigdo/">website</a>. Jigdo is available for both Linux and Windows machines.</p>

<p>Once you have installed jigdo you should select a mirror from the <a href="http://www.debian.org/mirror/list">Debian Mirror List</a>. Choose a mirror which is geographically near to your location and which includes the i386 architecture. e.g <tt><a href="ftp://ftp.XX.debian.org/debian/">ftp://ftp.XX.debian.org/debian/</a></tt></p>

<p>After you have installed jigdo and selected a mirror you are ready to begin downloading the ISO from Citrix. Drop to a shell prompt or command line console. On Windows you will need to change to the directory where you unpacked jigdo.</p>

<p><img class="emoticon" src="/images/icons/emoticons/warning.gif" height="16" width="16" align="absmiddle" alt=""> <b>Note</b>: You must download the image from the URL given. The images available on Debian mirrors are not compatible with XenServer. <img class="emoticon" src="/images/icons/emoticons/warning.gif" height="16" width="16" align="absmiddle" alt=""></p>
<div class="preformatted panel" style="border-width: 1px"><div class="preformattedContent panelContent">
<pre># jigdo-lite http://ca.downloads.xensource.com/debian/lenny/debian-505-i386-source-xen-DVD-1.jigdo
</pre>
</div></div>
<p>Jigdo will automatically download the template file (around 40M in size) and then will prompt you for a location to scan for existing packages. This can be useful if you have already downloaded Official Lenny images since you can reuse many of the packages on Official CDs. To do this simply mount or insert the Official CD/DVD and enter the path to it.<br />
Next jigdo will prompt for a mirror to use, enter the mirror you selected above.</p>

<p>Jigdo will then begin downloading packages. If it complains about missing packages you should select another mirror and try again, this will not redownload any packages which were successfully retrieved.</p>

<p>When jigdo has completed it will leave debian-50-i386-source-xen-DVD-1.iso in the current directory.</p>

<h2><a name="DebianLenny-AddingAdditionalCD%2FDVDImages"></a>Adding Additional CD/DVD Images</h2>

<p>The custom XenServer-compatible DVD image contains a subset of the Debian software repository.</p>

<p>In order to access the remainder after installation you can either make use of a Debian network mirror in the normal way or you can add additional CD/DVD images using the Official images. To do this simply insert a CD/DVD into the virtual machine's CD drive and on the guest console run</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre># apt-cdrom add</pre>
</div></div>
<p>Repeat this for as many CD/DVD images as you are interested in.
<br />
<br /></p>

<h1><a name="DebianLenny-Support"></a>Support</h1>

<p>If you have an issue specifically relating to the download of the custom ISO image then please comment below.</p>

<p>If you have any other issue relating to Debian Lenny please use the regular forums and other support channels which exist for this purpose.</p>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/Debian+Lenny">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/Debian+Lenny?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/Debian+Lenny?pageVersion=12">revision 12</a>
            and <a href="/display/xs/Debian+Lenny">revision 13</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h1. Introduction</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">From version 5.5 onwards XenServer supports [Debian GNU/Linux 5&#124;http://www.debian.org/releases/lenny/] AKA &#34;Lenny&#34; as a guest Virtual Machine. This includes installation of Lenny from a standard Debian network mirror as well as installation from CD/DVD image.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Note that XenServer 5.5 only supports 32 bit installations of Lenny.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h1. Installation From DVD/CD</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Unfortunately at the time of release the Official Debian installation CD and DVD ISO images did not contain a XenServer-compatible kernel and therefore cannot be used with XenServer. To remedy this Citrix has made available a custom built Unofficial DVD image containing a XenServer-compatible kernel.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Downloading A XenServer-compatible installation ISO</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Citrix has made the DVD image available using the [Jigdo&#124;http://atterer.net/jigdo/](Jigsaw Download) utility. Jigdo allows ISO images to be downloaded quickly and efficiently by retrieving the majority of the data from a nearby mirror only obtaining a minimal template from the centralised download site.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">If you have an existing Debian installation the obtaining jigdo is as simple as running</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># aptitude install jigdo-file</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">If you do not have an existing Debian installation then jigdo can be download from its&#38;nbsp;[website&#124;http://atterer.net/jigdo/]. Jigdo is available for both Linux and Windows machines.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Once you have installed jigdo you should select a mirror from the [Debian Mirror List&#124;http://www.debian.org/mirror/list]. Choose a mirror which is geographically near to your location and which includes the i386 architecture. e.g {{[ftp://ftp.XX.debian.org/debian/]}}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">After you have installed jigdo and selected a mirror you are ready to begin downloading the ISO from Citrix. Drop to a shell prompt or command line console. On Windows you will need to change to the directory where you unpacked jigdo.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">(!) *Note*: You must download the image from the URL given. The images available on Debian mirrors are not compatible with XenServer. (!)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffdeleted"># jigdo-lite http://ca.downloads.xensource.com/debian/lenny/debian-504-i386-source-xen-DVD-1.jigdo</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded"># jigdo-lite http://ca.downloads.xensource.com/debian/lenny/debian-505-i386-source-xen-DVD-1.jigdo</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Jigdo will automatically download the template file (around 40M in size) and then will prompt you for a location to scan for existing packages. This can be useful if you have already downloaded Official Lenny images since you can reuse many of the packages on Official CDs. To do this simply mount or insert the Official CD/DVD and enter the path to it.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Next jigdo will prompt for a mirror to use, enter the mirror you selected above.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Jigdo will then begin downloading packages. If it complains about missing packages you should select another mirror and try again, this will not redownload any packages which were successfully retrieved.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">When jigdo has completed it will leave debian-50-i386-source-xen-DVD-1.iso in the current directory.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Adding Additional CD/DVD Images</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The custom XenServer-compatible DVD image contains a subset of the Debian software repository.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">In order to access the remainder after installation you can either make use of a Debian network mirror in the normal way or you can add additional CD/DVD images using the Official images. To do this simply insert a CD/DVD into the virtual machine's CD drive and on the guest console run</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># apt-cdrom add</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Repeat this for as many CD/DVD images as you are interested in.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h1. Support</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">If you have an issue specifically relating to the download of the custom ISO image then please comment below.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">If you have any other issue relating to Debian Lenny please use the regular forums and other support channels which exist for this purpose.</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=71237769">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=71237769&#38;version=12">Revert To Version 12</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~ianca">ian campbell</a>
             - "Update for 5.0.5 point release."
        </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <h1><a name="DebianLenny-Introduction"></a>Introduction</h1>

<p>From version 5.5 onwards XenServer supports <a href="http://www.debian.org/releases/lenny/">Debian GNU/Linux 5</a> AKA "Lenny" as a guest Virtual Machine. This includes installation of Lenny from a standard Debian network mirror as well as installation from CD/DVD image.</p>

<p>Note that XenServer 5.5 only supports 32 bit installations of Lenny.</p>

<h1><a name="DebianLenny-InstallationFromDVD%2FCD"></a>Installation From DVD/CD</h1>

<p>Unfortunately at the time of release the Official Debian installation CD and DVD ISO images did not contain a XenServer-compatible kernel and therefore cannot be used with XenServer. To remedy this Citrix has made available a custom built Unofficial DVD image containing a XenServer-compatible kernel.</p>

<h2><a name="DebianLenny-DownloadingAXenServercompatibleinstallationISO"></a>Downloading A XenServer-compatible installation ISO</h2>

<p>Citrix has made the DVD image available using the <a href="http://atterer.net/jigdo/">Jigdo</a>(Jigsaw Download) utility. Jigdo allows ISO images to be downloaded quickly and efficiently by retrieving the majority of the data from a nearby mirror only obtaining a minimal template from the centralised download site.</p>

<p>If you have an existing Debian installation the obtaining jigdo is as simple as running</p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre># aptitude install jigdo-file
</pre>
</div></div>
<p>If you do not have an existing Debian installation then jigdo can be download from its&nbsp;<a href="http://atterer.net/jigdo/">website</a>. Jigdo is available for both Linux and Windows machines.</p>

<p>Once you have installed jigdo you should select a mirror from the <a href="http://www.debian.org/mirror/list">Debian Mirror List</a>. Choose a mirror which is geographically near to your location and which includes the i386 architecture. e.g <tt><a href="ftp://ftp.XX.debian.org/debian/">ftp://ftp.XX.debian.org/debian/</a></tt></p>

<p>After you have installed jigdo and selected a mirror you are ready to begin downloading the ISO from Citrix. Drop to a shell prompt or command line console. On Windows you will need to change to the directory where you unpacked jigdo.</p>

<p><img class="emoticon" src="http://community.citrix.com/images/icons/emoticons/warning.gif" height="16" width="16" align="absmiddle" alt="" border="0"/> <b>Note</b>: You must download the image from the URL given. The images available on Debian mirrors are not compatible with XenServer. <img class="emoticon" src="http://community.citrix.com/images/icons/emoticons/warning.gif" height="16" width="16" align="absmiddle" alt="" border="0"/></p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre># jigdo-lite http://ca.downloads.xensource.com/debian/lenny/debian-505-i386-source-xen-DVD-1.jigdo
</pre>
</div></div>
<p>Jigdo will automatically download the template file (around 40M in size) and then will prompt you for a location to scan for existing packages. This can be useful if you have already downloaded Official Lenny images since you can reuse many of the packages on Official CDs. To do this simply mount or insert the Official CD/DVD and enter the path to it.<br/>
Next jigdo will prompt for a mirror to use, enter the mirror you selected above.</p>

<p>Jigdo will then begin downloading packages. If it complains about missing packages you should select another mirror and try again, this will not redownload any packages which were successfully retrieved.</p>

<p>When jigdo has completed it will leave debian-50-i386-source-xen-DVD-1.iso in the current directory.</p>

<h2><a name="DebianLenny-AddingAdditionalCD%2FDVDImages"></a>Adding Additional CD/DVD Images</h2>

<p>The custom XenServer-compatible DVD image contains a subset of the Debian software repository.</p>

<p>In order to access the remainder after installation you can either make use of a Debian network mirror in the normal way or you can add additional CD/DVD images using the Official images. To do this simply insert a CD/DVD into the virtual machine's CD drive and on the guest console run</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"># apt-cdrom add</pre>
</div></div>
<p>Repeat this for as many CD/DVD images as you are interested in.
<br clear="all" />
<br clear="all" /></p>

<h1><a name="DebianLenny-Support"></a>Support</h1>

<p>If you have an issue specifically relating to the download of the custom ISO image then please comment below.</p>

<p>If you have any other issue relating to Debian Lenny please use the regular forums and other support channels which exist for this purpose.</p>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/Debian+Lenny">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/Debian+Lenny?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/Debian+Lenny?pageVersion=12">revision 12</a>
            and <a href="http://community.citrix.com/display/xs/Debian+Lenny">revision 13</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h1. Introduction</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">From version 5.5 onwards XenServer supports [Debian GNU/Linux 5|http://www.debian.org/releases/lenny/] AKA &quot;Lenny&quot; as a guest Virtual Machine. This includes installation of Lenny from a standard Debian network mirror as well as installation from CD/DVD image.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Note that XenServer 5.5 only supports 32 bit installations of Lenny.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h1. Installation From DVD/CD</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Unfortunately at the time of release the Official Debian installation CD and DVD ISO images did not contain a XenServer-compatible kernel and therefore cannot be used with XenServer. To remedy this Citrix has made available a custom built Unofficial DVD image containing a XenServer-compatible kernel.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Downloading A XenServer-compatible installation ISO</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Citrix has made the DVD image available using the [Jigdo|http://atterer.net/jigdo/](Jigsaw Download) utility. Jigdo allows ISO images to be downloaded quickly and efficiently by retrieving the majority of the data from a nearby mirror only obtaining a minimal template from the centralised download site.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">If you have an existing Debian installation the obtaining jigdo is as simple as running</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># aptitude install jigdo-file</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">If you do not have an existing Debian installation then jigdo can be download from its&amp;nbsp;[website|http://atterer.net/jigdo/]. Jigdo is available for both Linux and Windows machines.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Once you have installed jigdo you should select a mirror from the [Debian Mirror List|http://www.debian.org/mirror/list]. Choose a mirror which is geographically near to your location and which includes the i386 architecture. e.g {{[ftp://ftp.XX.debian.org/debian/]}}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">After you have installed jigdo and selected a mirror you are ready to begin downloading the ISO from Citrix. Drop to a shell prompt or command line console. On Windows you will need to change to the directory where you unpacked jigdo.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">(!) *Note*: You must download the image from the URL given. The images available on Debian mirrors are not compatible with XenServer. (!)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffdeleted"># jigdo-lite http://ca.downloads.xensource.com/debian/lenny/debian-504-i386-source-xen-DVD-1.jigdo</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded"># jigdo-lite http://ca.downloads.xensource.com/debian/lenny/debian-505-i386-source-xen-DVD-1.jigdo</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Jigdo will automatically download the template file (around 40M in size) and then will prompt you for a location to scan for existing packages. This can be useful if you have already downloaded Official Lenny images since you can reuse many of the packages on Official CDs. To do this simply mount or insert the Official CD/DVD and enter the path to it.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Next jigdo will prompt for a mirror to use, enter the mirror you selected above.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Jigdo will then begin downloading packages. If it complains about missing packages you should select another mirror and try again, this will not redownload any packages which were successfully retrieved.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">When jigdo has completed it will leave debian-50-i386-source-xen-DVD-1.iso in the current directory.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Adding Additional CD/DVD Images</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The custom XenServer-compatible DVD image contains a subset of the Debian software repository.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">In order to access the remainder after installation you can either make use of a Debian network mirror in the normal way or you can add additional CD/DVD images using the Official images. To do this simply insert a CD/DVD into the virtual machine's CD drive and on the guest console run</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># apt-cdrom add</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Repeat this for as many CD/DVD images as you are interested in.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h1. Support</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">If you have an issue specifically relating to the download of the custom ISO image then please comment below.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">If you have any other issue relating to Debian Lenny please use the regular forums and other support channels which exist for this purpose.</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=71237769">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=71237769&version=12">Revert To Version 12</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/Debian+Lenny/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HelloWorld Example &#8211; PowerShell</title>
		<link>http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell</link>
		<comments>http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell#comments</comments>
		<pubDate>Mon, 28 Jun 2010 12:58:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <h2><a name="HelloWorldExample-PowerShell-Introduction"></a>Introduction</h2>

<p>Here is a short example which will guide you through the creation of a XenCenter plugin.</p>

<p><b>Objective:</b> We would like a new menu item in XenCenter which says "hello from ..." followed by the names of whichever objects are selected in the XenCenter resource list (treeview).</p>

<p>In this example we shall be using the XenServerPSSnapIn PowerShell bindings to communicate with the servers listed in XenCenter.</p>

<h2><a name="HelloWorldExample-PowerShell-Requirements"></a><b>Requirements</b></h2>

<p>The first step is to install the following requirements:</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Requirement <br /> </th>
<th class='confluenceTh'> Download Location <br /> </th>
</tr>
<tr>
<td class='confluenceTd'> .Net Framework v2.0 <br /> </td>
<td class='confluenceTd'> <a href="http://msdn.microsoft.com/en-us/netframework/aa731542.aspx">http://msdn.microsoft.com/en-us/netframework/aa731542.aspx</a> </td>
</tr>
<tr>
<td class='confluenceTd'> .Net Framework v2.0 SDK <br /> </td>
<td class='confluenceTd'> <a href="http://msdn.microsoft.com/en-us/netframework/aa731542.aspx">http://msdn.microsoft.com/en-us/netframework/aa731542.aspx</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Microsoft PowerShell v1.0 </td>
<td class='confluenceTd'> <a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx">http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenCenter v5.6 <br /> </td>
<td class='confluenceTd'> <a href="http://www.citrix.com/xenserver/download">http://www.citrix.com/xenserver/download</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenServerPSSnapIn v5.6 <br /> </td>
<td class='confluenceTd'> <a href="http://community.citrix.com/cdn/xs/sdks">http://community.citrix.com/cdn/xs/sdks</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Create&#45;PluginInstaller.ps1 <br /> </td>
<td class='confluenceTd'> <a href="/download/attachments/138773163/Create-PluginInstaller.ps1?version=1">Create-PluginInstaller.ps1</a> </td>
</tr>
</tbody></table>

<p>Also create the XenServerPSSnapIn directory as described on the <a href="/display/xs/XenCenter+Plugins" title="XenCenter Plugins">XenCenter Plugins</a> page.</p>

<h2><a name="HelloWorldExample-PowerShell-XCPluginfile"></a>XCPlugin file</h2>

<p>To add a menu item into XenCenter and call our PowerShell script we need to create a plugin configuration file.</p>

<p>We start with the XenCenterPlugin node with the following attributes:</p>
<ul>
	<li>xmlns - Specifies the schema of the XML file.</li>
	<li>version - The XenCenter Plugins version, we are using version 1.</li>
</ul>


<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>&#60;XenCenterPlugin xmlns=<span class="code-quote">"http://www.citrix.com/XenCenter/Plugins/schema"</span>
 version=<span class="code-quote">"1"</span>&#62;</pre>
</div></div>
<p>To create a menu item we add a MenuItem node under the XenCenterPlugin node. We give this three attributes:</p>
<ul>
	<li>name - For identfying the menu item.</li>
	<li>menu - The name of the menu under which the menu item should appear. Let's use the 'View' menu.</li>
	<li>serialized - Decides if copies of the plugin running simutaneously are allowed for the same object. Here we do not limit this so we set to "none".</li>
</ul>


<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-tag">&#60;MenuItem name=<span class="code-quote">"hello-menu-item"</span> menu=<span class="code-quote">"view"</span> serialized=<span class="code-quote">"none"</span>&#62;</span></pre>
</div></div>
<p>Next we add the XenServerPowerShell tag which points to a PowerShell script to run:</p>
<ul>
	<li>filename - The filepath of our target PowerShell script, relative to the install directory of the XenCenter executable.</li>
	<li>window - Whether to show the console window which runs the script. We don't want this, lets turn it off.</li>
</ul>


<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre><span class="code-tag">&#60;XenServerPowerShell filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.ps1"</span> window=<span class="code-quote">"false"</span> /&#62;</span></pre>
</div></div>
<p>Close off all the tags and save as <a href="/download/attachments/138773163/HelloWorld.xcplugin.xml?version=1">HelloWorld.xcplugin.xml</a>. The name of this file must be the same name as the name of the plugin directory in which it resides.</p>

<h2><a name="HelloWorldExample-PowerShell-Resources"></a>Resources</h2>

<p>The next step is to add some resources which provide strings and image paths for the plugin. These are stored in DLLs so that the correct language (if other cultures are provided) can be loaded at run-time.</p>

<p>First we need to create the resx file. This can be done using Visual Studio. Add strings for the menu-item labels, copyright statements, filepaths to icons etc. The names of the resources strings should be <em>&#60;name&#62;.&#60;property&#62;</em>, where <em>&#60;name&#62;</em> is the name given to the tag and <em>&#60;property&#62;</em> is one of the properties found in the <a href="/download/attachments/79167505/xc_plugins.pdf?version=2">specification</a>. Here is the resources table for this plugin.</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Name <br /> </th>
<th class='confluenceTh'> Value <br /> </th>
</tr>
<tr>
<td class='confluenceTd'> HelloWorld.description </td>
<td class='confluenceTd'> XenServer PowerShell plugin example. <br /> </td>
</tr>
<tr>
<td class='confluenceTd'> HelloWorld.copyright </td>
<td class='confluenceTd'> © Citrix Systems Inc. 2009 </td>
</tr>
<tr>
<td class='confluenceTd'> HelloWorld.link </td>
<td class='confluenceTd'> <a href="http://community.citrix.com/xencenter">http://community.citrix.com/xencenter</a> </td>
</tr>
<tr>
<td class='confluenceTd'> hello-menu-item.label </td>
<td class='confluenceTd'> Hello World&#33; </td>
</tr>
<tr>
<td class='confluenceTd'> hello-menu-item.description </td>
<td class='confluenceTd'> Displays 'Hello World' from the selected object. </td>
</tr>
<tr>
<td class='confluenceTd'> hello-menu-item.icon </td>
<td class='confluenceTd'> Plugins\Citrix\HelloWorld\HelloWorld.png </td>
</tr>
</tbody></table>
<p>&#160;The final step is to convert this .resx into a DLL. We do this with two tools:</p>
<ol>
	<li>ResGen.exe - Creates a .resources file from the resx. This can be found in the .NET framework SDK.</li>
	<li>Al.exe - Embeds the .resources file into a DLL. We specify we want to create a <em>library</em>, the file we wish to <em>embed</em>, that we need the <em>invariant culture</em> and the name of the DLL file. Al.exe is in the .NET framework directory.</li>
</ol>


<div class="preformatted panel" style="border-width: 1px"><div class="preformattedContent panelContent">
<pre>C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ResGen.exe HelloWorld.resx
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe /t:lib /embed:HelloWorld.resources
 /culture:0x007F /out:HelloWorld.resources.dll
</pre>
</div></div>
<p>Attachments: <a href="/download/attachments/138773163/HelloWorld.resx?version=1">HelloWorld.resx</a>, <a href="/download/attachments/138773163/HelloWorld.resources.dll?version=1">HelloWorld.resources.dll</a>, <a href="/download/attachments/138773163/HelloWorld.png?version=2">HelloWorld.png</a></p>

<h2><a name="HelloWorldExample-PowerShell-Thescript"></a>The PowerShell script</h2>

<p>We now need to write the script, which will compile a list of names from the selected objects in the resource list and show a message box with our "Hello from ..." in it.</p>

<p>XenCenter will pass in parameter sets to your plugin to let you know what is selected in the resource list, and to enable you to communicate with your connected servers. PowerShell plugins can access these parameter sets from the $ObjInfoArray variable which XenCenter populates before running your script.</p>

<h3><a name="HelloWorldExample-PowerShell-%24ObjInfoArray"></a>$ObjInfoArray</h3>

<p>This handy variable is an array of hashmaps. Each map represents a parameter set with the following keys - for each $map in $ObjInfoArray:</p>
<ul>
	<li><b>$map</b>[&#34;url&#34;] &#45; The URL of the server which owns the object selected in the tree view</li>
	<li><b>$map</b>[&#34;sessionRef&#34;] &#45; An authenticated session reference for the server (allows the script to log into the server)</li>
	<li><b>$map</b>[&#34;class&#34;] &#45; The type of the object selected: Server, VM etc</li>
	<li><b>$map</b>[&#34;objUuid&#34;] &#45; The UUID for the selected object.</li>
</ul>


<p>You will get:</p>
<ul>
	<li>One parameter set per object selected in the resource list.</li>
	<li>One parameter set per object in a folder if a folder is selected.</li>
	<li>One parameter set per connected server if the user has the XenCenter node selected. These are provided to allow you to communicate with any server if launched from the XenCenter node, however the "class" and "objUuid" keys will be marked as blank.</li>
</ul>


<p>Here is an example of how to use this array:</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>$SelectedObjectNames=@();
$XenCenterNodeSelected = 0;
#the object info array contains hashmaps, each of which represent a parameter set and describe a target in the XenCenter resource list
foreach($parameterSet in $ObjInfoArray)
{
	<span class="code-keyword">if</span> ($parameterSet[<span class="code-quote">"class"</span>] -eq <span class="code-quote">"blank"</span>)
	{
		#When the XenCenter node is selected a parameter set is created <span class="code-keyword">for</span> each of your connected servers with the class and objUuid keys marked as blank
		<span class="code-keyword">if</span> ($XenCenterNodeSelected)
		{
			<span class="code-keyword">continue</span>
		}
		$XenCenterNodeSelected = 1;
		$SelectedObjectNames += <span class="code-quote">"XenCenter"</span>
	}
	elseif ($parameterSet[<span class="code-quote">"sessionRef"</span>] -eq <span class="code-quote">"<span class="code-keyword">null</span>"</span>)
	{
		#When a disconnected server is selected there is no session information, we get <span class="code-keyword">null</span> <span class="code-keyword">for</span> everything except class
		$SelectedObjectNames += <span class="code-quote">"a disconnected server"</span>
	}
	<span class="code-keyword">else</span>
	{
		Connect-XenServer -url $parameterSet[<span class="code-quote">"url"</span>] -opaqueref $parameterSet[<span class="code-quote">"sessionRef"</span>]
		#Use $class to determine which server objects to get
		#-properties allows us to filter the results to just include the selected object
		$exp = <span class="code-quote">"Get-XenServer:{0} -properties @{{uuid='{1}'}}"</span> -f $parameterSet[<span class="code-quote">"class"</span>], $parameterSet[<span class="code-quote">"objUuid"</span>]
		$obj = Invoke-Expression $exp
		$SelectedObjectNames += $obj.name_label;
	}
}</pre>
</div></div>
<p>Looking at that final else block you can see that before any server commands can be used we need to connect to the server. We use the sessionRef from the existing connection in XenCenter which means we don't need to provide any new credentials.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>Connect-XenServer -url $parameterSet[<span class="code-quote">"url"</span>] -opaqueref $parameterSet[<span class="code-quote">"sessionRef"</span>]</pre>
</div></div>
<p>Then when we use XenServer commands they automatically use the session from the last Connect-XenServer call. We construct an expression using the class and uuid information we were given which will retrieve the object selected in the resource list.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>$exp = <span class="code-quote">"Get-XenServer:{0} -properties @{{uuid='{1}'}}"</span> -f $parameterSet[<span class="code-quote">"class"</span>], $parameterSet[<span class="code-quote">"objUuid"</span>]
$obj = Invoke-Expression $exp</pre>
</div></div>
<p>Because being pretty is important the following bit of code constructs a nice sentence out of our list of names, but equally you could just string join your name array at this point.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>$NameString = <span class="code-quote">"Hello from {0}"</span> -f $SelectedObjectNames[0];
<span class="code-keyword">if</span> ($SelectedObjectNames.length -gt 1)
{
	#we are aiming <span class="code-keyword">for</span> <span class="code-quote">"name_1, name_2, name_3...name_n-1 and name_n"</span>
	<span class="code-keyword">for</span> ($i=1; $i -lt $SelectedObjectNames.length - 1; $i++)
	{
		$NameString += <span class="code-quote">", {0}"</span> -f $SelectedObjectNames[$i]
	}
	$NameString += <span class="code-quote">" and {0}"</span> -f $SelectedObjectNames[$SelectedObjectNames.length - 1]
}</pre>
</div></div>
<p>Finally we use .NET Windows Forms to create an alert box by loading the correct DLL.</p>
<div class="code panel" style="border-width: 1px"><div class="codeContent panelContent">
<pre>[Reflection.Assembly]::loadwithpartialname('system.windows.forms')
[system.Windows.Forms.MessageBox]::show($NameString, <span class="code-quote">"Hello World"</span>)</pre>
</div></div>
<p>The full PowerShell script is <a href="/download/attachments/138773163/HelloWorld.ps1?version=1">HelloWorld.ps1</a></p>

<h2><a name="HelloWorldExample-PowerShell-Deployment"></a>Deployment</h2>

<p>The best way to distribute your XenCenter plugin is to package your plugin into a single MSI (Windows Installer) file.</p>

<p>Using a Windows Installer allows you to make sure the plugin is being installed into the correct place (by checking the XenCenter InstallDir registry key) and it gives versioning. A newer version will automatically uninstall the old version and then install the new one.</p>

<p>You can use the <a href="/download/attachments/138773163/Create-PluginInstaller.ps1?version=1">Create-PluginInstaller.ps1</a> PowerShell script to do this. The script requires WiX 2.0 and should be executed from your XenCenter install directory. The following command was used to makean msi for this plugin:
<br /></p>
<div class="preformatted panel" style="border-width: 1px"><div class="preformattedContent panelContent">
<pre> .\Create-PluginInstaller.ps1 -out HelloWorld.msi -title "XenCenter Hello World Plugin"
 -description "Sample plugin for XenCenter" -manufacturer Citrix -upgrade_code $([System.Guid]::NewGuid().ToString())
</pre>
</div></div>

<h2><a name="HelloWorldExample-PowerShell-Summary"></a>Summary</h2>

<p>This exampled covered all the basics of producing a MenuItem plugin for XenCenter using PowerShell. It also introduced how to resource and deploy your plugin.</p>

<p>Here are all the files you need to run the plugin again:</p>
<ul class="alternate" type="square">
	<li><a href="/download/attachments/138773163/HelloWorld.xcplugin.xml?version=1">HelloWorld.xcplugin.xml</a></li>
	<li><a href="/download/attachments/138773163/HelloWorld.resources.dll?version=1">HelloWorld.resources.dll</a>,</li>
	<li><a href="/download/attachments/138773163/HelloWorld.png?version=2">HelloWorld.png</a></li>
	<li><a href="/download/attachments/138773163/HelloWorld.ps1?version=1">HelloWorld.ps1</a></li>
</ul>


<p>Extract them to &#60;XenCenterInstallDirectory&#62;\Plugins\Citrix\HelloWorld\ and launch XenCenter to see the new menu item.</p>

<h2><a name="HelloWorldExample-PowerShell-Screenshots"></a>Screenshots</h2>

<p><br />  <div align="center"><img src="http://community.citrix.com/download/attachments/138773163/PluginDialog.png" border="0" /></div><br />  <div align="center"><img src="/download/attachments/138773163/MenuItemScreen.png" border="0" /></div><br />  <div align="center"><img src="/download/attachments/138773163/HelloPromptScreen.png" border="0" /></div><br />
<br />
<br />
<br /></p>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/HelloWorld+Example+-+PowerShell?pageVersion=10">revision 10</a>
            and <a href="/display/xs/HelloWorld+Example+-+PowerShell">revision 11</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Introduction</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Here is a short example which will guide you through the creation of a {nl:XenCenter} plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">*Objective:* We would like a new menu item in {nl:XenCenter} which says &#34;hello from ...&#34; followed by the names of whichever objects are selected in the {nl:XenCenter} resource list (treeview).</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">In this example we shall be using the {nl:XenServerPSSnapIn} {nl:PowerShell} bindings to communicate with the servers listed in {nl:XenCenter}.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. *Requirements*</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The first step is to install the following requirements:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124;&#124; Requirement \\ &#124;&#124; Download Location \\ &#124;&#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; .Net Framework v2.0 \\ &#124; [http://msdn.microsoft.com/en-us/netframework/aa731542.aspx] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; .Net Framework v2.0 SDK \\ &#124; [http://msdn.microsoft.com/en-us/netframework/aa731542.aspx] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Microsoft {nl:PowerShell} v1.0 &#124; [http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Citrix {nl:XenCenter} v5.6 \\ &#124; [http://www.citrix.com/xenserver/download] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Citrix {nl:XenServerPSSnapIn} v5.6 \\ &#124; [http://community.citrix.com/cdn/xs/sdks] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; Create\-{nl:PluginInstaller}.ps1 \\ &#124; [HelloWorld Example - PowerShell^Create-PluginInstaller.ps1] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">Also create the XenServerPSSnapIn directory as described on the [XenCenter Plugins] page.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffadded">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. XCPlugin file</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">To add a menu item into {nl:XenCenter} and call our PowerShell script we need to create a plugin configuration file.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">We start with the {nl:XenCenterPlugin} node with the following attributes:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* xmlns - Specifies the schema of the XML file.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* version - The {nl:XenCenter} Plugins version, we are using version 1.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code:xml}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenCenterPlugin xmlns=&#34;http://www.citrix.com/XenCenter/Plugins/schema&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"> version=&#34;1&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">To create a menu item we add a {nl:MenuItem} node under the {nl:XenCenterPlugin} node. We give this three attributes:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* name - For identfying the menu item.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* menu - The name of the menu under which the menu item should appear. Let's use the 'View' menu.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* serialized - Decides if copies of the plugin running simutaneously are allowed for the same object. Here we do not limit this so we set to &#34;none&#34;.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code:xml}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;MenuItem name=&#34;hello-menu-item&#34; menu=&#34;view&#34; serialized=&#34;none&#34;&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Next we add the {nl:XenServerPowerShell} tag which points to a {nl:PowerShell} script to run:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* filename - The filepath of our target {nl:PowerShell} script, relative to the install directory of the {nl:XenCenter} executable.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* window - Whether to show the console window which runs the script. We don't want this, lets turn it off.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code:xml}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#60;XenServerPowerShell filename=&#34;Plugins\Citrix\HelloWorld\HelloWorld.ps1&#34; window=&#34;false&#34; /&#62;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Close off all the tags and save as [HelloWorld Example - PowerShell^HelloWorld.xcplugin.xml]. The name of this file must be the same name as the name of the plugin directory in which it resides.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Resources</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The next step is to add some resources which provide strings and image paths for the plugin. These are stored in DLLs so that the correct language (if other cultures are provided) can be loaded at run-time.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">First we need to create the resx file. This can be done using Visual Studio. Add strings for the menu-item labels, copyright statements, filepaths to icons etc. The names of the resources strings should be _&#60;name&#62;.&#60;property&#62;_, where _&#60;name&#62;_ is the name given to the tag and _&#60;property&#62;_ is one of the properties found in the [specification&#124;XenCenter Plugins^xc_plugins.pdf]. Here is the resources table for this plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124;&#124; Name \\ &#124;&#124; Value \\ &#124;&#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; {nl:HelloWorld}.description &#124; {nl:XenServer} {nl:PowerShell} plugin example. \\ &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; {nl:HelloWorld}.copyright &#124; &#xA9; Citrix Systems Inc. 2009 &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; {nl:HelloWorld}.link &#124; [http://community.citrix.com/xencenter] &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; hello-menu-item.label &#124; Hello World\! &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; hello-menu-item.description &#124; Displays 'Hello World' from the selected object. &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#124; hello-menu-item.icon &#124; Plugins\Citrix\HelloWorld\HelloWorld.png &#124;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#38;nbsp;The final step is to convert this .resx into a DLL. We do this with two tools:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># {nl:ResGen}.exe - Creates a .resources file from the resx. This can be found in the .NET framework SDK.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"># Al.exe - Embeds the .resources file into a DLL. We specify we want to create a _library_, the file we wish to _embed_, that we need the _invariant culture_ and the name of the DLL file. Al.exe is in the .NET framework directory.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ResGen.exe HelloWorld.resx</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe /t:lib /embed:HelloWorld.resources</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"> /culture:0x007F /out:HelloWorld.resources.dll</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Attachments: [HelloWorld Example - PowerShell^HelloWorld.resx], [HelloWorld Example - PowerShell^HelloWorld.resources.dll], [^HelloWorld.png]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. The {nl:PowerShell} script</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">We now need to write the script, which will compile a list of names from the selected objects in the resource list and show a message box with our &#34;Hello from ...&#34; in it.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{nl:XenCenter} will pass in parameter sets to your plugin to let you know what is selected in the resource list, and to enable you to communicate with your connected servers. {nl:PowerShell} plugins can access these parameter sets from the $ObjInfoArray variable which {nl:XenCenter} populates before running your script.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. $ObjInfoArray</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">This handy variable is an array of hashmaps. Each map represents a parameter set with the following keys - for each $map in $ObjInfoArray:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *$map{*}{nl:[&#34;url&#34;]} \- The URL of the server which owns the object selected in the tree view</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *$map{*}{nl:[&#34;sessionRef&#34;]} \- An authenticated session reference for the server (allows the script to log into the server)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *$map{*}{nl:[&#34;class&#34;]} \- The type of the object selected: Server, VM etc</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *$map{*}{nl:[&#34;objUuid&#34;]} \- The UUID for the selected object.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">You will get:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* One parameter set per object selected in the resource list.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* One parameter set per object in a folder if a folder is selected.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* One parameter set per connected server if the user has the {nl:XenCenter} node selected. These are provided to allow you to communicate with any server if launched from the {nl:XenCenter} node, however the &#34;class&#34; and &#34;objUuid&#34; keys will be marked as blank.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Here is an example of how to use this array:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">$SelectedObjectNames=@();</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">$XenCenterNodeSelected = 0;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">#the object info array contains hashmaps, each of which represent a parameter set and describe a target in the XenCenter resource list</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">foreach($parameterSet in $ObjInfoArray)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	if ($parameterSet[&#34;class&#34;] -eq &#34;blank&#34;)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		#When the XenCenter node is selected a parameter set is created for each of your connected servers with the class and objUuid keys marked as blank</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		if ($XenCenterNodeSelected)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">			continue</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		$XenCenterNodeSelected = 1;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		$SelectedObjectNames += &#34;XenCenter&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	elseif ($parameterSet[&#34;sessionRef&#34;] -eq &#34;null&#34;)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		#When a disconnected server is selected there is no session information, we get null for everything except class</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		$SelectedObjectNames += &#34;a disconnected server&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	else</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		Connect-XenServer -url $parameterSet[&#34;url&#34;] -opaqueref $parameterSet[&#34;sessionRef&#34;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		#Use $class to determine which server objects to get</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		#-properties allows us to filter the results to just include the selected object</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		$exp = &#34;Get-XenServer:{0} -properties @{{uuid='{1}'}}&#34; -f $parameterSet[&#34;class&#34;], $parameterSet[&#34;objUuid&#34;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		$obj = Invoke-Expression $exp</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		$SelectedObjectNames += $obj.name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Looking at that final else block you can see that before any server commands can be used we need to connect to the server. We use the sessionRef from the existing connection in {nl:XenCenter} which means we don't need to provide any new credentials.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Connect-XenServer -url $parameterSet[&#34;url&#34;] -opaqueref $parameterSet[&#34;sessionRef&#34;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Then when we use {nl:XenServer} commands they automatically use the session from the last Connect-XenServer call. We construct an expression using the class and uuid information we were given which will retrieve the object selected in the resource list.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">$exp = &#34;Get-XenServer:{0} -properties @{{uuid='{1}'}}&#34; -f $parameterSet[&#34;class&#34;], $parameterSet[&#34;objUuid&#34;]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">$obj = Invoke-Expression $exp</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Because being pretty is important the following bit of code constructs a nice sentence out of our list of names, but equally you could just string join your name array at this point.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">$NameString = &#34;Hello from {0}&#34; -f $SelectedObjectNames[0];</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">if ($SelectedObjectNames.length -gt 1)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	#we are aiming for &#34;name_1, name_2, name_3...name_n-1 and name_n&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	for ($i=1; $i -lt $SelectedObjectNames.length - 1; $i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">		$NameString += &#34;, {0}&#34; -f $SelectedObjectNames[$i]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">	$NameString += &#34; and {0}&#34; -f $SelectedObjectNames[$SelectedObjectNames.length - 1]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Finally we use .NET Windows Forms to create an alert box by loading the correct DLL.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[Reflection.Assembly]::loadwithpartialname('system.windows.forms')</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[system.Windows.Forms.MessageBox]::show($NameString, &#34;Hello World&#34;)</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The full {nl:PowerShell} script is [HelloWorld Example - PowerShell^HelloWorld.ps1]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Deployment</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The best way to distribute your {nl:XenCenter} plugin is to package your plugin into a single MSI (Windows Installer) file.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Using a Windows Installer allows you to make sure the plugin is being installed into the correct place (by checking the {nl:XenCenter} {nl:InstallDir} registry key) and it gives versioning. A newer version will automatically uninstall the old version and then install the new one.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">You can use the [HelloWorld Example - PowerShell^Create-PluginInstaller.ps1] {nl:PowerShell} script to do this. The script requires WiX 2.0 and should be executed from your XenCenter install directory. The following command was used to makean msi for this plugin:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"> .\Create-PluginInstaller.ps1 -out HelloWorld.msi -title &#34;XenCenter Hello World Plugin&#34;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange"> -description &#34;Sample plugin for XenCenter&#34; -manufacturer Citrix -upgrade_code $([System.Guid]::NewGuid().ToString())</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Summary</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">This exampled covered all the basics of producing a MenuItem plugin for XenCenter using PowerShell. It also introduced how to resource and deploy your plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Here are all the files you need to run the plugin again:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- [HelloWorld Example - PowerShell^HelloWorld.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- [HelloWorld Example - PowerShell^HelloWorld.resources.dll],</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- [^HelloWorld.png]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">- [HelloWorld Example - PowerShell^HelloWorld.ps1]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Extract them to &#60;XenCenterInstallDirectory&#62;\Plugins\Citrix\HelloWorld\ and launch XenCenter to see the new menu item.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h2. Screenshots</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\  !PluginDialog.png&#124;align=center!\\  !MenuItemScreen.png&#124;align=center!\\  !HelloPromptScreen.png&#124;align=center!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=138773163">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=138773163&#38;version=10">Revert To Version 10</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <h2><a name="HelloWorldExample-PowerShell-Introduction"></a>Introduction</h2>

<p>Here is a short example which will guide you through the creation of a XenCenter plugin.</p>

<p><b>Objective:</b> We would like a new menu item in XenCenter which says "hello from ..." followed by the names of whichever objects are selected in the XenCenter resource list (treeview).</p>

<p>In this example we shall be using the XenServerPSSnapIn PowerShell bindings to communicate with the servers listed in XenCenter.</p>

<h2><a name="HelloWorldExample-PowerShell-Requirements"></a><b>Requirements</b></h2>

<p>The first step is to install the following requirements:</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Requirement <br clear="all" /> </th>
<th class='confluenceTh'> Download Location <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> .Net Framework v2.0 <br clear="all" /> </td>
<td class='confluenceTd'> <a href="http://msdn.microsoft.com/en-us/netframework/aa731542.aspx">http://msdn.microsoft.com/en-us/netframework/aa731542.aspx</a> </td>
</tr>
<tr>
<td class='confluenceTd'> .Net Framework v2.0 SDK <br clear="all" /> </td>
<td class='confluenceTd'> <a href="http://msdn.microsoft.com/en-us/netframework/aa731542.aspx">http://msdn.microsoft.com/en-us/netframework/aa731542.aspx</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Microsoft PowerShell v1.0 </td>
<td class='confluenceTd'> <a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx">http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenCenter v5.6 <br clear="all" /> </td>
<td class='confluenceTd'> <a href="http://www.citrix.com/xenserver/download">http://www.citrix.com/xenserver/download</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Citrix XenServerPSSnapIn v5.6 <br clear="all" /> </td>
<td class='confluenceTd'> <a href="http://community.citrix.com/cdn/xs/sdks">http://community.citrix.com/cdn/xs/sdks</a> </td>
</tr>
<tr>
<td class='confluenceTd'> Create&#45;PluginInstaller.ps1 <br clear="all" /> </td>
<td class='confluenceTd'> <a href="http://community.citrix.com/download/attachments/138773163/Create-PluginInstaller.ps1?version=1">Create-PluginInstaller.ps1</a> </td>
</tr>
</tbody></table>

<p>Also create the XenServerPSSnapIn directory as described on the <a href="http://community.citrix.com/display/xs/XenCenter+Plugins" title="XenCenter Plugins">XenCenter Plugins</a> page.</p>

<h2><a name="HelloWorldExample-PowerShell-XCPluginfile"></a>XCPlugin file</h2>

<p>To add a menu item into XenCenter and call our PowerShell script we need to create a plugin configuration file.</p>

<p>We start with the XenCenterPlugin node with the following attributes:</p>
<ul>
	<li>xmlns - Specifies the schema of the XML file.</li>
	<li>version - The XenCenter Plugins version, we are using version 1.</li>
</ul>


<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">&lt;XenCenterPlugin xmlns=<span class="code-quote">"http://www.citrix.com/XenCenter/Plugins/schema"</span>
 version=<span class="code-quote">"1"</span>&gt;</pre>
</div></div>
<p>To create a menu item we add a MenuItem node under the XenCenterPlugin node. We give this three attributes:</p>
<ul>
	<li>name - For identfying the menu item.</li>
	<li>menu - The name of the menu under which the menu item should appear. Let's use the 'View' menu.</li>
	<li>serialized - Decides if copies of the plugin running simutaneously are allowed for the same object. Here we do not limit this so we set to "none".</li>
</ul>


<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml"><span class="code-tag">&lt;MenuItem name=<span class="code-quote">"hello-menu-item"</span> menu=<span class="code-quote">"view"</span> serialized=<span class="code-quote">"none"</span>&gt;</span></pre>
</div></div>
<p>Next we add the XenServerPowerShell tag which points to a PowerShell script to run:</p>
<ul>
	<li>filename - The filepath of our target PowerShell script, relative to the install directory of the XenCenter executable.</li>
	<li>window - Whether to show the console window which runs the script. We don't want this, lets turn it off.</li>
</ul>


<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml"><span class="code-tag">&lt;XenServerPowerShell filename=<span class="code-quote">"Plugins\Citrix\HelloWorld\HelloWorld.ps1"</span> window=<span class="code-quote">"false"</span> /&gt;</span></pre>
</div></div>
<p>Close off all the tags and save as <a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.xcplugin.xml?version=1">HelloWorld.xcplugin.xml</a>. The name of this file must be the same name as the name of the plugin directory in which it resides.</p>

<h2><a name="HelloWorldExample-PowerShell-Resources"></a>Resources</h2>

<p>The next step is to add some resources which provide strings and image paths for the plugin. These are stored in DLLs so that the correct language (if other cultures are provided) can be loaded at run-time.</p>

<p>First we need to create the resx file. This can be done using Visual Studio. Add strings for the menu-item labels, copyright statements, filepaths to icons etc. The names of the resources strings should be <em>&lt;name&gt;.&lt;property&gt;</em>, where <em>&lt;name&gt;</em> is the name given to the tag and <em>&lt;property&gt;</em> is one of the properties found in the <a href="http://community.citrix.com/download/attachments/79167505/xc_plugins.pdf?version=2">specification</a>. Here is the resources table for this plugin.</p>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'> Name <br clear="all" /> </th>
<th class='confluenceTh'> Value <br clear="all" /> </th>
</tr>
<tr>
<td class='confluenceTd'> HelloWorld.description </td>
<td class='confluenceTd'> XenServer PowerShell plugin example. <br clear="all" /> </td>
</tr>
<tr>
<td class='confluenceTd'> HelloWorld.copyright </td>
<td class='confluenceTd'> © Citrix Systems Inc. 2009 </td>
</tr>
<tr>
<td class='confluenceTd'> HelloWorld.link </td>
<td class='confluenceTd'> <a href="http://community.citrix.com/xencenter">http://community.citrix.com/xencenter</a> </td>
</tr>
<tr>
<td class='confluenceTd'> hello-menu-item.label </td>
<td class='confluenceTd'> Hello World&#33; </td>
</tr>
<tr>
<td class='confluenceTd'> hello-menu-item.description </td>
<td class='confluenceTd'> Displays 'Hello World' from the selected object. </td>
</tr>
<tr>
<td class='confluenceTd'> hello-menu-item.icon </td>
<td class='confluenceTd'> Plugins\Citrix\HelloWorld\HelloWorld.png </td>
</tr>
</tbody></table>
<p>&nbsp;The final step is to convert this .resx into a DLL. We do this with two tools:</p>
<ol>
	<li>ResGen.exe - Creates a .resources file from the resx. This can be found in the .NET framework SDK.</li>
	<li>Al.exe - Embeds the .resources file into a DLL. We specify we want to create a <em>library</em>, the file we wish to <em>embed</em>, that we need the <em>invariant culture</em> and the name of the DLL file. Al.exe is in the .NET framework directory.</li>
</ol>


<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre>C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ResGen.exe HelloWorld.resx
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe /t:lib /embed:HelloWorld.resources
 /culture:0x007F /out:HelloWorld.resources.dll
</pre>
</div></div>
<p>Attachments: <a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.resx?version=1">HelloWorld.resx</a>, <a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.resources.dll?version=1">HelloWorld.resources.dll</a>, <a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.png?version=2">HelloWorld.png</a></p>

<h2><a name="HelloWorldExample-PowerShell-Thescript"></a>The PowerShell script</h2>

<p>We now need to write the script, which will compile a list of names from the selected objects in the resource list and show a message box with our "Hello from ..." in it.</p>

<p>XenCenter will pass in parameter sets to your plugin to let you know what is selected in the resource list, and to enable you to communicate with your connected servers. PowerShell plugins can access these parameter sets from the $ObjInfoArray variable which XenCenter populates before running your script.</p>

<h3><a name="HelloWorldExample-PowerShell-%24ObjInfoArray"></a>$ObjInfoArray</h3>

<p>This handy variable is an array of hashmaps. Each map represents a parameter set with the following keys - for each $map in $ObjInfoArray:</p>
<ul>
	<li><b>$map</b>[&quot;url&quot;] &#45; The URL of the server which owns the object selected in the tree view</li>
	<li><b>$map</b>[&quot;sessionRef&quot;] &#45; An authenticated session reference for the server (allows the script to log into the server)</li>
	<li><b>$map</b>[&quot;class&quot;] &#45; The type of the object selected: Server, VM etc</li>
	<li><b>$map</b>[&quot;objUuid&quot;] &#45; The UUID for the selected object.</li>
</ul>


<p>You will get:</p>
<ul>
	<li>One parameter set per object selected in the resource list.</li>
	<li>One parameter set per object in a folder if a folder is selected.</li>
	<li>One parameter set per connected server if the user has the XenCenter node selected. These are provided to allow you to communicate with any server if launched from the XenCenter node, however the "class" and "objUuid" keys will be marked as blank.</li>
</ul>


<p>Here is an example of how to use this array:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">$SelectedObjectNames=@();
$XenCenterNodeSelected = 0;
#the object info array contains hashmaps, each of which represent a parameter set and describe a target in the XenCenter resource list
foreach($parameterSet in $ObjInfoArray)
{
	<span class="code-keyword">if</span> ($parameterSet[<span class="code-quote">"class"</span>] -eq <span class="code-quote">"blank"</span>)
	{
		#When the XenCenter node is selected a parameter set is created <span class="code-keyword">for</span> each of your connected servers with the class and objUuid keys marked as blank
		<span class="code-keyword">if</span> ($XenCenterNodeSelected)
		{
			<span class="code-keyword">continue</span>
		}
		$XenCenterNodeSelected = 1;
		$SelectedObjectNames += <span class="code-quote">"XenCenter"</span>
	}
	elseif ($parameterSet[<span class="code-quote">"sessionRef"</span>] -eq <span class="code-quote">"<span class="code-keyword">null</span>"</span>)
	{
		#When a disconnected server is selected there is no session information, we get <span class="code-keyword">null</span> <span class="code-keyword">for</span> everything except class
		$SelectedObjectNames += <span class="code-quote">"a disconnected server"</span>
	}
	<span class="code-keyword">else</span>
	{
		Connect-XenServer -url $parameterSet[<span class="code-quote">"url"</span>] -opaqueref $parameterSet[<span class="code-quote">"sessionRef"</span>]
		#Use $class to determine which server objects to get
		#-properties allows us to filter the results to just include the selected object
		$exp = <span class="code-quote">"Get-XenServer:{0} -properties @{{uuid='{1}'}}"</span> -f $parameterSet[<span class="code-quote">"class"</span>], $parameterSet[<span class="code-quote">"objUuid"</span>]
		$obj = Invoke-Expression $exp
		$SelectedObjectNames += $obj.name_label;
	}
}</pre>
</div></div>
<p>Looking at that final else block you can see that before any server commands can be used we need to connect to the server. We use the sessionRef from the existing connection in XenCenter which means we don't need to provide any new credentials.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">Connect-XenServer -url $parameterSet[<span class="code-quote">"url"</span>] -opaqueref $parameterSet[<span class="code-quote">"sessionRef"</span>]</pre>
</div></div>
<p>Then when we use XenServer commands they automatically use the session from the last Connect-XenServer call. We construct an expression using the class and uuid information we were given which will retrieve the object selected in the resource list.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">$exp = <span class="code-quote">"Get-XenServer:{0} -properties @{{uuid='{1}'}}"</span> -f $parameterSet[<span class="code-quote">"class"</span>], $parameterSet[<span class="code-quote">"objUuid"</span>]
$obj = Invoke-Expression $exp</pre>
</div></div>
<p>Because being pretty is important the following bit of code constructs a nice sentence out of our list of names, but equally you could just string join your name array at this point.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">$NameString = <span class="code-quote">"Hello from {0}"</span> -f $SelectedObjectNames[0];
<span class="code-keyword">if</span> ($SelectedObjectNames.length -gt 1)
{
	#we are aiming <span class="code-keyword">for</span> <span class="code-quote">"name_1, name_2, name_3...name_n-1 and name_n"</span>
	<span class="code-keyword">for</span> ($i=1; $i -lt $SelectedObjectNames.length - 1; $i++)
	{
		$NameString += <span class="code-quote">", {0}"</span> -f $SelectedObjectNames[$i]
	}
	$NameString += <span class="code-quote">" and {0}"</span> -f $SelectedObjectNames[$SelectedObjectNames.length - 1]
}</pre>
</div></div>
<p>Finally we use .NET Windows Forms to create an alert box by loading the correct DLL.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">[Reflection.Assembly]::loadwithpartialname('system.windows.forms')
[system.Windows.Forms.MessageBox]::show($NameString, <span class="code-quote">"Hello World"</span>)</pre>
</div></div>
<p>The full PowerShell script is <a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.ps1?version=1">HelloWorld.ps1</a></p>

<h2><a name="HelloWorldExample-PowerShell-Deployment"></a>Deployment</h2>

<p>The best way to distribute your XenCenter plugin is to package your plugin into a single MSI (Windows Installer) file.</p>

<p>Using a Windows Installer allows you to make sure the plugin is being installed into the correct place (by checking the XenCenter InstallDir registry key) and it gives versioning. A newer version will automatically uninstall the old version and then install the new one.</p>

<p>You can use the <a href="http://community.citrix.com/download/attachments/138773163/Create-PluginInstaller.ps1?version=1">Create-PluginInstaller.ps1</a> PowerShell script to do this. The script requires WiX 2.0 and should be executed from your XenCenter install directory. The following command was used to makean msi for this plugin:
<br clear="all" /></p>
<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedContent panelContent">
<pre> .\Create-PluginInstaller.ps1 -out HelloWorld.msi -title "XenCenter Hello World Plugin"
 -description "Sample plugin for XenCenter" -manufacturer Citrix -upgrade_code $([System.Guid]::NewGuid().ToString())
</pre>
</div></div>

<h2><a name="HelloWorldExample-PowerShell-Summary"></a>Summary</h2>

<p>This exampled covered all the basics of producing a MenuItem plugin for XenCenter using PowerShell. It also introduced how to resource and deploy your plugin.</p>

<p>Here are all the files you need to run the plugin again:</p>
<ul class="alternate" type="square">
	<li><a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.xcplugin.xml?version=1">HelloWorld.xcplugin.xml</a></li>
	<li><a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.resources.dll?version=1">HelloWorld.resources.dll</a>,</li>
	<li><a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.png?version=2">HelloWorld.png</a></li>
	<li><a href="http://community.citrix.com/download/attachments/138773163/HelloWorld.ps1?version=1">HelloWorld.ps1</a></li>
</ul>


<p>Extract them to &lt;XenCenterInstallDirectory&gt;\Plugins\Citrix\HelloWorld\ and launch XenCenter to see the new menu item.</p>

<h2><a name="HelloWorldExample-PowerShell-Screenshots"></a>Screenshots</h2>

<p><br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/138773163/PluginDialog.png" border="0" /></div><br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/138773163/MenuItemScreen.png" border="0" /></div><br clear="all" />  <div align="center"><img src="http://community.citrix.com/download/attachments/138773163/HelloPromptScreen.png" border="0" /></div><br clear="all" />
<br clear="all" />
<br clear="all" />
<br clear="all" /></p>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell?pageVersion=10">revision 10</a>
            and <a href="http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell">revision 11</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Introduction</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Here is a short example which will guide you through the creation of a {nl:XenCenter} plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">*Objective:* We would like a new menu item in {nl:XenCenter} which says &quot;hello from ...&quot; followed by the names of whichever objects are selected in the {nl:XenCenter} resource list (treeview).</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">In this example we shall be using the {nl:XenServerPSSnapIn} {nl:PowerShell} bindings to communicate with the servers listed in {nl:XenCenter}.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. *Requirements*</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The first step is to install the following requirements:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">|| Requirement \\ || Download Location \\ ||</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| .Net Framework v2.0 \\ | [http://msdn.microsoft.com/en-us/netframework/aa731542.aspx] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| .Net Framework v2.0 SDK \\ | [http://msdn.microsoft.com/en-us/netframework/aa731542.aspx] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Microsoft {nl:PowerShell} v1.0 | [http://www.microsoft.com/windowsserver2003/technologies/management/powershell/default.mspx] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Citrix {nl:XenCenter} v5.6 \\ | [http://www.citrix.com/xenserver/download] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Citrix {nl:XenServerPSSnapIn} v5.6 \\ | [http://community.citrix.com/cdn/xs/sdks] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| Create\-{nl:PluginInstaller}.ps1 \\ | [HelloWorld Example - PowerShell^Create-PluginInstaller.ps1] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">Also create the XenServerPSSnapIn directory as described on the [XenCenter Plugins] page.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffadded">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. XCPlugin file</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">To add a menu item into {nl:XenCenter} and call our PowerShell script we need to create a plugin configuration file.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">We start with the {nl:XenCenterPlugin} node with the following attributes:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* xmlns - Specifies the schema of the XML file.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* version - The {nl:XenCenter} Plugins version, we are using version 1.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code:xml}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenCenterPlugin xmlns=&quot;http://www.citrix.com/XenCenter/Plugins/schema&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"> version=&quot;1&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">To create a menu item we add a {nl:MenuItem} node under the {nl:XenCenterPlugin} node. We give this three attributes:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* name - For identfying the menu item.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* menu - The name of the menu under which the menu item should appear. Let's use the 'View' menu.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* serialized - Decides if copies of the plugin running simutaneously are allowed for the same object. Here we do not limit this so we set to &quot;none&quot;.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code:xml}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;MenuItem name=&quot;hello-menu-item&quot; menu=&quot;view&quot; serialized=&quot;none&quot;&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Next we add the {nl:XenServerPowerShell} tag which points to a {nl:PowerShell} script to run:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* filename - The filepath of our target {nl:PowerShell} script, relative to the install directory of the {nl:XenCenter} executable.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* window - Whether to show the console window which runs the script. We don't want this, lets turn it off.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code:xml}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&lt;XenServerPowerShell filename=&quot;Plugins\Citrix\HelloWorld\HelloWorld.ps1&quot; window=&quot;false&quot; /&gt;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Close off all the tags and save as [HelloWorld Example - PowerShell^HelloWorld.xcplugin.xml]. The name of this file must be the same name as the name of the plugin directory in which it resides.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Resources</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The next step is to add some resources which provide strings and image paths for the plugin. These are stored in DLLs so that the correct language (if other cultures are provided) can be loaded at run-time.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">First we need to create the resx file. This can be done using Visual Studio. Add strings for the menu-item labels, copyright statements, filepaths to icons etc. The names of the resources strings should be _&lt;name&gt;.&lt;property&gt;_, where _&lt;name&gt;_ is the name given to the tag and _&lt;property&gt;_ is one of the properties found in the [specification|XenCenter Plugins^xc_plugins.pdf]. Here is the resources table for this plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">|| Name \\ || Value \\ ||</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| {nl:HelloWorld}.description | {nl:XenServer} {nl:PowerShell} plugin example. \\ |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| {nl:HelloWorld}.copyright | &#xA9; Citrix Systems Inc. 2009 |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| {nl:HelloWorld}.link | [http://community.citrix.com/xencenter] |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| hello-menu-item.label | Hello World\! |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| hello-menu-item.description | Displays 'Hello World' from the selected object. |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">| hello-menu-item.icon | Plugins\Citrix\HelloWorld\HelloWorld.png |</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&amp;nbsp;The final step is to convert this .resx into a DLL. We do this with two tools:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># {nl:ResGen}.exe - Creates a .resources file from the resx. This can be found in the .NET framework SDK.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"># Al.exe - Embeds the .resources file into a DLL. We specify we want to create a _library_, the file we wish to _embed_, that we need the _invariant culture_ and the name of the DLL file. Al.exe is in the .NET framework directory.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\ResGen.exe HelloWorld.resx</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\al.exe /t:lib /embed:HelloWorld.resources</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"> /culture:0x007F /out:HelloWorld.resources.dll</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Attachments: [HelloWorld Example - PowerShell^HelloWorld.resx], [HelloWorld Example - PowerShell^HelloWorld.resources.dll], [^HelloWorld.png]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. The {nl:PowerShell} script</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">We now need to write the script, which will compile a list of names from the selected objects in the resource list and show a message box with our &quot;Hello from ...&quot; in it.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{nl:XenCenter} will pass in parameter sets to your plugin to let you know what is selected in the resource list, and to enable you to communicate with your connected servers. {nl:PowerShell} plugins can access these parameter sets from the $ObjInfoArray variable which {nl:XenCenter} populates before running your script.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. $ObjInfoArray</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">This handy variable is an array of hashmaps. Each map represents a parameter set with the following keys - for each $map in $ObjInfoArray:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *$map{*}{nl:[&quot;url&quot;]} \- The URL of the server which owns the object selected in the tree view</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *$map{*}{nl:[&quot;sessionRef&quot;]} \- An authenticated session reference for the server (allows the script to log into the server)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *$map{*}{nl:[&quot;class&quot;]} \- The type of the object selected: Server, VM etc</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *$map{*}{nl:[&quot;objUuid&quot;]} \- The UUID for the selected object.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">You will get:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* One parameter set per object selected in the resource list.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* One parameter set per object in a folder if a folder is selected.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* One parameter set per connected server if the user has the {nl:XenCenter} node selected. These are provided to allow you to communicate with any server if launched from the {nl:XenCenter} node, however the &quot;class&quot; and &quot;objUuid&quot; keys will be marked as blank.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Here is an example of how to use this array:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">$SelectedObjectNames=@();</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">$XenCenterNodeSelected = 0;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">#the object info array contains hashmaps, each of which represent a parameter set and describe a target in the XenCenter resource list</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">foreach($parameterSet in $ObjInfoArray)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	if ($parameterSet[&quot;class&quot;] -eq &quot;blank&quot;)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		#When the XenCenter node is selected a parameter set is created for each of your connected servers with the class and objUuid keys marked as blank</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		if ($XenCenterNodeSelected)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">			continue</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		$XenCenterNodeSelected = 1;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		$SelectedObjectNames += &quot;XenCenter&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	elseif ($parameterSet[&quot;sessionRef&quot;] -eq &quot;null&quot;)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		#When a disconnected server is selected there is no session information, we get null for everything except class</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		$SelectedObjectNames += &quot;a disconnected server&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	else</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		Connect-XenServer -url $parameterSet[&quot;url&quot;] -opaqueref $parameterSet[&quot;sessionRef&quot;]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		#Use $class to determine which server objects to get</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		#-properties allows us to filter the results to just include the selected object</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		$exp = &quot;Get-XenServer:{0} -properties @{{uuid='{1}'}}&quot; -f $parameterSet[&quot;class&quot;], $parameterSet[&quot;objUuid&quot;]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		$obj = Invoke-Expression $exp</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		$SelectedObjectNames += $obj.name_label;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Looking at that final else block you can see that before any server commands can be used we need to connect to the server. We use the sessionRef from the existing connection in {nl:XenCenter} which means we don't need to provide any new credentials.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Connect-XenServer -url $parameterSet[&quot;url&quot;] -opaqueref $parameterSet[&quot;sessionRef&quot;]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Then when we use {nl:XenServer} commands they automatically use the session from the last Connect-XenServer call. We construct an expression using the class and uuid information we were given which will retrieve the object selected in the resource list.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">$exp = &quot;Get-XenServer:{0} -properties @{{uuid='{1}'}}&quot; -f $parameterSet[&quot;class&quot;], $parameterSet[&quot;objUuid&quot;]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">$obj = Invoke-Expression $exp</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Because being pretty is important the following bit of code constructs a nice sentence out of our list of names, but equally you could just string join your name array at this point.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">$NameString = &quot;Hello from {0}&quot; -f $SelectedObjectNames[0];</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">if ($SelectedObjectNames.length -gt 1)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	#we are aiming for &quot;name_1, name_2, name_3...name_n-1 and name_n&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	for ($i=1; $i -lt $SelectedObjectNames.length - 1; $i++)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	{</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">		$NameString += &quot;, {0}&quot; -f $SelectedObjectNames[$i]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">	$NameString += &quot; and {0}&quot; -f $SelectedObjectNames[$SelectedObjectNames.length - 1]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Finally we use .NET Windows Forms to create an alert box by loading the correct DLL.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[Reflection.Assembly]::loadwithpartialname('system.windows.forms')</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[system.Windows.Forms.MessageBox]::show($NameString, &quot;Hello World&quot;)</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{code}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The full {nl:PowerShell} script is [HelloWorld Example - PowerShell^HelloWorld.ps1]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Deployment</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The best way to distribute your {nl:XenCenter} plugin is to package your plugin into a single MSI (Windows Installer) file.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Using a Windows Installer allows you to make sure the plugin is being installed into the correct place (by checking the {nl:XenCenter} {nl:InstallDir} registry key) and it gives versioning. A newer version will automatically uninstall the old version and then install the new one.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">You can use the [HelloWorld Example - PowerShell^Create-PluginInstaller.ps1] {nl:PowerShell} script to do this. The script requires WiX 2.0 and should be executed from your XenCenter install directory. The following command was used to makean msi for this plugin:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"> .\Create-PluginInstaller.ps1 -out HelloWorld.msi -title &quot;XenCenter Hello World Plugin&quot;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange"> -description &quot;Sample plugin for XenCenter&quot; -manufacturer Citrix -upgrade_code $([System.Guid]::NewGuid().ToString())</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{noformat}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Summary</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">This exampled covered all the basics of producing a MenuItem plugin for XenCenter using PowerShell. It also introduced how to resource and deploy your plugin.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Here are all the files you need to run the plugin again:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- [HelloWorld Example - PowerShell^HelloWorld.xcplugin.xml]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- [HelloWorld Example - PowerShell^HelloWorld.resources.dll],</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- [^HelloWorld.png]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">- [HelloWorld Example - PowerShell^HelloWorld.ps1]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Extract them to &lt;XenCenterInstallDirectory&gt;\Plugins\Citrix\HelloWorld\ and launch XenCenter to see the new menu item.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h2. Screenshots</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\  !PluginDialog.png|align=center!\\  !MenuItemScreen.png|align=center!\\  !HelloPromptScreen.png|align=center!\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=138773163">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=138773163&version=10">Revert To Version 10</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/HelloWorld+Example+-+PowerShell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XenCenter</title>
		<link>http://community.citrix.com/display/xs/XenCenter</link>
		<comments>http://community.citrix.com/display/xs/XenCenter#comments</comments>
		<pubDate>Mon, 28 Jun 2010 10:12:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[citrix]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[xen]]></category>

		<guid isPermaLink="false">http://community.citrix.com/display/xs/XenCenter</guid>
		<description><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd;border-bottom: 1px solid #ddd;padding: 10px">
         <table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="75%">
<p><br /></p></td>
<td class="confluenceTd" valign="top">
<div class='panelMacro'><table class='tipMacro'><col width='24'><col><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>   Permanent URL</b><br />
<pre><a href="http://community.citrix.com/xencenter">http://community.citrix.com/xencenter</a> &#160;&#160;&#160;&#160;</pre></td></tr></table></div></td>
<td class="confluenceTd" valign="top" width="5%">
<p><br /></p></td></tr></tbody></table>

<div class="panel" style="border-width: 1px"><div class="panelContent">
<p>The XenCenter team is hiring!  Visit the <a href="/display/xs/XenCenter+Jobs" title="XenCenter Jobs">XenCenter Jobs</a> page for details.</p>
</div></div>

<p><br /></p>

<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="XenCenter-"></a><font color="#003366">&#160;&#160;&#160;XenCenter Features</font></h3></div>
<p>Citrix XenCenter is the Windows-native graphical user interface for managing Citrix XenServer.</p>

<p>Features include:</p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-console.png' target='main-console.png'><img src="http://community.citrix.com/download/thumbnails/62226704/main-console.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>Full virtual machine installation, configuration and lifecycle management.</li>
	<li>Access to VM consoles: VNC for installation-time, Xvnc for graphical displays on Linux, and Remote Desktop for Windows.</li>
</ul>


<p><br />
<br /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/new-sr-wizard-1.png' target='new-sr-wizard-1.png'><img src="http://community.citrix.com/download/thumbnails/62226704/new-sr-wizard-1.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>Remote storage configuration, including NetApp and DellEqualLogic StorageLink, and HBA (Fibre Channel and hardware iSCSI) support.</li>
	<li>Host networking management, including VLANs and internal networks, bonded and dedicated NICs.</li>
</ul>


<p><br />
<br /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-search-menu.png' target='main-search-menu.png'><img src="http://community.citrix.com/download/thumbnails/62226704/main-search-menu.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>XenSearch: searching, sorting, filtering, and grouping, using tags, folders and custom fields.</li>
</ul>


<p><br />
<br /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-dmc.png' target='main-dmc.png'><img src="http://community.citrix.com/download/thumbnails/62226704/main-dmc.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li><b>New in XenCenter 5.6</b>: Dynamic memory management.</li>
</ul>


<p><br />
<br /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/logged-in-users.png' target='logged-in-users.png'><img src="http://community.citrix.com/download/thumbnails/62226704/logged-in-users.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>Complete resource pool management.</li>
	<li>High availability configuration.</li>
	<li>Active Directory integration, for user authentication and revocation.</li>
	<li><b>New in XenCenter 5.6</b>: Role-based access control</li>
</ul>


<p><br />
<br /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-snapshot.png' target='main-snapshot.png'><img src="http://community.citrix.com/download/thumbnails/62226704/main-snapshot.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>VM snapshot management.</li>
	<li><b>New in XenCenter 5.6</b>: Full memory snapshots and VM rollback.</li>
</ul>


<p><br />
<br /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-wlb.png' target='main-wlb.png'><img src="http://community.citrix.com/download/thumbnails/62226704/main-wlb.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>Workload Balancing, for pool-wide load balancing recommendations.</li>
	<li>Workload Reports, giving performance views over time and across the datacenter.</li>
	<li><b>New in XenCenter 5.6</b>: Automated power management, to turn off idle servers.</li>
</ul>


<p><br />
<br /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-graphs.png' target='main-graphs.png'><img src="http://community.citrix.com/download/thumbnails/62226704/main-graphs.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>Performance metrics display.</li>
	<li>Long term metrics gathering and analysis.</li>
</ul>


<p><br />
<br />
<br /></p>
<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&#160;&#160;&#160;XenCenter Versions</font></h3>
</div>
<p>The current version is XenCenter 5.6.  It is capable of managing all versions between XenServer 5.0 and 5.6.</p>

<p><br /></p>
<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&#160;&#160;&#160;Getting XenCenter</font></h3></div>

<p>XenCenter is available as a Windows Installer package (.msi) from either of these places:</p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; the XenServer product CDs, in the <tt>client_install</tt> directory;<br />
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&#160; from <a href="http://www.citrix.com/xenserver/download">http://www.citrix.com/xenserver/download</a>.</p>

<p><br /></p>
<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&#160;&#160;&#160;XenCenter Plugins Technology Preview</font></h3></div>
<p>In XenCenter 5.6 it is possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</p>

<p>A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</p>

<p>The plugin specification and some tutorials can be found on the <a href="/display/xs/XenCenter+Plugins" title="XenCenter Plugins">XenCenter Plugins</a> page.  Please leave your comments there too.
<br /></p>
<div style="padding:3px;background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&#160;&#160;&#160;More Information</font></h3></div>
<p><a href="http://forums.citrix.com/category.jspa?categoryID=101"><b>XenServer Support Forums</b></a><br />
<a href="http://support.citrix.com/product/xens/v5.6/"><b>XenServer 5.6 Knowledge Center</b></a></p>

<p><br /></p>

<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="XenCenter-"></a><font color="#003366">&#160;&#160;&#160;Web Interface</font></h3></div>

<p>Looking for a web-based alternative to XenCenter?  Take a look at <a href="/display/xs/xvp" title="xvp">xvp</a>, an open-source web interface for XenServer, developed at Durham University in the UK.</p>


<div style="padding:3px;background-color:#EEEEEE">
<h3><a name="XenCenter-"></a><font color="#003366">&#160;&#160;&#160;VM Backup</font></h3></div>

<p>Looking for a VM backup solution?  Take a look at our white paper <a href="https://support.citrix.com/article/CTX122191">CTX122191: XenServer - Virtual Machine Backup</a>, which describes a number of VM backup approaches, including how to use the XenServer snapshot feature in combination with your existing backup solution.</p>

<p><br /></p>
    </div>
        <div style="padding: 10px 0">
       <a href="http://community.citrix.com/display/xs/XenCenter">View Online</a>
              &#124;
       <a href="http://community.citrix.com/display/xs/XenCenter?showComments=true&#38;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    
    <div style="border-top:1px solid #ddd;padding: 10px 0">
        <p>
            Changes between <a href="/display/xs/XenCenter?pageVersion=36">revision 36</a>
            and <a href="/display/xs/XenCenter">revision 37</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px"><table><tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column:width=75%}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{tip:title=&#xA0;&#xA0;&#xA0;Permanent URL}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{pre}[http://community.citrix.com/xencenter] &#38;nbsp;&#38;nbsp;&#38;nbsp;&#38;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{pre}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{tip}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column:width=5%}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{panel}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The XenCenter team is hiring!  Visit the [XenCenter Jobs] page for details.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{panel}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#003366}&#38;nbsp;&#38;nbsp;&#38;nbsp;XenCenter Features{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Citrix XenCenter is the Windows-native graphical user interface for managing Citrix XenServer.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Features include:</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!main-console.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Full virtual machine installation, configuration and lifecycle management.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Access to VM consoles: VNC for installation-time, Xvnc for graphical displays on Linux, and Remote Desktop for Windows.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!new-sr-wizard-1.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Remote storage configuration, including NetApp and DellEqualLogic StorageLink, and HBA (Fibre Channel and hardware iSCSI) support.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Host networking management, including VLANs and internal networks, bonded and dedicated NICs.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!main-search-menu.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* XenSearch: searching, sorting, filtering, and grouping, using tags, folders and custom fields.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!main-dmc.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *New in XenCenter 5.6*: Dynamic memory management.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!logged-in-users.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Complete resource pool management.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* High availability configuration.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Active Directory integration, for user authentication and revocation.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *New in XenCenter 5.6*: Role-based access control</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!main-snapshot.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* VM snapshot management.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *New in XenCenter 5.6*: Full memory snapshots and VM rollback.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!main-wlb.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Workload Balancing, for pool-wide load balancing recommendations.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Workload Reports, giving performance views over time and across the datacenter.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* *New in XenCenter 5.6*: Automated power management, to turn off idle servers.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!main-graphs.png&#124;align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Performance metrics display.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">* Long term metrics gathering and analysis.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#003366}&#38;nbsp;&#38;nbsp;&#38;nbsp;XenCenter Versions{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The current version is XenCenter 5.6.  It is capable of managing all versions between XenServer 5.0 and 5.6.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#003366}&#38;nbsp;&#38;nbsp;&#38;nbsp;Getting XenCenter{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'><a href='#change1' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">XenCenter is available as a Windows Installer package (.msi) from <span class="diffremovedchars">three</span> places: </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&#160;</td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffadded">XenCenter is available as a Windows Installer package (.msi) from <span class="diffaddedchars">either of these</span> places: </td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!Download SDKs^btn_search.png!&#38;nbsp; the XenServer product CDs, in the {{client_install}} directory;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a><a href='#change0' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'>&#160;<td class="diffdeleted">!Download SDKs^btn_search.png!&#38;nbsp; on HP and Dell embedded editions of XenServer, from XenServer itself, at {{http://&#60;server&#62;/XenCenter.msi}};</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">!Download SDKs^btn_search.png!&#38;nbsp; from [http://www.citrix.com/xenserver/download].</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#003366}&#38;nbsp;&#38;nbsp;&#38;nbsp;XenCenter Plugins Technology Preview{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">In XenCenter 5.6 it is possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">The plugin specification and some tutorials can be found on the [XenCenter Plugins] page.  Please leave your comments there too.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#003366}&#38;nbsp;&#38;nbsp;&#38;nbsp;More Information{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[*XenServer Support Forums*&#124;http://forums.citrix.com/category.jspa?categoryID=101]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">[*XenServer 5.6 Knowledge Center*&#124;http://support.citrix.com/product/xens/v5.6/]</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#003366}&#38;nbsp;&#38;nbsp;&#38;nbsp;Web Interface{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Looking for a web-based alternative to XenCenter?  Take a look at [xvp], an open-source web interface for XenServer, developed at Durham University in the UK.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">h3. {color:#003366}&#38;nbsp;&#38;nbsp;&#38;nbsp;VM Backup{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">Looking for a VM backup solution?  Take a look at our white paper [CTX122191: XenServer - Virtual Machine Backup&#124;https://support.citrix.com/article/CTX122191], which describes a number of VM backup approaches, including how to use the XenServer snapshot feature in combination with your existing backup solution.</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">&#160;</td></tr>
<tr><td colspan='2' class='diffnav'>&#160;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=62226704">View All Revisions</a> &#124;
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=62226704&#38;version=36">Revert To Version 36</a>
    </div>]]></description>
			<content:encoded><![CDATA[<p>
        Page
            <b>edited</b> by
                    <a href="http://community.citrix.com/display/~stephentu1">Stephen Turner</a>
            </p>
        <div style="border-top: 1px solid #ddd; border-bottom: 1px solid #ddd; padding: 10px;">
         <table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd"  valign="top" width="75%">
<p><br clear="all" /></p></td>
<td class="confluenceTd"  valign="top">
<div class='panelMacro'><table class='tipMacro'><colgroup><col width='24'><col></colgroup><tr><td valign='top'><img src="http://community.citrix.com/images/icons/emoticons/check.gif" width="16" height="16" align="absmiddle" alt="" border="0"></td><td><b>   Permanent URL</b><br />
<pre><a href="http://community.citrix.com/xencenter">http://community.citrix.com/xencenter</a> &nbsp;&nbsp;&nbsp;&nbsp;</pre></td></tr></table></div></td>
<td class="confluenceTd"  valign="top" width="5%">
<p><br clear="all" /></p></td></tr></tbody></table>

<div class="panel" style="border-width: 1px;"><div class="panelContent">
<p>The XenCenter team is hiring!  Visit the <a href="http://community.citrix.com/display/xs/XenCenter+Jobs" title="XenCenter Jobs">XenCenter Jobs</a> page for details.</p>
</div></div>

<p><br clear="all" /></p>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="XenCenter-"></a><font color="#003366">&nbsp;&nbsp;&nbsp;XenCenter Features</font></h3></div>
<p>Citrix XenCenter is the Windows-native graphical user interface for managing Citrix XenServer.</p>

<p>Features include:</p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-console.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/main-console.png", "main-console.png", "height=802,width=1062,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/main-console.png" align="right" border="0" hspace="60" title="XenCenter 5.5 screenshot showing the Console tab" /></a></p>
<ul>
	<li>Full virtual machine installation, configuration and lifecycle management.</li>
	<li>Access to VM consoles: VNC for installation-time, Xvnc for graphical displays on Linux, and Remote Desktop for Windows.</li>
</ul>


<p><br clear="all" />
<br clear="all" /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/new-sr-wizard-1.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/new-sr-wizard-1.png", "new-sr-wizard-1.png", "height=570,width=845,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/new-sr-wizard-1.png" align="right" border="0" hspace="60" title="XenCenter 5.5 screenshot showing the New SR wizard" /></a></p>
<ul>
	<li>Remote storage configuration, including NetApp and DellEqualLogic StorageLink, and HBA (Fibre Channel and hardware iSCSI) support.</li>
	<li>Host networking management, including VLANs and internal networks, bonded and dedicated NICs.</li>
</ul>


<p><br clear="all" />
<br clear="all" /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-search-menu.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/main-search-menu.png", "main-search-menu.png", "height=941,width=1319,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/main-search-menu.png" align="right" border="0" hspace="60" title="XenCenter 5.5 screenshot showing the Search tab and its menu" /></a></p>
<ul>
	<li>XenSearch: searching, sorting, filtering, and grouping, using tags, folders and custom fields.</li>
</ul>


<p><br clear="all" />
<br clear="all" /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-dmc.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/main-dmc.png", "main-dmc.png", "height=796,width=1117,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/main-dmc.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li><b>New in XenCenter 5.6</b>: Dynamic memory management.</li>
</ul>


<p><br clear="all" />
<br clear="all" /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/logged-in-users.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/logged-in-users.png", "logged-in-users.png", "height=941,width=1321,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/logged-in-users.png" align="right" border="0" hspace="60" title="XenCenter 5.5 screenshot showing the Active Directory logged-in-users pane" /></a></p>
<ul>
	<li>Complete resource pool management.</li>
	<li>High availability configuration.</li>
	<li>Active Directory integration, for user authentication and revocation.</li>
	<li><b>New in XenCenter 5.6</b>: Role-based access control</li>
</ul>


<p><br clear="all" />
<br clear="all" /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-snapshot.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/main-snapshot.png", "main-snapshot.png", "height=796,width=1116,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/main-snapshot.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>VM snapshot management.</li>
	<li><b>New in XenCenter 5.6</b>: Full memory snapshots and VM rollback.</li>
</ul>


<p><br clear="all" />
<br clear="all" /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-wlb.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/main-wlb.png", "main-wlb.png", "height=797,width=1117,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/main-wlb.png" align="right" border="0" hspace="60" /></a></p>
<ul>
	<li>Workload Balancing, for pool-wide load balancing recommendations.</li>
	<li>Workload Reports, giving performance views over time and across the datacenter.</li>
	<li><b>New in XenCenter 5.6</b>: Automated power management, to turn off idle servers.</li>
</ul>


<p><br clear="all" />
<br clear="all" /></p>

<p><a href='http://community.citrix.com/download/attachments/62226704/main-graphs.png'  onClick='window.open("http://community.citrix.com/download/attachments/62226704/main-graphs.png", "main-graphs.png", "height=941,width=1321,menubar=no,status=no,toolbar=no"); return false;'><img src="http://community.citrix.com/download/thumbnails/62226704/main-graphs.png" align="right" border="0" hspace="60" title="XenCenter 5.5 screenshot showing the Performance tab" /></a></p>
<ul>
	<li>Performance metrics display.</li>
	<li>Long term metrics gathering and analysis.</li>
</ul>


<p><br clear="all" />
<br clear="all" />
<br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&nbsp;&nbsp;&nbsp;XenCenter Versions</font></h3>
</div>
<p>The current version is XenCenter 5.6.  It is capable of managing all versions between XenServer 5.0 and 5.6.</p>

<p><br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&nbsp;&nbsp;&nbsp;Getting XenCenter</font></h3></div>

<p>XenCenter is available as a Windows Installer package (.msi) from either of these places:</p>

<p><img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; the XenServer product CDs, in the <tt>client_install</tt> directory;<br/>
<img src="http://community.citrix.com/download/attachments/38633496/btn_search.png" align="absmiddle" border="0" />&nbsp; from <a href="http://www.citrix.com/xenserver/download">http://www.citrix.com/xenserver/download</a>.</p>

<p><br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&nbsp;&nbsp;&nbsp;XenCenter Plugins Technology Preview</font></h3></div>
<p>In XenCenter 5.6 it is possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</p>

<p>A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</p>

<p>The plugin specification and some tutorials can be found on the <a href="http://community.citrix.com/display/xs/XenCenter+Plugins" title="XenCenter Plugins">XenCenter Plugins</a> page.  Please leave your comments there too.
<br clear="all" /></p>
<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">

<h3><a name="XenCenter-"></a><font color="#003366">&nbsp;&nbsp;&nbsp;More Information</font></h3></div>
<p><a href="http://forums.citrix.com/category.jspa?categoryID=101"><b>XenServer Support Forums</b></a><br/>
<a href="http://support.citrix.com/product/xens/v5.6/"><b>XenServer 5.6 Knowledge Center</b></a></p>

<p><br clear="all" /></p>

<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="XenCenter-"></a><font color="#003366">&nbsp;&nbsp;&nbsp;Web Interface</font></h3></div>

<p>Looking for a web-based alternative to XenCenter?  Take a look at <a href="http://community.citrix.com/display/xs/xvp" title="xvp">xvp</a>, an open-source web interface for XenServer, developed at Durham University in the UK.</p>


<div style="padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE">
<h3><a name="XenCenter-"></a><font color="#003366">&nbsp;&nbsp;&nbsp;VM Backup</font></h3></div>

<p>Looking for a VM backup solution?  Take a look at our white paper <a href="https://support.citrix.com/article/CTX122191">CTX122191: XenServer - Virtual Machine Backup</a>, which describes a number of VM backup approaches, including how to use the XenServer snapshot feature in combination with your existing backup solution.</p>

<p><br clear="all" /></p>
    </div>
        <div style="padding: 10px 0;">
       <a href="http://community.citrix.com/display/xs/XenCenter">View Online</a>
              |
       <a href="http://community.citrix.com/display/xs/XenCenter?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
           </div>
        <style type="text/css">
        .diffadded{background: #ddffdd;padding:1px 1px 1px 4px;border-left: 4px solid darkgreen; font-size: 10pt;}
        .diffdeleted{color:#999;background: #ffdddd;padding: 1px 1px 1px 4px;border-left: 4px solid darkred; font-size: 10pt;}
        .diffnochange{padding:1px 1px 1px 4px;border-left: 4px solid #d3d3d3; font-size: 10pt;}
        .differror{background:brown; font-size: 10pt;}
        .diff{font-family:lucida console, courier new, fixed-width; font-size: 10pt;}
        .diffaddedchars{background-color:#99ff99;font-weight:bolder;}
        .diffremovedchars{background-color:#ff9999;text-decoration: line-through;font-weight:bolder;}
        .diffnav{display:none;}
    </style>
    <div style="border-top:1px solid #ddd; padding: 10px 0;">
        <p>
            Changes between <a href="http://community.citrix.com/display/xs/XenCenter?pageVersion=36">revision 36</a>
            and <a href="http://community.citrix.com/display/xs/XenCenter">revision 37</a>: <br />
        </p>
        <div class="diff" style="padding: 0px 10px;"><table><tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column:width=75%}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{tip:title=&#xA0;&#xA0;&#xA0;Permanent URL}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{pre}[http://community.citrix.com/xencenter] &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{pre}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{tip}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column:width=5%}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{column}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{section}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{panel}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The XenCenter team is hiring!  Visit the [XenCenter Jobs] page for details.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{panel}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#003366}&amp;nbsp;&amp;nbsp;&amp;nbsp;XenCenter Features{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Citrix XenCenter is the Windows-native graphical user interface for managing Citrix XenServer.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Features include:</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!main-console.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Full virtual machine installation, configuration and lifecycle management.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Access to VM consoles: VNC for installation-time, Xvnc for graphical displays on Linux, and Remote Desktop for Windows.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!new-sr-wizard-1.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Remote storage configuration, including NetApp and DellEqualLogic StorageLink, and HBA (Fibre Channel and hardware iSCSI) support.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Host networking management, including VLANs and internal networks, bonded and dedicated NICs.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!main-search-menu.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* XenSearch: searching, sorting, filtering, and grouping, using tags, folders and custom fields.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!main-dmc.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *New in XenCenter 5.6*: Dynamic memory management.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!logged-in-users.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Complete resource pool management.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* High availability configuration.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Active Directory integration, for user authentication and revocation.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *New in XenCenter 5.6*: Role-based access control</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!main-snapshot.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* VM snapshot management.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *New in XenCenter 5.6*: Full memory snapshots and VM rollback.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!main-wlb.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Workload Balancing, for pool-wide load balancing recommendations.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Workload Reports, giving performance views over time and across the datacenter.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* *New in XenCenter 5.6*: Automated power management, to turn off idle servers.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!main-graphs.png|align=right,thumbnail=true,hspace=60!</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Performance metrics display.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">* Long term metrics gathering and analysis.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#003366}&amp;nbsp;&amp;nbsp;&amp;nbsp;XenCenter Versions{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The current version is XenCenter 5.6.  It is capable of managing all versions between XenServer 5.0 and 5.6.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#003366}&amp;nbsp;&amp;nbsp;&amp;nbsp;Getting XenCenter{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'><a href='http://community.citrix.com/display/xs/XenCenter#change1' title='Next change'><img src='http://community.citrix.com/images/icons/nav_down.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a><td class="diffdeleted">XenCenter is available as a Windows Installer package (.msi) from <span class="diffremovedchars">three</span> places: </td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change0'></a>&nbsp;</td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffadded">XenCenter is available as a Windows Installer package (.msi) from <span class="diffaddedchars">either of these</span> places: </td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!Download SDKs^btn_search.png!&amp;nbsp; the XenServer product CDs, in the {{client_install}} directory;</td></tr>
<tr><td valign='top' class='diffnav' width='1%'><a name='change1'></a><a href='http://community.citrix.com/display/xs/XenCenter#change0' title='Previous change'><img src='http://community.citrix.com/images/icons/nav_up.gif' border='0' width='16' height='16' hspace='1' vspace='1'></a></td><td valign='top' class='diffnav' width='1%'>&nbsp;<td class="diffdeleted">!Download SDKs^btn_search.png!&amp;nbsp; on HP and Dell embedded editions of XenServer, from XenServer itself, at {{http://&lt;server&gt;/XenCenter.msi}};</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">!Download SDKs^btn_search.png!&amp;nbsp; from [http://www.citrix.com/xenserver/download].</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#003366}&amp;nbsp;&amp;nbsp;&amp;nbsp;XenCenter Plugins Technology Preview{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">In XenCenter 5.6 it is possible to add custom menu items or even whole tabs to the main window.  You might do this as an ISV to integrate your own product with XenCenter, or as an end-user to integrate with your company's existing inventory management, for example.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">A menu item can run a Microsoft PowerShell script or even an arbitrary executable on the client machine.  Tabs are populated with a web page, and can call out to other services on your network or to your VMs.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">The plugin specification and some tutorials can be found on the [XenCenter Plugins] page.  Please leave your comments there too.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#003366}&amp;nbsp;&amp;nbsp;&amp;nbsp;More Information{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[*XenServer Support Forums*|http://forums.citrix.com/category.jspa?categoryID=101]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">[*XenServer 5.6 Knowledge Center*|http://support.citrix.com/product/xens/v5.6/]</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#003366}&amp;nbsp;&amp;nbsp;&amp;nbsp;Web Interface{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Looking for a web-based alternative to XenCenter?  Take a look at [xvp], an open-source web interface for XenServer, developed at Durham University in the UK.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div:style=padding:3px;background-color:#EEEEEE; layer-background-color:#EEEEEE}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">h3. {color:#003366}&amp;nbsp;&amp;nbsp;&amp;nbsp;VM Backup{color}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">{div}</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">Looking for a VM backup solution?  Take a look at our white paper [CTX122191: XenServer - Virtual Machine Backup|https://support.citrix.com/article/CTX122191], which describes a number of VM backup approaches, including how to use the XenServer snapshot feature in combination with your existing backup solution.</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">&nbsp;</td></tr>
<tr><td colspan='2' class='diffnav'>&nbsp;</td><td class="diffnochange">\\</td></tr>
</table></div>
    </div>
    <div style="padding-bottom: 10px;">
        <a href="http://community.citrix.com/pages/viewpreviousversions.action?pageId=62226704">View All Revisions</a> |
        <a href="http://community.citrix.com/pages/revertpagebacktoversion.action?pageId=62226704&version=36">Revert To Version 36</a>
    </div>]]></content:encoded>
			<wfw:commentRss>http://community.citrix.com/display/xs/XenCenter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
