<?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>Cliff Davies</title>
	<atom:link href="http://cliffdavies.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://cliffdavies.com</link>
	<description>Virtualization news, tips, tricks and tools</description>
	<lastBuildDate>Wed, 07 Dec 2011 18:31:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Citrix XenApp Rolling Reboot Script</title>
		<link>http://cliffdavies.com/blog/xenapp/citrix-xenapp-rolling-reboot-script/</link>
		<comments>http://cliffdavies.com/blog/xenapp/citrix-xenapp-rolling-reboot-script/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 11:16:49 +0000</pubDate>
		<dc:creator>Trond Eirik Haavarstein</dc:creator>
				<category><![CDATA[XenApp]]></category>
		<category><![CDATA[Citrix XenApp]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.xenappblog.com/?p=2853</guid>
		<description><![CDATA[Many of you are probably familiar with the new Reboot Behavior Policy. Maybe you&#8217;ve scratched your head trying to figure out why the Citrix policy didn&#8217;t work. Maybe you&#8217;ve spent a whole day until you came upon this blog post telling you that the Reboot Behaviour Policy only works with Enterprise or Platinum license. Thanks [...]]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Trond Eirik Haavarstein from http://www.xenappblog.com</p>
<p><a
href="http://cdn.xenappblog.com/wp-content/uploads/2011/12/citrix-reboot-policy.png?9d7bd4" rel="lightbox[2853]"><img
class="alignnone size-medium wp-image-2854" title="citrix reboot policy" src="http://cdn.xenappblog.com/wp-content/uploads/2011/12/citrix-reboot-policy-300x268.png?9d7bd4" alt="citrix reboot policy 300x268 Citrix XenApp Rolling Reboot Script" width="300" height="268" /></a></p><p>Many of you are probably familiar with the new Reboot Behavior Policy. Maybe you&#8217;ve scratched your head trying to figure out why the Citrix policy didn&#8217;t work. Maybe you&#8217;ve spent a whole day until you came upon this blog post telling you that the Reboot Behaviour Policy only works with Enterprise or Platinum license. Thanks for letting us figure it out the hard way Citrix!</p><p>Some of you may also have tried Citrix Power and Capacity Management finding out that it needs a similar license, its own database and control server. Kind of overkill for small SMB environments with only 10-50 servers.</p><p>A couple of weeks ago I stumbled upon a superb <span
style="text-decoration: underline;">Citrix XenApp Rolling Reboot Script</span> created by Dane Young. The script supports XenApp 5-6.5 and basically it uses a Load Evaluator to drain servers one by one. Once all sessions have been logged off, the server will go down for a reboot.</p><p>The script will also validate that the last rebooted server was successful before continuing on to the next server in the farm. By implementing this script in your organization you&#8217;ll get a zero-downtime <strong>24/7/365</strong> system without the annoying &#8220;Please Log Off&#8221; messages.</p><p>We&#8217;ve been running this script successfully for a couple of weeks with great success. Right now we&#8217;re having a dialog with Dane Young to add more features and further improve the script e.g. adding the possibility to create an Exclude Servers list to the <strong>Citrix XenApp Rolling Reboot Script</strong>.</p><p>In Citrix XenApp 6.5 there&#8217;s now also a great new feature called Logon Control that will let you drain servers without adding any form of Load Evaluator.</p><p><a
href="http://cdn.xenappblog.com/wp-content/uploads/2011/12/Citrix-XenApp-65-Logon-Control.png?9d7bd4" rel="lightbox[2853]"><img
class="alignnone size-medium wp-image-2855" title="Citrix XenApp 65 Logon Control" src="http://cdn.xenappblog.com/wp-content/uploads/2011/12/Citrix-XenApp-65-Logon-Control-300x248.png?9d7bd4" alt="Citrix XenApp 65 Logon Control 300x248 Citrix XenApp Rolling Reboot Script" width="300" height="248" /></a></p><p><strong>Resources :</strong></p><ul><li><a
href="http://blog.virtualyoungtech.com/?p=79" ><em>Citrix XenApp Rolling Reboot Script</em></a></li><li><a
href="http://support.citrix.com/proddocs/topic/xenapp6-w2k8-admin/ps-ref-policies-reboot.html" >Citrix Reboot Policy</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/xenapp/citrix-xenapp-rolling-reboot-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimization Guide for Windows Server 2008R2 with XenApp 6/6.5</title>
		<link>http://cliffdavies.com/blog/general/optimization-guide-for-windows-server-2008r2-with-xenapp-66-5/</link>
		<comments>http://cliffdavies.com/blog/general/optimization-guide-for-windows-server-2008r2-with-xenapp-66-5/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 08:16:38 +0000</pubDate>
		<dc:creator>Thomas Berger</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[tweaks]]></category>
		<category><![CDATA[xenapp]]></category>

		<guid isPermaLink="false">http://blogs.citrix.com/?p=174176838</guid>
		<description><![CDATA[Very often we (the Ask the Architects team) are asked which optimizations should be applied to a XenApp (6/6.5) server. What we typically do to answer that question is to dig through our personal knowledge repositories and try to come up with a good li...]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Thomas Berger from http://blogs.citrix.com</p>
<p>Very often we (the <a href="http://community.citrix.com/p/ata#ask+the+architect" target="_blank">Ask the Architects team</a>) are asked which optimizations should be applied to a XenApp (6/6.5) server. What we typically do to answer that question is to dig through our personal knowledge repositories and try to come up with a good list of tweaks. Well, that is not exactly a very efficient process so we though it’s now time to comprise a comprehensive guide, that summarizes the most common optimizations.</p><p>Unfortunately there is a myriad of registry tweaks or GPO settings that can optimize a Windows Server, but many of them are related to very specific scenarios only and have the ability to actually limit the scalability in other cases. So we basically filtered out those “toxic” tweaks and summarized only the optimizations that apply to many (if not all) environments. Nevertheless it is important to test every change in detail before rolling it out to production. So please keep that in mind. <strong>Always!</strong></p><p>&nbsp;</p><p>The new guide (which <a href="http://support.citrix.com/article/CTX131577" target="_blank">can be downloaded here</a>) is split into two sections.</p><ul><li><strong>Section 1 &#8211; Windows 2008 R2 Configurations</strong>: This chapter focuses on optimizations that are applied at the server level. We have split the chapter into general optimizations for XenApp servers and optimizations for XenApp servers which are provisioned by means of Provisioning Services (PVS). Furthermore we took a look at services as well some file server optimizations.</li><li><strong>Section 2 – User Settings</strong>: This chapter focuses on user specific optimizations, which also includes a few XenApp Policy tweaks.</li></ul><p>&nbsp;</p><p>As mentioned earlier we tried to include common optimizations only. So there is a long list of things we skipped on purpose because of the aforementioned reasons. But in case you know an RegKey or GPO setting that we have missed out, please leave a comment or send me a mail and I’ll incorporate it into the guide.</p><p><strong>Update:</strong> The Optimization Guide has also been added to the <a href="http://bit.ly/xdhandbook" target="_blank">XenDesktop Design Handbook</a>. You can find it within the Planning Guides section.</p>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/general/optimization-guide-for-windows-server-2008r2-with-xenapp-66-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PCoIP Zero Clients with Imprivata OneSign Authentication and USB2.0</title>
		<link>http://cliffdavies.com/blog/virtualization/pcoip-zero-clients-with-imprivata-onesign-authentication-and-usb2-0/</link>
		<comments>http://cliffdavies.com/blog/virtualization/pcoip-zero-clients-with-imprivata-onesign-authentication-and-usb2-0/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 14:44:12 +0000</pubDate>
		<dc:creator>Andre Leibovici</dc:creator>
				<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[PCoIP]]></category>
		<category><![CDATA[teradici]]></category>
		<category><![CDATA[VDI]]></category>

		<guid isPermaLink="false">http://myvirtualcloud.net/?p=2520</guid>
		<description><![CDATA[Teradici is releasing today a new version (3.5.0) of the PCoIP Zero Client firmware. This new version provides major security and functionality enhancements. Teradici itself is calling it the biggest PCoIP release to this data. Imprivata OneSign authentication – Secure single sign-on authentication facilitates increased productivity for roaming desktop users Improved USB transfer rates with [...]]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Andre Leibovici from http://myvirtualcloud.net</p>
<p>Teradici is releasing today a new version (3.5.0) of the PCoIP Zero Client firmware. This new version provides major security and functionality enhancements. Teradici itself is calling it the biggest PCoIP release to this data.</p>
<ul>
<li><strong>Imprivata OneSign authentication</strong> – Secure single sign-on authentication facilitates increased productivity for roaming desktop users</li>
<li><strong>Improved USB transfer rates with VDI (USB2.0)</strong> – Users can expect to see up to 3X improvement in transfer speeds</li>
<li><strong>802.1X network authentication</strong> – PCoIP zero client devices can now be deployed with the highest degree of 802.1X security using EAP-TLS certificate-based authentication.</li>
<li><strong>IPv6 support</strong> – PCoIP zero clients updated to support ongoing mandates for IPv6 adherence.</li>
<li><strong>“Help Desk” mode</strong> – Administrators can enable an OSD login screen link which allows users to log in to a particular VM of the administrator’s choice. This VM may be configured by the administrator to provide specific support directions for users</li>
<li><strong>Support for up to 25 View Connection Server addresses</strong> – Adds additional flexibility and scalability for large enterprises.</li>
<li><strong>100BASE-FX</strong> – Support for fast Ethernet over optical fiber for enhanced security over long distances</li>
</ul>
<ul>Along with the new features Teradici is also releasing a new version of the PCoIP Management Console, version 1.7.0.</ul>
<p>Note that the enhancements are only available for the hardware based Teradici PCoIP Zero client. The soft version provided by VMware with VMware View does not currently support the enhancements above.</p>
<p>&nbsp;</p>
<p><strong>Imprivata OneSign authentication</strong></p>
<p>According to my previous experiences many organizations, specially healthcare providers, have been waiting for the ability to utilize Imprivata SSO with with tap of a proximity card with zero clients to enable true follow me virtual desktop roaming.</p>
<p><a href="http://myvirtualcloud.net/wp-content/uploads/2011/12/image.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://myvirtualcloud.net/wp-content/uploads/2011/12/image_thumb.png" alt="image" width="504" height="301" border="0" /></a></p>
<p>&nbsp;</p>
<p><strong>Improved USB transfer rates with VDI (USB2.0)</strong></p>
<p>The USB 2.0 Compatibility support is also a huge plus for VDI users. Teradici told me that users can expect to see up to 3x improvement in transfer speed for bulk transfers (read and write) when compared to earlier PCoIP zero client firmware releases (which supported USB 1.1 transfer speeds with many USB 2.0 devices). This means up to 18Mbps may be achieved, but the results may vary for different USB devices and under different network conditions.</p>
<p>&nbsp;</p>
<p><strong>802.1X network authentication</strong></p>
<p>802.1X is an IEEE Standard for port-based Network Access Control (PNAC) and adds an additional layer of security on top of usernames and passwords, particularly for sensitive network environments. EAP-TLS (certificate-based) is supported – which is the most secure method of 802.1X authentication.</p>
<ol>
<li>Supplicant sends certificate to Authenticator (ie network switch)</li>
<li>Authenticator forwards certificate to Authentication Server for verification</li>
<li>Authenticator grants or denies network access based on response from Authentication Server.</li>
</ol>
<p><a href="http://myvirtualcloud.net/wp-content/uploads/2011/12/image1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="image" src="http://myvirtualcloud.net/wp-content/uploads/2011/12/image_thumb1.png" alt="image" width="452" height="180" border="0" /></a></p>
<p>&nbsp;</p>
<p>In a following post I will explain how to setup the Imprivata OneSign authentication. However, the new firmware is already available for download at Teradici Support website. Go to <a href="http://www.teradici.com/">www.teradici.com</a> for more Information.</p>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/virtualization/pcoip-zero-clients-with-imprivata-onesign-authentication-and-usb2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PVS Write Cache on local disks – A Real World Experience</title>
		<link>http://cliffdavies.com/blog/xenapp/pvs-write-cache-on-local-disks-%e2%80%93-a-real-world-experience/</link>
		<comments>http://cliffdavies.com/blog/xenapp/pvs-write-cache-on-local-disks-%e2%80%93-a-real-world-experience/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 09:00:17 +0000</pubDate>
		<dc:creator>Thomas Berger</dc:creator>
				<category><![CDATA[XenApp]]></category>
		<category><![CDATA[provisioning_services]]></category>
		<category><![CDATA[write-cache]]></category>

		<guid isPermaLink="false">http://blogs.citrix.com/?p=174176498</guid>
		<description><![CDATA[When implementing a Provisioning Services infrastructure the decision about the Write Cache location is one of the most important and therefore one of the most discussed. As I already wrote two blogs about this topic (you can find them here and here) I...]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Thomas Berger from http://blogs.citrix.com</p>
<p>When implementing a Provisioning Services infrastructure the decision about the Write Cache location is one of the most important and therefore one of the most discussed. As I already wrote two blogs about this topic (you can find them <a href="http://blogs.citrix.com/2011/10/06/pvs-write-cache-sizing-considerations/" target="_blank">here</a> and <a href="http://blogs.citrix.com/2011/10/31/pvs-write-cache-sizing-considerations-%E2%80%93-follow-up/" target="_blank">here</a>) I’ll not bore you with any more theory. Instead this time I’d like to share some practical real world data, of an environment where the PVS Write Cache of 6 virtual XenApp servers is written to the local disks of a single XenServer. This configuration is discussed quite often as it is a very cost effective solution (Alex Danilychev wrote a <a href="http://blogs.citrix.com/2011/10/28/vdi-in-a-pizza-box/" target="_blank">nice blog</a> about it), but it also holds the risk of the local disks being a bottleneck. So in order to understand whether this configuration works for your environment as well, you need to perform some in-depth testing and analysis. Check out <a href="http://support.citrix.com/article/CTX130632" target="_blank">CTX130632</a> for some guidance.</p><p>&nbsp;</p><p>For the customer in my example this configuration works pretty well, since about 3 years now. Initially the customer  has chosen this configuration for cost reasons, as a configuration with shared storage would have required them to upgrade the SAN controllers in addition to adding a large number of disks to the existing shared storage infrastructure.</p><p>&nbsp;</p><p><strong>The Environment</strong></p><p>-       All XenApp servers are virtualized using XenServer 5.6 SP2</p><p>-       Rack-Mounted HP 2U Servers</p><ul><li>4 x 140GB 15k SAS disks</li><li>Smart Array P410i – RAID Controller</li><li>512MB Battery Backed Write Cache</li><li>RAID 5</li></ul><p>-       Running XenApp 6</p><p>-       30 concurrent users per XenApp server during the office hours</p><p>-       More than 1.500 concurrent users in total</p><p>-       Ratio of 6 XenApp servers per XenServer Host</p><p>&nbsp;</p><p><strong>Gathering the Performance Data</strong></p><p>We gathered the performance data using the standard Linux command iostat. In order to filter out the unnecessary data right away we piped the output into the awk command. This gave us the following command string:</p><p>&nbsp;</p><p>“<em>iostat -xk 15 5760 | awk &#8216;BEGIN {print &#8220;Time Device rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util&#8221;} /c0d0/ {print strftime(&#8220;%H:%M:%S&#8221;),$0}&#8217; &gt;iostat.csv</em>”</p><p>&nbsp;</p><p>In detail this command means:</p><p>-       <strong>iostat –xk 15 5760</strong> &#8211; Runs iostat with extended statistics (in KB format) at a 15 second interval 5760 times (= 24 hours)</p><p>-       <strong>/c0d0/</strong> &#8211; Filters the output for block device c0d0</p><p>-       <strong>&gt;iostat.csv</strong> &#8211; Writes the iostat output into the file iostat.csv</p><p>&nbsp;</p><p>After running this command we got back a 1MB csv file which could be imported into Excel. From there it was pretty easy to create the following graphs (please note that we captured the data over night, so the middle of the graph is midnight):</p><p>&nbsp;</p><p><strong>The Performance Graphs</strong></p><p>&nbsp;</p><p>The first graph show shows the IOPSs caused by the PVS write cache activity of the virtual XenApp servers. As we can see the majority of the IO activity is writes, which is the same within virtual desktop environments. (Please click on the graphs to enlarge them)</p><p><a rel="attachment wp-att-174176499" href="http://cliffdavies.com/?attachment_id=174176499"><img class="alignnone size-large wp-image-174176499" src="http://cdn.ws.citrix.com/wp-content/uploads/2011/12/IOPS-1024x550.png" alt="" width="614" height="330" /></a></p><p>&nbsp;</p><p>The second graph shows the read write ratio in even more impressive detail.</p><p><a rel="attachment wp-att-174176500" href="http://cliffdavies.com/?attachment_id=174176500"><img class="alignnone size-large wp-image-174176500" src="http://cdn.ws.citrix.com/wp-content/uploads/2011/12/Read_Write_percent-1024x605.png" alt="" width="614" height="363" /></a></p><p>&nbsp;</p><p>The third graph shows the throughput in Kbyte/s. So this is the actual amount of data that is read and or written:</p><p><a rel="attachment wp-att-174176501" href="http://cliffdavies.com/?attachment_id=174176501"><img class="alignnone size-large wp-image-174176501" src="http://cdn.ws.citrix.com/wp-content/uploads/2011/12/Throughput-1024x542.png" alt="" width="614" height="325" /></a></p><p>&nbsp;</p><p>Finally we need some data to put the graphs into a relation. So here is the utilization chart of the local disk subsystem:</p><p><a rel="attachment wp-att-174176502" href="http://cliffdavies.com/?attachment_id=174176502"><img class="alignnone size-large wp-image-174176502" src="http://cdn.ws.citrix.com/wp-content/uploads/2011/12/Utilization-1024x469.png" alt="" width="614" height="281" /></a></p><p>&nbsp;</p><p>As we can see the disk subsystem is nowhere near its saturation, although it has to handle more than 800 I/Os per second during the peak logon period. This is only possible because the RAID controller has been equipped with battery backer write cache. This allows the RAID controller to commit the write operation back to the XenServer almost immediately. The actual write to disk is performed whenever utilization permits. While I don’t have any data without such a cache, I’d assume we would see a utilization of at least 90% if not even higher.</p><p>&nbsp;</p><p><strong>Maintenance approach</strong></p><p>I’m sure some of you will ask now how does the customer do hardware / hypervisor maintenance and how do they cope with outages? The reason behind this question (for those who couldn’t follow) is that in such a configuration the virtual XenApp servers are tied to an individual XenServer. This is because the virtual disk attached to the virtual machines cannot be moved. So a XenMotion is not possible and if the XenServer needs to be powered down all resident VMs need to go down as well. The customer solved this issue with a very pragmatic approach. The just bought two XenServers more than required to hold 100% of the load. So in case of any maintenance work they just disable the logons of the respective XenApp servers. When the last user has been logged of, they are able to do whatever needs to be done without impacting any user. Of course this is not as flexible as using XenMotion, but given the cost savings mentioned earlier it was ok for them to have that level of “in-flexibility”.</p><p><strong> </strong></p><p>&nbsp;</p><p><strong>Customer happiness</strong></p><p>Besides showing the pure technical metrics it is very important answer if the customer is happy with this configuration. Basically the answer I got was “Yes, we’re happy with this configuration and we would recommend this solution other customers as well. But of course this depends on the requirements of the individual environment”.</p><p>&nbsp;</p><p>So I think this shows that a PVS write cache on local disks configuration is a valid solution for XenApp environments, that not only works in theory. I would like to prove the same for a XenDesktop environment, but I could not get my hands onto some real world data where I also got the permission to publish it. So in case you would like to help me here, please leave a comment below or mail me directly.</p>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/xenapp/pvs-write-cache-on-local-disks-%e2%80%93-a-real-world-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use Flash Drives (SSD) for Linked Clones, not Replicas</title>
		<link>http://cliffdavies.com/blog/virtualization/use-flash-drives-ssd-for-linked-clones-not-replicas/</link>
		<comments>http://cliffdavies.com/blog/virtualization/use-flash-drives-ssd-for-linked-clones-not-replicas/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 02:24:00 +0000</pubDate>
		<dc:creator>Andre Leibovici</dc:creator>
				<category><![CDATA[Virtualization]]></category>
		<category><![CDATA[SSD]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[VDI]]></category>
		<category><![CDATA[View5]]></category>

		<guid isPermaLink="false">http://myvirtualcloud.net/?p=2513</guid>
		<description><![CDATA[In my previous article EMC FAST Cache effectiveness with VDI I focused on FAST Cache benefits for VDI deployments. The tests I completed also generated a huge quantity of data that is tremendously valuable for better sizing of VDI environments. I previously have discussed (here) how IOs suffer severe split between replica, linked clone and [...]]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Andre Leibovici from http://myvirtualcloud.net</p>
<p>In my <a href="http://cliffdavies.com/blog/virtualization/emc-fast-cache-effectiveness-with-vdi/">previous article</a> I focused on FAST Cache benefits for VDI deployments. The tests I completed also generated a huge quantity of data that is tremendously valuable for better sizing of VDI environments.</p>
<p>I previously have discussed how IOs suffer severe split between replica, linked clone and persistent disks. Depending on the storage tier serving the data it is possible to have different latencies for different parts of the Guest OS (Windows XP or Windows 7). However, in a linked clones environment the disks are interdependent at GuestOS layer, and a VMDK suffering from latency will also affect a different VMDK that is not suffering. Example: Replica disks that are backed by Flash Drive drives with Linked Clones that are backed by SATA drives.</p>
<p>In my validation with 200 VMs during Steady State each VM has an average of 8 IOPs. The 8 IOPS per virtual desktop is split into 0.29 IOPs for the Replica and 7 IOPs for the Linked Clone.</p>
<p><strong>This represents 4% read-only operations for the replica and 96% read/write operations for the Linked Clone.</strong></p>
<p>These numbers clearly identity that during <strong>Steady State</strong> the Replica disks are barely used and most of the IOs are absorbed by the linked clones. The two graphs below demonstrate the IO split between replicas and linked clones.</p>
<p>&nbsp;</p>
<p><a href="http://myvirtualcloud.net/wp-content/uploads/2011/11/clip_image0021.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px; border: 0px;" title="clip_image002" src="http://myvirtualcloud.net/wp-content/uploads/2011/11/clip_image002_thumb1.jpg" alt="clip_image002" width="624" height="187" border="0" /></a></p>
<p>&nbsp;</p>
<p>With knowledge of the disk behavior it is possible to size storage for the exact performance required in each tier.</p>
<p>VMware recommend placing Replicas disks in a Flash Drive (SSD) tier. However, you know now that Flash drives would only really be effectively used out of the Steady State period.</p>
<p>On the right picture (above) two spikes are clearly observed. The first is the logon storm; the second is the VMware View Refresh operation storm. Those are the periods when the Replica disks are utilized more aggressively. However, Linked Clones are equally utilized.</p>
<p>In fact, Linked Clones disks are more comprehensively utilized than the Replicas. This actually makes me evidently think that <strong>if there is a limited number of Flash Drives to be utilized they should be supporting Linked Clones, not Replicas</strong>. Most recent intelligent storage arrays will cache most utilized blocks in L1 DRAM cache, and if the Replica disk is being heavily utilized those blocks will end up in cache anyway.</p>
<p>It all comes down to how the VDI environment is utilized by the users. If boot storms, logon storms and VM refreshes are often requested, such in a Non-Persistent Pool serving school classes, then it is important to support Replica disks as much as possible. That means Replica disks should be on the fastest storage tier.</p>
<p>If there are no constant VM refresh or extreme login storms, then it is probably it is better to support Linked Clones as much as possible. That means Linked Clones should be on the fastest storage tier.</p>
<p>&nbsp;</p>
<p>I know, I know… that goes against industry recommendation. Well, I guess there is always someone to go 1<sup>st</sup> against the flow. I have done my tests and math and I recommend you to do yours.</p>
<p>Of course, if your organization have budget to employ Flash Drives for everything, go for it! There are technologies on the market that help in reducing the number of disks required to serve a larger number of IOPs without having to utilize an all SSD based array. Find out more <a href="http://myvirtualcloud.net/?p=2502">here</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/virtualization/use-flash-drives-ssd-for-linked-clones-not-replicas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Fling to help with migrating to ESXi</title>
		<link>http://cliffdavies.com/blog/vmware/new-fling-to-help-with-migrating-to-esxi/</link>
		<comments>http://cliffdavies.com/blog/vmware/new-fling-to-help-with-migrating-to-esxi/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 20:00:00 +0000</pubDate>
		<dc:creator>Kyle Gleed</dc:creator>
				<category><![CDATA[VMware]]></category>
		<category><![CDATA[migrating to ESXi]]></category>

		<guid isPermaLink="false">http://blogs.vmware.com/esxi/2011/11/new-fling-to-help-with-migrating-to-esxi.html</guid>
		<description><![CDATA[Kyle Gleed, Sr. Technical Marketing Manager, VMware For folks who are still running the classic ESX hypervisor there is a new fling available to help smooth your migration to ESXi. The ESX System Analyzer scans existing ESX hosts looking for issues that could affect your transition to ESXi. It produces a nice report that you can use to assess your readiness and identify any potential risks that you should be aware of before moving to ESXi. Check it out, I think you'll like it. The ESX System Analyzer is a tool designed to help administrators plan a migration from ESX...]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Kyle Gleed from http://blogs.vmware.com/esxi/</p>
<p><span style="color: #888888;"><em>Kyle Gleed, Sr. Technical Marketing Manager, VMware</em></span></p>
<p>For folks who are still running the classic ESX hypervisor there is a new <a href="http://labs.vmware.com/flings/esx-system-analyzer" >fling </a>available to help&#0160;smooth your migration to ESXi.&#0160; The <em>ESX System Analyzer</em> scans existing ESX hosts looking for issues that could affect your transition to ESXi.&#0160;&#0160;It produces a nice report that you can use to assess your readiness and identify any&#0160;potential risks&#0160;that you should be aware of before moving to ESXi.&#0160; Check it out,&#0160;I think you&#39;ll like it.&#0160;</p>
<div id="tabs-1">
<blockquote>
<p>The ESX System Analyzer is a tool designed to help administrators plan a migration from ESX to ESXi. It analyzes the ESX hosts in your environment and, for each host, collects information on factors that pertain to the migration process:</p>
<ul>
<li>Hardware compatibility with ESXi</li>
<li>VMs registered on the ESX host, as well as VMs located on the host’s local disk</li>
<li>Modifications to the Service Console 
<ul>
<li>RPMs which have been added or removed</li>
<li>Files which have been added</li>
<li>Users and cronjobs which have been added</li>
</ul>
</li>
</ul>
This tool also provides summary information for the whole existing environment 
<ul>
<li>Version of VMware Tools and Virtual Hardware for all VMs</li>
<li>Version of Filesystem for all datastores</li>
</ul>
By having this information, administrators can determine what tasks need to be done prior to the migration. Examples include: 
<ul>
<li>Relocate VMs from local datastores to shared datastores</li>
<li>Make note of what agent software has been added to the host and obtain the equivalent agentless version</li>
<li>Replace cronjobs with equivalent remote scripts written with PowerCLI or vCLI</li>
</ul>
<p>&#0160;</p>
</blockquote>
</div>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/vmware/new-fling-to-help-with-migrating-to-esxi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to sequence the Dynamics AX 2012 client with App-V 4.6 SP1 on Windows 7/2008 R2</title>
		<link>http://cliffdavies.com/blog/appv/how-to-sequence-the-dynamics-ax-2012-client-with-app-v-4-6-sp1-on-windows-72008-r2/</link>
		<comments>http://cliffdavies.com/blog/appv/how-to-sequence-the-dynamics-ax-2012-client-with-app-v-4-6-sp1-on-windows-72008-r2/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 18:29:34 +0000</pubDate>
		<dc:creator>J.C. Hornbeck</dc:creator>
				<category><![CDATA[App-V]]></category>
		<category><![CDATA[App-V 4.6]]></category>
		<category><![CDATA[Dynamics AX 2012]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Recipe]]></category>
		<category><![CDATA[Sequencing]]></category>

		<guid isPermaLink="false">http://cliffdavies.com/?guid=fdd074b161cae45d6d9adf22c6b05fc5</guid>
		<description><![CDATA[Hi everyone, Madelinde here.&#160; Since the release of the Dynamics AX 2012 client, we have received a couple of issues when customers try to virtualize this new client using Microsoft Application Virtualization 4.6 Service Pack 1. Earlier versions of...]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by J.C. Hornbeck from http://blogs.technet.com/b/appv/</p>
<p>Hi everyone, Madelinde here.&#160; Since the release of the Dynamics AX 2012 client, we have received a couple of issues when customers try to virtualize this new client using Microsoft Application Virtualization 4.6 Service Pack 1. Earlier versions of the AX client did sequence properly.</p>  <p>This post describes the symptoms, the resolution and the workaround for this particular issue. </p>  <h4>The symptoms</h4>  <p>When you try to sequence the Dynamics AX 2012 client with the App-V 4.6 Service Pack 1 sequencer on Windows 7 or Windows 2008 R2, you will notice that the Sequencer crashes with the below error. </p>  <p><a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/4370.clip_5F00_image002_5F00_2E2A0937.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/1346.clip_5F00_image002_5F00_thumb_5F00_06838D0D.jpg" width="300" height="143" /></a></p>  <p><em><font color="#0000ff">SFTSequencer.exe – Application Error </font></em></p>  <p><em><font color="#0000ff">Message: The instruction at 0x77bc76e6 referenced memory as 0xfce7687b.        <br />The memory could not be read.         <br />Click OK to terminate the program.</font></em></p>  <p>The sequencing will fail and you will be unable to sequence the new AX 2012 client.</p>  <p>This problem is caused by an issue in the App-V Sequencer. On Windows 7 and Windows Server 2008 R2, a specific function works different than on previous Windows versions such as Windows Vista. This issue will be addressed in a future Service Pack for App-V 4.6.</p>  <p>In the meantime, there is a workaround available that will allow you to sequence the AX 2012 client without issues. As mentioned before, the issue happens due to the behavior of a function in Win7/2008R2 only. Because the function behaves differently on Windows Vista, the issue will not happen on this OS. Therefore, if you follow the steps carefully, you should be able to sequence the application on Windows Vista. This package should work as expected on Windows 7 and 2008 R2. </p>  <p><i>IMPORTANT NOTE: Normally, App-V is not a cross platform solution. In this specific case the package will work because we have no platform specific things to consider. Therefore keep in mind that other applications will not work.</i></p>  <p><em></em></p>  <h3>The workaround</h3>  <p>The workaround for the issue is to sequence the AX 2012 Client using the following steps on a Windows Vista x86 or x64 machine instead of Windows 7 or 2008 R2. </p>  <p>When following the steps carefully on a Windows Vista machine, we should be able to sequence the AX 2012 Client with App-V 4.6 Service Pack 1. </p>  <p><b></b></p>  <p><b>Follow these steps first before you start the Sequencer:</b></p>  <p>1. Disable the &quot;Windows Presentation Foundation Font Cache 3.0.0.0&quot; Service</p>  <p>2. Disable the &quot;Windows Presentation Foundation Font Cache 4.0.0.0&quot; Service</p>  <p><a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/3302.clip_5F00_image004_5F00_73CE9355.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/6840.clip_5F00_image004_5F00_thumb_5F00_4508DAB3.jpg" width="500" height="207" /></a></p>  <p>3. Launch the AX Setup.exe; install all AX Client component prerequisites (use AX setup &quot;Validate prerequisites&quot; to assist in this). </p>  <p>4. Reboot the virtual machine and make a snapshot. </p>  <p><b>Workaround for AX setup problem:</b></p>  <p>1. Launch a command prompt. </p>  <blockquote>   <p>If installing AX from a CD/DVD drive, change directories to the root of the CD/DVD drive. </p>    <p>If you are installing from the network share, you must map a network drive to the share, then change directories into the folder that contains AX's setup.exe</p> </blockquote>  <p>2. Launch the App-V sequencer from the command prompt:</p>  <blockquote>   <p>&quot;C:\Program Files\Microsoft Application Virtualization Sequencer\SFTSequencer.exe&quot;</p>    <p>This will make the Sequencer's working directory the directory where AX's setup.exe exists.</p> </blockquote>  <p><b>The Sequencing process:</b></p>  <p>1. Start the App-V 4.6 Service Pack 1 Sequencer.</p>  <p>2. Click &quot;Create a New Virtual Application Package&quot;.</p>  <p>3. Click &quot;Next&quot; (Create Package)</p>  <p>4. Address any issues that are reported on the &quot;Prepare the computer for creating a virtual package&quot; screen and click &quot;Next&quot;. </p>  <p>5. Click &quot;Next&quot; (Standard application package).</p>  <p>6. Browse to the installer (AX's setup.exe).</p>  <p>7. Set Virtual Application Name to &quot;AxClient&quot; and then click “Next”.</p>  <p>8. This will launch the AX setup.</p>  <p>9. Click &quot;Install Dynamics AX components&quot;.</p>  <p>10. Click &quot;Next&quot; on the &quot;Welcome&quot; screen</p>  <p>11. Accept the license terms and hit “Next”</p>  <p>12. Pick whether or not to join the Customer Experience Improvement Program and hit “Next”</p>  <p>13. On the “Set a file location” screen, choose “Q:\AxClient” as the File location (same folder as was chosen from the Sequencer UI)</p>  <p>14. Click OK to the dialog about placing install files in a different location.</p>  <p>15. Hit “Install” on the “Ready to install” screen to install the Setup Support Files</p>  <p>16. Hit “Next” on the “Select installation type” screen (Custom installation is the only choice)</p>  <p>17. Click the &quot;Client” checkbox in the tree &quot;Prerequisite Validation&quot; should be all successful, hit &quot;Next&quot;.</p>  <p>18. Check &quot;Create a desktop shortcut for Microsoft Dynamics AX client application&quot; on the &quot;Select client preferences&quot; screen, hit &quot;Next&quot;. </p>  <p>19. Hit Next on the &quot;Specify a location for configuration settings&quot; screen. </p>  <p>20. Enter the required information on the &quot;Connect to an AOS instance&quot; screen, hit &quot;Next&quot;. </p>  <p>21. &quot;Prerequisite Validation&quot; should be all successful, hit &quot;Next&quot;. </p>  <p><a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/3480.clip_5F00_image006_5F00_200B1A3A.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/6445.clip_5F00_image006_5F00_thumb_5F00_0A4131DD.jpg" width="400" height="380" /></a></p>  <p>22. Click &quot;Install&quot; on the &quot;Ready to install&quot; screen. </p>  <p>23. Install should succeed, push &quot;Finish&quot;. </p>  <p>24. Click the &quot;Exit&quot; button on the AX Setup window. </p>  <p>25. Check the &quot;I am finished installing.&quot; checkbox and hit Next. </p>  <p>26. The Sequencer will process for a minute.</p>  <p>27. On the &quot;Configure Software&quot; screen, select &quot;Ax32.exe&quot; and click &quot;Run Selected&quot;. </p>  <p>28. Explore the AX client a bit, open various forms, and navigate through various menus.</p>  <p>29. Close the AX client. (Some machines report a shutdown crash at this point which can be ignored) </p>  <p>30. When control returns to the Sequencing Wizard, click &quot;Launch&quot; again to re-launch the AX client. </p>  <p>31. Explore the AX client a bit, open various forms, and navigate through various menus. </p>  <p>32. Close the AX client. (Some machines report a shutdown crash at this point which can be ignored) </p>  <p>33. Click &quot;Next&quot;. </p>  <p>34. Click &quot;Next&quot; on the &quot;Installation Report&quot; screen.</p>  <p>35. On the &quot;Customize&quot; screen select the &quot;Customize&quot; radio button and hit next. </p>  <p><a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/3005.clip_5F00_image008_5F00_5051EEF0.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image008" border="0" alt="clip_image008" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/0753.clip_5F00_image008_5F00_thumb_5F00_7D66DBBE.jpg" width="400" height="285" /></a></p>  <p>36. On the &quot;Edit Shortcuts&quot; select “Microsoft Dynamics AX 2012” and hit “Edit”. The Sequencer isn’t correctly setting the shortcut icon or version number. Adjust the “Version” field and “OSD File Name” to the appropriate version number then click the “Change Icon…” button. </p>  <p><a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/1665.clip_5F00_image010_5F00_20B3D064.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image010" border="0" alt="clip_image010" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/8688.clip_5F00_image010_5F00_thumb_5F00_2DADB075.jpg" width="300" height="295" /></a></p>  <p>37. Browse to the path “Q:\AxClient\Client\Bin\AxSearchSetup.exe” and double-click on the Dynamics icon (doesn’t work to pick the one from Ax32.exe).</p>  <p><a href="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/0160.clip_5F00_image012_5F00_1AF8B6BE.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image012" border="0" alt="clip_image012" src="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-81-metablogapi/0763.clip_5F00_image012_5F00_thumb_5F00_53372DD6.jpg" width="300" height="355" /></a></p>  <p>38. Click “Save” on the “Edit Application” screen</p>  <p>39. Click “Next” on the &quot;Prepare for Streaming&quot; screen and click “Yes” on the ensuring “Launch Applications” dialog</p>  <p>40. On the &quot;Target OS&quot; screen, select 32-bit Windows 7 and 64-bit Windows 7. </p>  <p>41. Click &quot;Next&quot;. </p>  <p>42. On the &quot;Create Package&quot; screen hit &quot;Create&quot;</p>  <p>This package should be deployable on a Windows 7 32-bit or Windows 7 64-bit machine.&#160; You should make sure that all the AX 2012 Client’s prerequisites are installed on the clients.</p>  <p><strong>Madelinde Walraven | Senior App-V Support Engineer</strong></p>  ]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/appv/how-to-sequence-the-dynamics-ax-2012-client-with-app-v-4-6-sp1-on-windows-72008-r2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protecting your ESXi Images using VIB Acceptance Levels</title>
		<link>http://cliffdavies.com/blog/vmware/protecting-your-esxi-images-using-vib-acceptance-levels/</link>
		<comments>http://cliffdavies.com/blog/vmware/protecting-your-esxi-images-using-vib-acceptance-levels/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 15:42:07 +0000</pubDate>
		<dc:creator>Kyle Gleed</dc:creator>
				<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://blogs.vmware.com/esxi/2011/11/protecting-your-esxi-images-using-vib-acceptance-levels.html</guid>
		<description><![CDATA[Kyle Gleed, Sr. Technical Marketing Manager, VMware Duncan Epping recently posted some great info on creating custom VIB files (How to create your own .vib files, Some more nuggets about handling vib files). With custom VIBs making their way into the community this got me thinking that a quick refresher on VIB security would be helpful. A while back I posted a VIB overview blog in which I discussed how signature files are used to help not only identify if a VIB is officially supported, but also to protect the against any malicious tampering of the VIBs contents. While custom...]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Kyle Gleed from http://blogs.vmware.com/esxi/</p>
<p><span style="color: #888888;"><em>Kyle Gleed, Sr. Technical Marketing Manager, VMware</em></span></p>
<p>Duncan Epping recently posted some great info on creating custom VIB files (<a href="http://www.yellow-bricks.com/2011/11/29/how-to-create-your-own-vib-files/" >How to create your own .vib files</a>,&#0160;<a href="http://www.yellow-bricks.com/2011/11/30/some-more-nuggets-about-handling-vib-files/" >Some more nuggets about handling vib files</a>).&#0160;&#0160;With custom VIBs making their way into the community this got me thinking that a quick refresher on VIB security would be helpful.&#0160; A while back I posted a <a href="http://blogs.vmware.com/esxi/2011/09/whats-in-a-vib.html" >VIB overview blog</a> in which I discussed how signature files are used to help not only identify if a VIB is&#0160;officially supported, but also to protect the against any malicious tampering of the VIBs contents.&#0160; While custom VIBs definitely have their place (see <a href="http://blogs.vmware.com/esxi/2011/11/kb.vmware.com/kb/2007381" >KB 2007381</a>), do exercise caution when adding them to your ESXi image profiles.&#0160; Here&#39;s a quick recap of the section on VIB security:</p>
<p>The <strong>signature file</strong>is an electronic signature used to verify the level of trust associated with the VIB.&#0160; The acceptance level not only helps protect the integrity of the VIB, but it also identifies who created the VIB and the amount of testing and verification that has been done. There are four acceptance levels:</p>
<ul>
<li><strong>VMwareCertified</strong>: &#0160;VIBs created and tested by VMware.&#0160; VMware Certified VIBs undergo thorough testing by VMware.</li>
</ul>
<ul>
<li><strong>VMwareAccepted</strong>:&#0160; VIBs created by a VMware partners that are approved by VMware.&#0160; VMware relies on partners to perform the testing, but VMware verifies the results. </li>
</ul>
<ul>
<li><strong>PartnerSupported</strong>:&#0160; VIBs created and tested by a trusted VMware partner.&#0160; The partner performs all testing. &#0160;VMware does not verify the results. </li>
</ul>
<ul>
<li><strong>CommunitySupported</strong>:&#0160; VIBs created by individuals or partners outside of the VMware partner program.&#0160; These VIBs do not undergo any VMware or trusted partner testing and are not supported by VMware or its partners.&#0160; </li>
</ul>
<p>All VMware and partner supported VIBs must be signed by a VMware trusted authority, this helps ensure the security of the VIB by preventing any unauthorized tampering of its contents.&#0160;&#0160; Community supported VIBs do not need to be signed, but they are still required to have an empty signature file.&#0160; Be careful when using CommunitySupported VIBs as their contents are not tested, monitored or controlled.&#0160;</p>
<p>Coinciding with the VIB acceptance levels, ESXi Image Profiles also have an acceptance level.&#0160; When the image is created it is assigned one of the four acceptance levels.&#0160; Any VIBs added to the image must be at the same acceptance level or higher.&#0160; This helps ensure that non-supported VIBs don’t get mixed in with supported VIBs when creating and maintaining ESXi images.</p>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/vmware/protecting-your-esxi-images-using-vib-acceptance-levels/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why You Shouldn’t Install Citrix Receiver on Citrix XenApp</title>
		<link>http://cliffdavies.com/blog/xenapp/why-you-shouldn%e2%80%99t-install-citrix-receiver-on-citrix-xenapp/</link>
		<comments>http://cliffdavies.com/blog/xenapp/why-you-shouldn%e2%80%99t-install-citrix-receiver-on-citrix-xenapp/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 12:45:28 +0000</pubDate>
		<dc:creator>Trond Eirik Haavarstein</dc:creator>
				<category><![CDATA[XenApp]]></category>
		<category><![CDATA[citrix receiver]]></category>
		<category><![CDATA[tuning tips]]></category>

		<guid isPermaLink="false">http://www.xenappblog.com/?p=2815</guid>
		<description><![CDATA[The newest Citrix Receiver for Windows 3.0 (13.0.0.6685) requires almost 150% more memory per user than Citrix ICA Client 11.2. So when optimizing you Citrix servers for the highest user density you should consider if you even need some of these new features if any. Normally the Citrix client is installed on XenApp servers only [...]]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Trond Eirik Haavarstein from http://www.xenappblog.com</p>
<p>The newest <em>Citrix Receiver</em> for Windows 3.0 (13.0.0.6685) requires almost 150% more memory per user than <a
href="http://www.xenappblog.com/downloads/?did=16">Citrix ICA Client 11.2</a>. So when optimizing you Citrix servers for the highest user density you should consider if you even need some of these new features if any.</p><p>Normally the Citrix client is installed on XenApp servers only to allow for ICA in ICA to internal back-end or Cloud hosted applications.</p><p><strong>Register the Citrix Receiver with web browser :</strong></p>
<p><a href="http://cdn.xenappblog.com/wp-content/uploads/2011/11/Register-the-Citrix-Receiver-with-web-browser.png?9d7bd4" rel="lightbox[2815]"><img class="alignnone size-medium wp-image-2817" title="Register the Citrix Receiver with web browser" src="http://cdn.xenappblog.com/wp-content/uploads/2011/11/Register-the-Citrix-Receiver-with-web-browser-300x100.png?9d7bd4" alt="Register the Citrix Receiver with web browser 300x100 Why You Shouldnt Install Citrix Receiver on Citrix XenApp" width="300" height="100" /></a></p>

<p>There&#8217;s currently also a bug with <span
style="text-decoration: underline;">Citrix Receiver</span> for Windows 3.0 and the Shadow Taskbar. This applies to both XenApp 5 and 6. The workaround for XenApp 6 is to copy the <strong>wshadow.exe</strong> from the XenApp 6.5 media, but on XenApp 5 there&#8217;s currently no hotfix available.</p>

<p>So keep safe and stick to the working <a href="http://www.xenappblog.com/downloads/?did=16">Citrix ICA Client 11.2</a> and save some memory at the same time.</p>

<p>If your users are constantly getting a MSI repair when they visit a Citrix Web Interface site this is most due to the missing ConnectionCenter entry in Registry. Simply push this registry value through Microsoft Group Policy Preferences.</p>

<p><a href="http://cdn.xenappblog.com/wp-content/uploads/2011/11/Citrix-Receiver-13-on-XenApp-02.png?9d7bd4" rel="lightbox[2815]"><img
class="alignnone size-medium wp-image-2819" title="Citrix Receiver 13 on XenApp 02" src="http://cdn.xenappblog.com/wp-content/uploads/2011/11/Citrix-Receiver-13-on-XenApp-02-300x79.png?9d7bd4" alt="Citrix Receiver 13 on XenApp 02 300x79 Why You Shouldnt Install Citrix Receiver on Citrix XenApp" width="300" height="79" /></a></p>

<ul><li>For <strong>x32</strong> this is located in HKLM\Software\Microsoft\Windows\CurrentVersion\Run</li><li>For <strong>x64</strong> this is located in HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run</li></ul>

<p>While you&#8217;re at it, make sure you delete any references in Run to Acrobat Assistant 8.0, Adobe Acrobat Speed Launcher, Adobe ARM, BCSSync and so on. These will only steal unnecessary memory from your system.</p><br><br>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/xenapp/why-you-shouldn%e2%80%99t-install-citrix-receiver-on-citrix-xenapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top 10 Server 2008 Tasks done with PowerShell – Part 1</title>
		<link>http://cliffdavies.com/blog/general/top-10-server-2008-tasks-done-with-powershell-%e2%80%93-part-1/</link>
		<comments>http://cliffdavies.com/blog/general/top-10-server-2008-tasks-done-with-powershell-%e2%80%93-part-1/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 19:43:51 +0000</pubDate>
		<dc:creator>Jeff Hicks</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Windows Server]]></category>
		<category><![CDATA[Windows Server 2008]]></category>

		<guid isPermaLink="false">http://www.petri.co.il/?p=21118</guid>
		<description><![CDATA[In this video post, Jeff hicks goes through the first 5 of the top 10 tasks to perform with PowerShell in Windows Server 2008.  In part 1 Jeff covers changing local administrator passwords, restarting &#038; shutting down servers, terminating or restarting processes and creating a disk utilization report, all with PowerShell.]]></description>
			<content:encoded><![CDATA[<p class="syndicated-attribution">An article by Jeff Hicks from http://www.petri.co.il</p>
<h3>Introduction</h3>
<p>There are lots of server tasks in Windows Server 2008 that can be done much faster with Windows PowerShell than with a GUI. What you’ll find in this article series are ten common server tasks all done on PowerShell.</p>
<p>In this two part mini-series you’ll learn how to:</p>
<ol>
<li>Change the local administrator password with PowerShell</li>
<li><Restart or shutdown a server with PowerShell</li>
<li>Restart a service with PowerShell</li>
<li>Terminate a process with PowerShell</li>
<li>Create a disk utilization report with PowerShell</li>
<li>Get 10 most recent event log errors with PowerShell</li>
<li>Reset access control on a folder with PowerShell</li>
<li>Get a server’s uptime with PowerShell</li>
<li>Get service pack information with PowerShell</li>
<li>Delete old files with PowerShell</li>
</ol>
<p>In today’s article we’ll start with tasks one through five; in Part 2 in this series we’ll continue with tasks six through ten.</p>

<h3 id="adminpass">1. Changing the local administrator password with PowerShell</h3>
<p>Let’s assume you’re logged in as a domain administrator on a Windows 7 desktop that belongs to your domain. Now, let’s say you want to change the local admin password on a remote server in Chicago named <strong>CHI-WIN7-22</strong>. After an account password is used for some time, the chances of it getting exposed gets higher. That’s why you need to change your passwords from time to time.</p>
<p>The first thing to do to change the admin password in question is to create an ADSI object for the local administrator on that computer. That can be achieved by typing this in your PowerShell screen:</p>
<pre>[ADSI]$Admin=”WinNT://CHI-WIN7-22/Administrator”</pre>
<p>This will essentially retrieve the admin account on <strong>CHI-WIN7-22</strong> and assign it to an ADSI object named $<strong>Admin.</strong> The WinNT monicker in that string is case-sensitive and is a common source of error, so take note of that. If you want to connect to another computer, just replace<strong> CHI-WIN7-22 </strong>with the name of the computer you want to connect to.</p>
<p>Naturally, you’ll want to know first how long the password has been in use to determine whether or not the time has come to change it. You can obtain that information from $<strong>Admin </strong>by typing in:</p>
<pre>$Admin.PasswordAge</pre>
<p>That will display the time elapsed since the password of that account was last changed. However, since the resulting value is expressed in seconds, I normally divide it by 86,400, which is the number of seconds in a day:</p>
<pre>$Admin.PasswordAge.Value/86400</pre>
<p>The result will then be the same time elapsed but expressed in days, which I find more meaningful. If you notice, we used the Value property here. That’s because the <strong>PasswordAge </strong>is actually stored as a collection, and so we need the value of that collection in order to return a number that we can perform a division operation on.</p>
<p>Finally, you can change the password by invoking the <strong>SetPassword </strong>method and then using the new password as the argument. For example, if you want the new password to be <strong>S3cre+WOrd</strong>, then type:</p>
<pre>$Admin.SetPassword(“S3cre+WOrd”)</pre>
<p>Note: After you hit enter, don’t expect any confirmation message because there won’t be any. Changes will take effect immediately. That’s because what we’re using here is a method, not a cmdlet. Which means, unlike with cmdlets, <strong>SetPassword </strong>has no support for a <strong>-whatif </strong>or a <strong>-confirm.</strong></p>
<p>That’s all there is to it. Let me now show you the steps we’ve discussed here in theory on an actual PowerShell:</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/01-change-password.png"><img class="alignnone size-full wp-image-21135" title="change password" src="http://www.petri.co.il/wp-content/uploads/01-change-password.png" alt="Change Password with PowerShell" width="486" height="102" /></a></p>
<h3 id="server-restart-and-shutdown">2. Restarting or shutting down a server with PowerShell</h3>
<p>Let’s now move on to the task of restarting or shutting down a server using PowerShell. Just like the first task, we’re still going to assume you’re logged in as a domain administrator on a Windows 7 machine that belongs to your domain.</p>
<p>For these tasks, we’ll be using a couple of WMI-based cmdlets, <strong>Restart-Computer</strong> and <strong>Stop-Computer</strong>. Although we won’t be showing them here, it’s worth mentioning that these cmdlets accept alternate credentials. Alternate credentials allow you to specify a user account other than the one you are already logged into so that you can perform actions that that (alternate) account has permissions for.</p>
<p>Another thing that’s nice about these cmdlets is that you’ll be able to make use of <strong>-whatif</strong> and <strong>-confirm</strong>. That means, if you want to do a restart or a shutdown, you’ll have a way of making  sure you’ll be doing it on the computer you intend to do it on. This can come in handy if you want to perform restarts or shutdowns on a number of computers. You can just pipe a list or group of computers to these cmdlets.</p>
<p>To restart a remote computer or computers, the basic syntax is:</p>
<pre><strong>Restart-Computer -ComputerName &lt;string[ ]&gt;</strong>,</pre>
<p>wherein<strong> -ComputerName &lt;string[ ]&gt; </strong>is a string array that can be comprised of the name of a single computer or the names of multiple computers. <strong>Stop-Computer</strong> uses practically the same syntax. So for example, if you want to restart two computers named CHI-DC02 and CHI-FP01, the command would be:</p>
<pre><strong>Restart-Computer “CHI-DC02”, “CHI-FP01”</strong></pre>
<p>Here’s an actual PowerShell screenshot wherein we used the <strong>-whatif</strong> argument. You use a <strong>-whatif </strong>if you simply want to simulate what would happen if you would execute the command in question.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/02-restart-computer.png"><img class="alignnone size-full wp-image-21138" title="Restart-computer" src="http://www.petri.co.il/wp-content/uploads/02-restart-computer.png" alt="Restart Computer with PowerShell" width="430" height="55" /></a></p>
<p>That was pretty straightforward. Let’s now try a more sophisticated example. Let’s assume you have a list of computers in a file named <strong>servers.txt</strong>. You can use the <strong>Get-Content</strong> cmdlet to retrieve the contents of that text file, like this:</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/03-get-content.png"><img class="alignnone size-full wp-image-21139" title="Get-content" src="http://www.petri.co.il/wp-content/uploads/03-get-content.png" alt="Get Content with PowerShell" width="398" height="124" /></a></p>
<p>So, if you have a bunch of computers that you want to restart on a regular basis, you can list down the names of those computers in a text file. Then each time you need to restart them, you simply use the <strong>Get-Content</strong> cmdlet. Here’s how we used <strong>Get-Content </strong>and <strong>Restart-Computer</strong> in a real-world scenario:</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/04-restart-computers-from-a-text-file.png"><img class="alignnone size-full wp-image-21140" title="04 - restart computers from a text file" src="http://www.petri.co.il/wp-content/uploads/04-restart-computers-from-a-text-file.png" alt="Restart Computers from Text File" width="433" height="169" /></a></p>
<p>First, we got the content from the text file using <strong>Get-Content.</strong> Then, because we wanted to prepare for the eventuality that some computers would be offline, we piped the list to a <strong>where </strong>statement for testing. In the <strong>where </strong>statement, we ran <strong>test-connection, </strong>which is basically a <strong>ping</strong> on each computer.</p>
<p>The <strong>-quiet </strong>returns either <strong>true</strong> or <strong>false</strong>, while <strong>-count 2</strong> means each computer will only be pinged twice. Those computers that were successfully pinged twice, were then passed along the pipeline.</p>
<p>Next, we used a <strong>foreach.</strong> Specifically, the objective was that: for each name that came out of the ping test, a green-colored message would be written saying that that computer was “<strong>Restarting</strong>”. The <strong>$_</strong> stands for the current object in the pipeline. Next, the <strong>Restart-Computer</strong> cmdlet was called to restart each computer that could be pinged. We also used the <strong>-force</strong> parameter to kick off anyone logged on.</p>
<p>Finally, we used <strong>-whatif</strong> again to see what would happen without having to actually restart those computers.</p>
<h3 id="restart-service">3. Restarting a service with PowerShell</h3>
<p><strong>Restart-Service </strong>is the cmdlet used for restarting a service. Although this cmdlet does not have a built-in mechanism to connect to a remote computer, PowerShell Remoting can be enabled so that you can execute it locally via remoting on the remote computer. This can come in handy when you want to restart a service on a group of computers.</p>
<p>To restart a service locally, simply say: <strong>Restart-Service “service”</strong>, wherein “service” is the name of the service you want to restart. On the other hand, if you want to restart a service on one or more remote machines, then you can use the <strong>Invoke-Command </strong>cmdlet and <strong>PowerShell Remoting</strong>. <strong> </strong></p>
<p>In the PowerShell screenshot below, you see two instances wherein we executed the <strong>Restart-Service </strong>cmdlet to restart the service called <strong>wuauserv</strong>, which is the Windows Update service. In the first instance, <strong>Restart-Service</strong> is executed locally. But in the second instance, it is executed on a remote database server named <strong>CHI-DB01 </strong>with the help of the <strong>Invoke-Command.</strong></p>
<p><a href="http://www.petri.co.il/wp-content/uploads/05-restart-service.png"><img class="alignnone size-full wp-image-21141" title="05 - restart-service" src="http://www.petri.co.il/wp-content/uploads/05-restart-service.png" alt="Restart Service with PowerShell" width="484" height="137" /></a></p>
<p>By default, <strong>Restart-Service</strong> doesn’t write any objects in the pipeline unless you use <strong>-passthru.</strong> So the additional information you see at the bottom (Status, Name, etc.) is a result of using <strong>-passthru</strong>. If the service runs on multiple computers and you want to restart the service running there as well, just add more computer names in a comma-separated list.</p>
<p>Another way to do that same task is by using WMI. First, you create a WMI object:</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/06-get-wmiobject.png"><img class="alignnone size-full wp-image-21142" title="06 - get-wmiobject" src="http://www.petri.co.il/wp-content/uploads/06-get-wmiobject.png" alt="Get WMIObject with PowerShell" width="429" height="26" /></a></p>
<p><strong>gwmi </strong>is the alias for <strong>Get-WmiObject.</strong></p>
<p>Let me show you first the methods of this object. To do that, we’ll pipe the object to <strong>Get-Member </strong>(alias is <strong>gm)</strong>.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/07-methods-of-wmi-object.png"><img class="alignnone size-full wp-image-21143" title="07 - methods of wmi object" src="http://www.petri.co.il/wp-content/uploads/07-methods-of-wmi-object.png" alt="WMIObject Methods" width="479" height="221" /></a></p>
<p>If you notice, there is no method for restarting ther service. That means, we will have to stop the service using the <strong>StopService </strong>method and then start it again using the <strong>StartService </strong>method.</p>
<p>Here’s how you stop the service using the object’s <strong>StopService </strong>method. The parenthesis indicates it’s a method. If you get a <strong>ReturnValue </strong>of 0, that means the service stopped successfully. In case you get another value, you can research what that value means by reading the MSDN documentation for the Win32 service class.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/08-stopservice-method.png"><img class="alignnone size-full wp-image-21144" title="08 - stopservice method" src="http://www.petri.co.il/wp-content/uploads/08-stopservice-method.png" alt="Stop Service Method with PowerShell" width="403" height="184" /></a></p>
<p>To fire the service up again, you use the <strong>StartService </strong>method.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/09-startservice-method.png"><img class="alignnone size-full wp-image-21166" title="09 - startservice method" src="http://www.petri.co.il/wp-content/uploads/09-startservice-method.png" alt="Startservice Method with PowerShell" width="401" height="184" /></a></p>
<p>You can verify by executing the <strong>get-service </strong>command for that computer. <strong>Get-service </strong>allows you to connect to a remote computer, so you can simply get that service from the target computer to verify if it is in fact running there.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/10-get-service.png"><img class="alignnone size-full wp-image-21167" title="10 - get-service" src="http://www.petri.co.il/wp-content/uploads/10-get-service.png" alt="Get Service with PowerShell" width="382" height="122" /></a></p>
<h3 id="terminate-process">4. Terminating a Process with Powershell</h3>
<p>Another task that’s commonly done on a server is terminating a process. To terminate a process, you use the <strong>Stop-Process </strong>cmdlet. Again, this can be executed locally or, if you want to stop a process on a remote system, you can use <strong>Stop-Process </strong>along with <strong>PowerShell Remoting</strong>.</p>
<p>There are two ways of terminating a process using the <strong>Stop-Process </strong>cmdlet.</p>
<p>The first one is pretty straightforward. You just run the <strong>Stop-Process </strong>command and then pass to it either the name of the process or its corresponding ID. In the screenshot below, the name of the process being killed is ‘<strong>Calc</strong>’ (which is really just the Windows Calculator). Note that <strong>Calc</strong> is running locally in this example.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/11-stop-process.png"><img class="alignnone size-full wp-image-21168" title="11 - stop-process" src="http://www.petri.co.il/wp-content/uploads/11-stop-process.png" alt="Stop Process with PowerShell" width="453" height="110" /></a></p>
<p>The second involves using the <strong>Get-Process </strong>cmdlet to get one or more processes and then piping them to <strong>Stop-Process </strong>to kill all those processes at the same time. In the screenshot below, the process being killed is <strong>Notepad</strong>. Note that <strong>kill </strong>is an alias of <strong>Stop-Process</strong>. Again, just like <strong>Calc</strong> in the previous example, <strong>Notepad</strong> is running locally.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/12-get-process-kill.png"><img class="alignnone size-full wp-image-21169" title="12 - get-process kill" src="http://www.petri.co.il/wp-content/uploads/12-get-process-kill.png" alt="Get Process Kill with PowerShell" width="471" height="69" /></a></p>
<p>Let’s now move on to an example where we have a process running remotely. First, let’s fire up a process to kill. So here, we’re starting <strong>notepad</strong> on a remote computer named <strong>chi-fp01</strong>.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/13-fire-up-a-process.png"><img class="alignnone size-full wp-image-21170" title="13 - fire up a process" src="http://www.petri.co.il/wp-content/uploads/13-fire-up-a-process.png" alt="Fire Up a Process with PowerShell" width="482" height="176" /></a></p>
<p>Next, let’s check whether the process is actually running. For this purpose, we use <strong>ps,</strong> which is an alias for <strong>Get-Process.</strong></p>
<p><a href="http://www.petri.co.il/wp-content/uploads/14-get-process-alias.png"><img class="alignnone size-full wp-image-21171" title="14 - get-process alias" src="http://www.petri.co.il/wp-content/uploads/14-get-process-alias.png" alt="Get Process Alias with PowerShell" width="415" height="76" /></a></p>
<p>Ok. Now that we have a remote process to kill, let’s go ahead and kill it. Like what we did in our discussion on <strong>Restarting a Service</strong>, we’ll use <strong>Invoke-Command </strong>and <strong>PowerShell Remoting</strong> to run the <strong>Stop-Process </strong>expression on the remote server <strong>chi-fp01</strong>.</p>
<p>See how the <strong>Get-Process </strong>alias (<strong>ps)</strong>, which is running in the script block, pipes the process to the <strong>Stop-Process </strong>alias (<strong>kill</strong>)<strong>.</strong></p>
<p><a href="http://www.petri.co.il/wp-content/uploads/15-killing-a-remote-process-using-invoke-command.png"><img class="alignnone size-full wp-image-21172" title="15 - killing a remote process using invoke-command" src="http://www.petri.co.il/wp-content/uploads/15-killing-a-remote-process-using-invoke-command.png" alt="Killing a Remote Process using Invoke Command with PowerShell" width="489" height="46" /></a></p>
<h3 id="create-disk-report">5. Creating a Disk Utilization Report with PowerShell</h3>
<p>As admins, we often need to keep track of how much disk space is being used on our servers. We can accomplish this using WMI and the Win32_LogicalDisk class, which will give us information such as the Device ID, the size of the drive, free space, and a few other bits of information.</p>
<p>Using WMI, we can query local or remote computers. We can also perform those queries on either a single or multiple machines. In addition, we can: export the data we query to a CSV file or a database; create a text-based or an HTML-based report; or simply display the output to the screen.</p>
<p>Here’s a sample command using WMI on a local computer.</p>
<p><strong>Get-WmiObject win32_logicaldisk -filter “drivetype=3” | Out-File c:\Reports\Disks.txt</strong></p>
<p>We use the <strong>GetWmiObject </strong>cmdlet to return information from the <strong>Win32_LogicalDisk </strong>class. Then we employ the <strong>-filter </strong>to return only information related to <strong>drivetype=3</strong>, which stands for fixed logical disks like the <strong>c:</strong> drive. That means, information regarding USB drives and network drives are not to be included.The returned information is then piped to a text file named <strong>Disks.txt</strong>.</p>
<p>Here’s a similar example done in an actual PowerShell where we could see an actual output. Note that we are using aliases to shorten the command. Also, in this example, we specified that the output would include the device ID, disk size, the free space, and the system name.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/16-get-wmiobject-win32-logicaldisk.png"><img class="alignnone size-full wp-image-21173" title="16 - get-wmiobject win32-logicaldisk" src="http://www.petri.co.il/wp-content/uploads/16-get-wmiobject-win32-logicaldisk.png" alt="Get WMIObject with PowerShell" width="563" height="132" /></a></p>
<p>While there’s certainly nothing wrong with that output, it sure could use a couple of improvements. For example, you might want to display the size and free space in Gigabytes instead of bytes. We can actually get a more elegant output by adding a few extra steps. Let me show you how.</p>
<p>For this purpose, we’re going to create a function named <strong>Get-DiskUtil.</strong> Although the succeeding example is going to show you how to do things interactively in the shell, you can actually put this function in a script file, load it into your profile, or load it to your other scripts so that you can use it again later on.</p>
<p>Here’s the function I’m talking about:</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/17-getdiskutil-function.png"><img class="alignnone size-full wp-image-21174" title="17 - getdiskutil function" src="http://www.petri.co.il/wp-content/uploads/17-getdiskutil-function.png" alt="Get Diskutil Function with PowerShell" width="454" height="157" /></a></p>
<p>Let’s dissect that function now.</p>
<p>The function is going to take a computer name as its parameter and it will default to the local computer name.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/18-function-parameter.png"><img class="alignnone size-full wp-image-21188" title="18 - function parameter" src="http://www.petri.co.il/wp-content/uploads/18-function-parameter.png" alt="Function Parameter with PowerShell" width="503" height="52" /></a></p>
<p>Now we use the <strong>Process </strong>script blocks that this computer name property can be piped-in to the function. If it gets a piped-in value ($_), then it’s going to set the computer name variable to that piped-in value. Otherwise, it will take the computer name that gets piped-in as a parameter.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/19-process-script-block.png"><img class="alignnone size-full wp-image-21175" title="19 - process script block" src="http://www.petri.co.il/wp-content/uploads/19-process-script-block.png" alt="Process Script Block with PowerShell" width="503" height="52" /></a></p>
<p>Next up is the <strong>GetWmiObject </strong>expression.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/20-get-wmiobject-inside-a-function.png"><img class="alignnone size-full wp-image-21176" title="20 - get-wmiobject inside a function" src="http://www.petri.co.il/wp-content/uploads/20-get-wmiobject-inside-a-function.png" alt="Get WMIObject inside a function in PowerShell" width="501" height="26" /></a></p>
<p>The output of that expression is piped to the <strong>Select-Object </strong>cmdlet (represented by its alias, <strong>Select)</strong>. We then make use of a hashtable to create a custom property called <strong>Computername</strong>. This basically renames the <strong>SystemName</strong> of the current object ($_) to <strong>Computername</strong>. The <strong>DeviceID</strong> is passed along as is.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/21-hashtables.png"><img class="alignnone size-full wp-image-21177" title="21 - hashtables" src="http://www.petri.co.il/wp-content/uploads/21-hashtables.png" alt="HashTables with PowerShell" width="426" height="40" /></a></p>
<p>We then deploy a couple more hashtables. The first one takes the <strong>Size</strong> property, divides it by 1GB, expresses the result into two decimal points, and renames the property to <strong>SizeGB</strong>. The second one takes the <strong>Freespace</strong> property and does practically the same thing to it.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/22-second-set-of-hashtables.png"><img class="alignnone size-full wp-image-21178" title="22 - second set of hashtables" src="http://www.petri.co.il/wp-content/uploads/22-second-set-of-hashtables.png" alt="Second set of Hashtables with PowerShell" width="429" height="39" /></a></p>
<p>Next, we create a new property called <strong>UsedGB</strong>, which doesn’t exist in WMI. It simply takes the difference between the <strong>Size</strong> and <strong>FreeSpace</strong> properties and divides the result by 1GB.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/23-creating-a-new-property.png"><img class="alignnone size-full wp-image-21179" title="23 - creating a new property" src="http://www.petri.co.il/wp-content/uploads/23-creating-a-new-property.png" alt="Creating a New Property with PowerShell" width="430" height="31" /></a></p>
<p>Finally, we also create another property called <strong>PerFree,</strong> which stands for “percent free”. This shows the free space as a fraction of total disk size expressed in percentage. And that completes the function.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/24-percent-free.png"><img class="alignnone size-full wp-image-21180" title="24 - percent free" src="http://www.petri.co.il/wp-content/uploads/24-percent-free.png" alt="Percent Free with PowerShell" width="429" height="31" /></a></p>
<p>Here’s the function in action wherein we passed to it the name of the computer, piped the output to <strong>Format-Table </strong>(or <strong>ft)</strong>, and set the final output to auto-size using <strong>-auto</strong>.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/25-get-diskutil-function-in-action.png"><img class="alignnone size-full wp-image-21181" title="25 - get-diskutil function in action" src="http://www.petri.co.il/wp-content/uploads/25-get-diskutil-function-in-action.png" alt="Get Diskutil Function in PowerShell Action" width="430" height="101" /></a></p>
<p>While all this looks nice and pretty, there’s still a lot more that we can get from this function. So let’s say that on a weekly basis, you need to get a disk utilization report of all the servers in your environment. Here are a couple of different ways you can work with this data.</p>

<p>The first thing we’re going to do is to save the results of our expression to the variable <strong>$data</strong>. That’s so we don’t have to type in the command repeatedly. Next, we pipe the results to the <strong>where </strong>object, do the ping tests (pinging it twice when it can be pinged), and then pipe the computer name to our newly-created <strong>Get-DiskUtil </strong>function.</p>
<p>You’ll know that the command is done executing when you get the prompt back.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/26-using-the-get-diskutil-function.png"><img class="alignnone size-full wp-image-21182" title="26 - using the get-diskutil function" src="http://www.petri.co.il/wp-content/uploads/26-using-the-get-diskutil-function.png" alt="Using Get Diskutil Function in PowerShell" width="484" height="44" /></a></p>
<p>That would mean the data has already been stored in <strong>$data</strong>. You can then pipe the information in <strong>$data</strong> to sort by <strong>computername</strong> and then set it to auto-resize. You can also send that information to <strong>Out-Printer </strong>or <strong>Out-File.</strong></p>
<p><a href="http://www.petri.co.il/wp-content/uploads/27-using-the-output-of-the-get-diskutil-function.png"><img class="alignnone size-full wp-image-21183" title="27 - using the output of the get-diskutil function" src="http://www.petri.co.il/wp-content/uploads/27-using-the-output-of-the-get-diskutil-function.png" alt="Using the Output of the Get Diskutil Function in PowerShell" width="349" height="156" /></a></p>
<p>Similarly, if you want to load that information to a SQL database or an Excel spreadsheet, you can convert the data to a CSV file like this:</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/28-export-to-csv.png"><img class="alignnone size-full wp-image-21184" title="28 - export to csv" src="http://www.petri.co.il/wp-content/uploads/28-export-to-csv.png" alt="Export to CSV in PowerShell" width="312" height="34" /></a></p>
<p>Later on, if you import that CSV file, you will be able to obtain a snapshot of the disk utilization status of those disks right at the time the command is run.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/29-import-csv.png"><img class="alignnone size-full wp-image-21185" title="29 - import csv" src="http://www.petri.co.il/wp-content/uploads/29-import-csv.png" alt="Import CSV with PowerShell" width="305" height="22" /></a></p>
<p>Here’s a portion of that snapshot:</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/30-snapshot-of-disk-utilization.png"><img class="alignnone size-full wp-image-21186" title="30 - snapshot of disk utilization" src="http://www.petri.co.il/wp-content/uploads/30-snapshot-of-disk-utilization.png" alt="Snapshot of Disk Utilization" width="250" height="295" /></a></p>
<p>As a final example, let me show you how to create an HTML report that perhaps you will want to put on your Internet server to show disk utilization. So that, as an IT admin, you can go ahead and take a quick peek at your disk utilization status even while you’re outside the office.</p>
<p>So again, you start by taking $<strong>data </strong>and pipe it to <strong>Sort Computername</strong>. You then pipe the result to the <strong>ConvertTo-HTML </strong>cmdlet. You also give it a title and specify a CSS path. The CSS part is needed because <strong>ConverToHTML </strong>does not do any formatting. So if you want your report to look pretty you’ll need that CSS file. Finally, you need to send the output to a file.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/31-output-to-html.png"><img class="alignnone size-full wp-image-21187" title="31 - output to html" src="http://www.petri.co.il/wp-content/uploads/31-output-to-html.png" alt="Output to HTML" width="477" height="50" /></a></p>
<p>Now that your file’s ready, you can then look at the file by using the <strong>start </strong>command.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/32-show-html-report.png"><img class="alignnone size-full wp-image-21189" title="32 - show html report" src="http://www.petri.co.il/wp-content/uploads/32-show-html-report.png" alt="Show HTML Report with PowerShell" width="551" height="35" /></a></p>
<p>Here’s a sample of that HTML report.</p>
<p><a href="http://www.petri.co.il/wp-content/uploads/33-disk-utilization-report.png"><img class="alignnone size-full wp-image-21190" title="33- disk utilization report" src="http://www.petri.co.il/wp-content/uploads/33-disk-utilization-report.png" alt="Disk Utilization Report with PowerShell" width="380" height="286" /></a></p>
<p>Remember that the values on this report are up-to-date.</p>
<h3>Conclusion</h3>
<p>That wraps up Part 1 of this article. In the second part, we’ll take on 5 more server tasks that can be done using PowerShell.</p>]]></content:encoded>
			<wfw:commentRss>http://cliffdavies.com/blog/general/top-10-server-2008-tasks-done-with-powershell-%e2%80%93-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.778 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2011-12-07 12:33:57 -->

