<?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>musc@&#62; $daniele.rant &#124; Out-Blog &#187; Microsoft</title>
	<atom:link href="http://www.muscetta.com/category/microsoft/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muscetta.com</link>
	<description>Superior Dedication - If you try hard enough, you might even get it to work.</description>
	<lastBuildDate>Sun, 05 Feb 2012 16:57:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>APM in OpsMgr 2012: for Dev and for Ops</title>
		<link>http://www.muscetta.com/2012/02/05/apm-in-opsmgr-2012-for-dev-and-for-ops/</link>
		<comments>http://www.muscetta.com/2012/02/05/apm-in-opsmgr-2012-for-dev-and-for-ops/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 16:57:09 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2012]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2012]]></category>
		<category><![CDATA[APM]]></category>
		<category><![CDATA[AVIcode]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[ITIL]]></category>
		<category><![CDATA[MOF]]></category>
		<category><![CDATA[system center]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=537</guid>
		<description><![CDATA[I recently wrote a couple of technical posts about the object model we have chosen for APM in OpsMgr 2012 and how to author granular alerting rules for APM in XML. That’s more the type of post that pertains on the momteam blog. This one you are reading now, instead, is more “philosophical” than technical [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I recently wrote a couple of technical posts about <a href="http://blogs.technet.com/b/momteam/archive/2012/01/14/apm-object-model.aspx">the object model we have chosen for APM in OpsMgr 2012</a> and <a href="http://blogs.technet.com/b/momteam/archive/2012/01/23/custom-apm-rules-for-granular-alerting.aspx">how to author granular alerting rules for APM in XML</a>. That’s more the type of post that pertains on the momteam blog. </p>
<p>This one you are reading now, instead, is more “philosophical” than technical – I think that, going forward, I’ll keep more of this distinction by posting my rants here on my personal blog, as they are only partially related to the products and more about my point of view on things. The reasons explained below are just those that I perceive and what drives me – I don’t mean in any way to be speaking on behalf of my company, our strategists or product planners.</p>
<p>I have heard statements from customers such as “AVIcode is a developer tool” or “APM is for QA/Test environments – if you need it in production you have not done your QA work well”and similar statements. <a href="http://social.technet.microsoft.com/Forums/en-US/operationsmanageravicode/thread/ee6393a0-9784-4ac5-bd4d-64dffc4adc4a">People asked why we did bring together the two, for example, on the TechNet forums</a>. Sure, it can be useful to employ such a tool also in a development and QA/test environment… but why not in production? With frequent deployments that the agile business demands, change control alone can’t slow down the business and sometimes bad things happen anyway – so we need solid monitoring to keep an eye on the behavior and performance on the system, exposed in a way that can quickly pinpoint where issues might be – be them in the infrastructure or in the code – in a way that enables people to efficiently triage and resolve them. <a href="http://blogs.msdn.com/b/sergkanz/archive/2011/09/13/cut-the-monitoring-price-application-monitoring-investments.aspx">Sergey points out how APM in OpsMgr 2012 is much easier to setup, simpler to configure and cheaper to maintain</a> than the standalone AVIcode product ever was, and hints at the fact that a comprehensive solution encompassing both “traditional” systems management approach as well as Application Performance Monitoring is a good one. It is a good one, in its simplest form, because we have a simplified, unified and more cost-effective infrastructure. It is a good one – I add – because we can extract a lot of useful information from within the applications, only when those are running; when they are down altogether, APM is not very useful on its own, when it is not complemented by “traditional” OS and platform checks: before I wonder if my application is slow, I’d better ask “is IIS actually up and running? is my application running at all?”. Operations Manager has been historically very good, with its management packs, in answering those questions. APM adds the deep application perspective to it, to provide rich data that Developers and Operations need to have an overall picture of what is going on in their systems and applications.</p>
<p>In my opinion, in this world of continuous services improvement and cloud services, IT management is tearing down the walls between what traditionally has been two separate worlds of “Operations” (Ops) teams and Development (Dev) teams. So, while people ask why we brought what was more of a Developer tool into a pure System Management tool, it is clear to me that those areas are converging, and <a href="http://www.computerworld.com.au/article/406856/new_relic_now_monitors_server_performance/">even other vendors who start from the opposite approach (APM) eventually go “back to the basics” and begin implementing server-level systems management such as showing disk space and CPU utilization</a>, meaning that, whatever your starting point was or has been, everybody wants and feels the need to bring those two worlds and disciplines together.</p>
<p>This line of thoughts has even been given a name: “DevOps”.</p>
<p><a href="http://www.jedi.be/blog/2010/02/12/what-is-this-devops-thing-anyway/">What is this DevOps things anyway</a> is one famous post that can be found on the web, where Stephen Nelson-Smith writes:</p>
<blockquote><p>[…] On most projects I’ve worked on, the project team is split into developers, testers, release managers and sysadmins working in separate silos. From a process perspective this is dreadfully wasteful. It can also lead to a &#039;lob it over the wall&#039; philosophy &#8211; problems are passed between business analysts, developers, QA specialists and sysadmins […] The Devops movement is built around a group of people who believe that the application of a combination of appropriate technology and attitude can revolutionize the world of software development and delivery […] these people understand the key point &#8211; we’re all on the same side! All of us &#8211; developers, testers, managers, DBAs, network technicians, and sysadmins &#8211; are all trying to achieve the same thing: the delivery of great quality, reliable software that delivers business benefit to those who commissioned it. […]</p>
</blockquote>
<p><a href="http://www.slideshare.net/jedi4ever/devops-the-war-is-over-if-you-want-it">DevOps – the war is over if you want it</a> is a presentation by Patrick Debois which I also encourage you to check out, as it is also very evocative thru images:</p>
<blockquote><p><a href="http://www.slideshare.net/jedi4ever/devops-the-war-is-over-if-you-want-it"><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="The War is over if you want it" border="0" alt="The War is over if you want it" src="http://www.muscetta.com/wp-content/uploads/image52.png" width="240" height="180" /></a></p>
</blockquote>
<p><a href="http://www.apmdigest.com/devops-6-steps-for-improved-collaboration">DevOps – 6 steps for improved collaboration</a></p>
<blockquote><p>[…] The DevOps movement is a modern push from the software industry to instill better interaction and productivity between development (Dev) and IT operations (Ops). Instead of throwing applications “over the fence” blindly to operations, a fluid and much more effective DevOps process inserts transparency, efficiency and ownership into the art of developing, releasing and the production use of critical applications. It also binds the two traditionally siloed teams together. […]</p>
</blockquote>
<p>Last but not least, <a href="http://www.slideshare.net/jallspaw/10-deploys-per-day-dev-and-ops-cooperation-at-flickr">10+ Deploys Per Day: Dev and Ops Cooperation at Flickr</a> (another presentation from a conference) is a real-world example of a large scale web site (Flickr) and how those practices are adopted.</p>
<p>When it comes to the DevOps ideas and concepts within Microsoft products, for what I can see, some customers really “get“ it, and would like to see more in this sense. For example I found <a href="http://readsource.co.uk/2011/07/29/devops-tooling-the-microsoft-ghetto/">this interesting blog post by James Dawson</a>:</p>
<blockquote><p>[…] The bulk of my work revolves around the Microsoft platform and to put it bluntly it is very much a second class citizen in terms of the available tooling.</p>
<p>Now I’ve fanned the flames, let me put some context around that. I don’t mean that as a criticism, in fact I view the status quo as an entirely natural result given where the movement grew out of and, to be frank, the mindset of the typical Microsoft IT shop. In a Microsoft environment there tends to be far greater reliance on big vendor products, whereas in the Linux/BSD world it is far more common to integrate a series of discrete tools into a complete tool chain that meets the needs for a given scenario. […]</p>
</blockquote>
<p>I think James is right when saying this: he “gets” it, but we also have a vast user base of more “traditional” enterprise customers where the concepts have not been digested and understood yet. When it comes to traditional enterprises, what sometimes happens is well explained <a href="http://podcasts.infoworld.com/d/application-development/devops-gets-developers-and-admins-the-same-page-173460">in this other article by Paul Krill</a>:</p>
<blockquote><p>[…] To protect the infrastructure, IT ops can put in place processes that seem almost draconian, causing developers to complain that these processes slow them down, says Glenn O&#039;Donnell, an analyst at Forrester Research. Indeed, processes such as ITIL (IT Infrastructure Library) that provide a standardized way of doing things, such as handling change management, can become twisted into bureaucracy for its own sake. But sometimes, people &quot;take a good idea too far, and that happens with ITIL, too.&quot; […]</p>
</blockquote>
<p>And I think that is exactly one of the reasons why, even if many of our teams “get” it, we need to talk more of the DevOps culture in those places where it hasn’t arrived yet, so that these integrated products are more successful and can help them solve problems – because some of these customers haven’t yet realized that it takes a culture shift before these new tools can be adopted. DevOps does not have critical mass today, but could have it tomorrow. Even Gartner says: </p>
<blockquote><p>[…] by 2015, DevOps will evolve from a niche strategy employed by large cloud providers into a mainstream strategy employed by 20% of the Global 2000 organizations”. […]</p>
</blockquote>
<p>So, back to suggesting that Microsoft produces more of this “goodness”, <a href="http://readsource.co.uk/2011/07/29/devops-tooling-the-microsoft-ghetto/">James again writes</a>:</p>
<blockquote><p>[…] I want to see the values espoused by DevOps spread far and wide, including the quietest backwaters of corporate IT, where Windows, Office and IE 6 reign supreme. To that end, the Microsoft infrastructure community needs to take a similar approach as the .NET community did and start bringing some of the goodness that we see in the Linux world to the Microsoft platform in a way that facilitates adoption for all and actually takes advantage of the platform’s innate richness and strengths. […]</p>
</blockquote>
<p>So do I. And, for what I can tell, we <em>are</em> actually trying to bridge gaps and push the culture shift – integrating APM in OpsMgr is definitely an effort in this direction. But it might take some time. Is it too an “utopian” a vision? I don’t think it is; I think we can get there. But it will take some time. As <a href="http://www.cmcrossroads.com/cm-articles/275-articles/13914-five-predictions-for-2011">this other article</a> was saying:</p>
<blockquote><p>[…] The DevOps approach is so radical <a href="http://www.agileweboperations.com/what-devops-means-for-enterprises">it will take some time to cross the chasm</a>, and indeed it will be actively resisted by many organizations where it threatens traditional delivery models and organizational structures. […]</p>
</blockquote>
<p>Let’s get Dev and Ops talking to each other, also in the Enteprise! I am all for it.</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &quot;AS IS&quot; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &quot;AS IS&quot; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.    <br />THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. If you want to see the official info from my employer about the topic above, go to <a title="http://www.microsoft.com/presspass/presskits/cloud/default.aspx" href="http://www.microsoft.com/presspass/presskits/cloud/default.aspx">http://www.microsoft.com/presspass/presskits/cloud/default.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2012/02/05/apm-in-opsmgr-2012-for-dev-and-for-ops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A couple of OpsMgr / APM Posts</title>
		<link>http://www.muscetta.com/2012/01/24/a-couple-of-opsmgr-apm-posts/</link>
		<comments>http://www.muscetta.com/2012/01/24/a-couple-of-opsmgr-apm-posts/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 21:30:14 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[System Center Operations Manager 2012]]></category>
		<category><![CDATA[APM]]></category>
		<category><![CDATA[AVIcode]]></category>
		<category><![CDATA[opsmgr2012]]></category>
		<category><![CDATA[scom]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=534</guid>
		<description><![CDATA[Just some shameless personal plug here, pointing out that I recently wrote two technical posts on the momteam blog about the APM feature in Operations Manager 2012 – maybe you want to check them out: APM object model – describes the object model that gets created by the APM Template/Wizard when you configure .NET application [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Just some shameless personal plug here, pointing out that I recently wrote two technical posts on the momteam blog about the APM feature in Operations Manager 2012 – maybe you want to check them out:</p>
<ol>
<li><a href="http://blogs.technet.com/b/momteam/archive/2012/01/14/apm-object-model.aspx">APM object model</a> – describes the object model that gets created by the APM Template/Wizard when you configure .NET application monitoring </li>
<li><a href="http://blogs.technet.com/b/momteam/archive/2012/01/23/custom-apm-rules-for-granular-alerting.aspx">Custom APM Rules for Granular Alerting</a> – explains how you can leverage management pack authoring techniques to create alerting rules with super-granular criteria’s (building beyond what the GUI would let you do) </li>
</ol>
<p>Hope you find them useful – if you are one of my “OpsMgr readers” <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.muscetta.com/wp-content/uploads/wlEmoticon-smile3.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2012/01/24/a-couple-of-opsmgr-apm-posts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Operations Manager 2012 Release Candidate is out of the bag!</title>
		<link>http://www.muscetta.com/2011/11/10/operations-manager-2012-release-candidate-is-out-of-the-bag/</link>
		<comments>http://www.muscetta.com/2011/11/10/operations-manager-2012-release-candidate-is-out-of-the-bag/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 17:25:44 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2012]]></category>
		<category><![CDATA[System Center Operations Manager 2012]]></category>
		<category><![CDATA[APM]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[opsmgr2012]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2011/11/10/operations-manager-2012-release-candidate-is-out-of-the-bag/</guid>
		<description><![CDATA[Go read the announcement at http://blogs.technet.com/b/server-cloud/archive/2011/11/10/system-center-operations-manager-2012-release-candidate-from-the-datacenter-to-the-cloud.aspx This is the first public release since I am part of the team (I started in this role the day after the team had shipped Beta) and this is the first release that contains some direct output of my work. It feels so good! Documentation has also been refreshed [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Go read the announcement at <a title="http://blogs.technet.com/b/server-cloud/archive/2011/11/10/system-center-operations-manager-2012-release-candidate-from-the-datacenter-to-the-cloud.aspx" href="http://blogs.technet.com/b/server-cloud/archive/2011/11/10/system-center-operations-manager-2012-release-candidate-from-the-datacenter-to-the-cloud.aspx">http://blogs.technet.com/b/server-cloud/archive/2011/11/10/system-center-operations-manager-2012-release-candidate-from-the-datacenter-to-the-cloud.aspx</a></p>
<p>This is the first public release since I am part of the team (I started in this role the day after the team had shipped Beta) and this is the first release that contains some direct output of my work. <strong>It feels so good!</strong></p>
<p>Documentation has also been refreshed – it starts here <a title="http://technet.microsoft.com/en-us/library/hh205987.aspx" href="http://technet.microsoft.com/en-us/library/hh205987.aspx">http://technet.microsoft.com/en-us/library/hh205987.aspx</a></p>
<p>The part specifically about the APM feature is here <a title="http://technet.microsoft.com/en-us/library/hh457578.aspx" href="http://technet.microsoft.com/en-us/library/hh457578.aspx">http://technet.microsoft.com/en-us/library/hh457578.aspx</a></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2011/11/10/operations-manager-2012-release-candidate-is-out-of-the-bag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Repost: Useful SetSPN tips</title>
		<link>http://www.muscetta.com/2011/10/19/repost-useful-setspn-tips/</link>
		<comments>http://www.muscetta.com/2011/10/19/repost-useful-setspn-tips/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 15:51:35 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[kerberos]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[setspn]]></category>
		<category><![CDATA[SPN]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2011/10/19/repost-useful-setspn-tips/</guid>
		<description><![CDATA[I just saw that my former colleague (PFE) Tristan has posted an interesting note about the use of SetSPN “–A” vs SetSPN “–S”. I normally don’t repost other people’s content, but I thought this would be useful as there are a few SPN used in OpsMgr and it is not always easy to get them [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I just saw that my former colleague (PFE) Tristan has posted an interesting note about the use of SetSPN “–A” vs SetSPN “–S”. I normally don’t repost other people’s content, but I thought this would be useful as there are a few SPN used in OpsMgr and it is not always easy to get them all right… and you can find a few tricks I was not aware of, by reading his post. </p>
<p>Check out the original post at <a href="http://blogs.technet.com/b/tristank/archive/2011/10/10/psa-you-really-need-to-update-your-kerberos-setup-documentation.aspx">http://blogs.technet.com/b/tristank/archive/2011/10/10/psa-you-really-need-to-update-your-kerberos-setup-documentation.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2011/10/19/repost-useful-setspn-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A month in a new life</title>
		<link>http://www.muscetta.com/2011/08/19/a-month-in-a-new-life/</link>
		<comments>http://www.muscetta.com/2011/08/19/a-month-in-a-new-life/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 00:50:19 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=529</guid>
		<description><![CDATA[Hey, I have just realized that I have been in my new PM role for a month already – time flies! If you are one of my OpsMgr readers, in case you haven’t noticed, I have been silent here but I have published a post on the momteam blog – check it out: http://blogs.technet.com/b/momteam/archive/2011/08/12/application-performance-monitoring-in-opsmgr-2012-beta.aspx If [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Hey, I have just realized that I have been in my new PM role for a month already – time flies!</p>
<p>If you are one of my OpsMgr readers, in case you haven’t noticed, I have been silent here but I have published a post on the momteam blog – check it out: <a title="http://blogs.technet.com/b/momteam/archive/2011/08/12/application-performance-monitoring-in-opsmgr-2012-beta.aspx" href="http://blogs.technet.com/b/momteam/archive/2011/08/12/application-performance-monitoring-in-opsmgr-2012-beta.aspx">http://blogs.technet.com/b/momteam/archive/2011/08/12/application-performance-monitoring-in-opsmgr-2012-beta.aspx</a></p>
<p>If you are one of those few readers interested in following what I do, instead – I can tell you that I am loving the new job. Lot to do, of course, and that also applies to&#160; the private sphere – did you know that relocating to another continent takes some energy and effort? &#8211; but we are settling in nicely and things are going very smooth overall.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2011/08/19/a-month-in-a-new-life/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I have been chosen; Farewell my friends&#8230;</title>
		<link>http://www.muscetta.com/2011/07/07/i-have-been-chosen-farewell-my-friends/</link>
		<comments>http://www.muscetta.com/2011/07/07/i-have-been-chosen-farewell-my-friends/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 05:45:32 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[alien]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[farewell]]></category>
		<category><![CDATA[goodbye]]></category>
		<category><![CDATA[HC]]></category>
		<category><![CDATA[Health Check]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[OpsMgr health Check]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=526</guid>
		<description><![CDATA[I have been in Premier Field Engineering for nearly 7 years (it was not even called PFE when I joined &#8211; it was just &#34;another type of support&#34;&#8230;) and I have to admit that it has been a fun, fun ride: I worked with awesome people and managed to make a difference with our products [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I have been in Premier Field Engineering for nearly 7 years (it was not even called PFE when I joined &#8211; it was just &quot;another type of support&quot;&#8230;) and I have to admit that it has been a fun, fun ride: I worked with awesome people and managed to make a difference with our products and services for many customers &#8211; directly working with some of those customers, as well as indirectly thru the OpsMgr Health Check program &#8211; the service I led for the last 3+ years, which nowadays gets delivered hundreds of times a year around the globe by my other fellow PFEs.</p>
<p>But it is time to move on: I have decided to go thru a big life change for me and my family, and I won&#039;t be working as a Premier Field Engineer anymore as of next week.</p>
<p><strong><em>But don&#039;t panic &#8211; I am staying at Microsoft! </em></strong></p>
<p>I have actually never been closer to Microsoft than now: we are packing and moving to Seattle the coming weekend, and on July 18th I will start working as a Program Manager in the Operations Manager product team, in Redmond. I am hoping this will enable me to make a difference with even more customers.</p>
<p>Exciting times ahead &#8211; wish me luck!</p>
<p><a href="http://www.muscetta.com/wp-content/uploads/Farewell.wmv"><img class="size-medium wp-image-528" title="Farewell my friends" alt="Farewell my friends, I go on to a better place" src="http://www.muscetta.com/wp-content/uploads/Farewell_IMG-300x169.jpg" width="383" height="238" /></a></p>
<p><strong><em>&#160;</em></strong></p>
<p><strong><em>That said – PFE is hiring!</em></strong> If you are interested in working for Microsoft – we have open positions (<em>including my vacant position in Italy</em>) for almost all the Microsoft technologies. Simply visit <a title="http://careers.microsoft.com" href="http://careers.microsoft.com/">http://careers.microsoft.com</a> and search on “PFE”.</p>
<p>As for the OpsMgr Health Check, don&#039;t you worry: it will continue being improved &#8211; I left it in the hands of some capable colleagues: <a href="http://blogs.technet.com/b/itpcfmgt/archive/2011/06/07/i-blogger-si-raccontano-bruno-gabrielli.aspx" target="_blank">Bruno Gabrielli</a>, <a href="http://blogs.technet.com/b/stefan_stranger/" target="_blank">Stefan Stranger</a> and <a href="http://www.scom2k7.com/" target="_blank">Tim McFadden</a> &#8211; and they have a plan and commitment to update it to OpsMgr 2012.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2011/07/07/i-have-been-chosen-farewell-my-friends/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://www.muscetta.com/wp-content/uploads/Farewell.wmv" length="1522545" type="video/asf" />
		</item>
		<item>
		<title>Improved ACS Partitions Query</title>
		<link>http://www.muscetta.com/2011/05/04/improved-acs-partitions-query/</link>
		<comments>http://www.muscetta.com/2011/05/04/improved-acs-partitions-query/#comments</comments>
		<pubDate>Wed, 04 May 2011 07:10:36 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[ACS]]></category>
		<category><![CDATA[Audit]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=524</guid>
		<description><![CDATA[This has been sitting on my hard drive for a long time. Long story short, the report I posted at Permanent Link to Audit Collection Services Database Partitions Size Report had a couple of bugs: it did not consider the size of the dtString_XXX tables but only the size of dtEvent_XXX tables – this would [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>This has been sitting on my hard drive for a long time. Long story short, the report I posted at <a title="Permanent Link to Audit Collection Services Database Partitions Size Report" href="http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/">Permanent Link to Audit Collection Services Database Partitions Size Report</a> had a couple of bugs:</p>
<ol>
<li>it did not consider the size of the dtString_XXX tables but only the size of dtEvent_XXX tables – this would still give you an idea of the trends, but it could lead to quite different SIZE calculations</li>
<li>the query was failing on some instances that have been installed with the wrong (unsupported) Collation settings.</li>
</ol>
<p>I fixed both bugs, but I don’t have a machine with SQL 2005 and Visual Studio 2005 anymore… so I can’t rebuild my report – but I don’t want to distribute one that only works on SQL 2008 because I know that SQL2005 is still out there. This is partially the reason that held this post back.</p>
<p>Without waiting so much longer, therefore, I decided I’ll just give you the fixed query. Enjoy <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" src="http://www.muscetta.com/wp-content/uploads/wlEmoticon-smile2.png" alt="Smile" /></p>
<pre style="color: #000000; background: #ffffff;"><span style="color: #696969;">--Query to get the Partition Table</span>
<span style="color: #696969;">--for each partition we launch the sp_spaceused stored procedure to determine the size and other info</span>

<span style="color: #696969;">--partition list</span>
<span style="color: #800000; font-weight: bold;">select</span> PartitionId<span style="color: #808030;">,</span>Status<span style="color: #808030;">,</span>PartitionStartTime<span style="color: #808030;">,</span>PartitionCloseTime
<span style="color: #800000; font-weight: bold;">into</span> <span style="color: #808030;">#</span>t1
<span style="color: #800000; font-weight: bold;">from</span> dbo<span style="color: #808030;">.</span>dtPartition <span style="color: #800000; font-weight: bold;">with</span> <span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">nolock</span><span style="color: #808030;">)</span>
<span style="color: #800000; font-weight: bold;">order</span> <span style="color: #800000; font-weight: bold;">by</span> PartitionStartTime <span style="color: #800000; font-weight: bold;">Desc</span> 

<span style="color: #696969;">--sp_spaceused holder table for dtEvent</span>
<span style="color: #800000; font-weight: bold;">create</span> <span style="color: #800000; font-weight: bold;">table</span> <span style="color: #808030;">#</span>t2 <span style="color: #808030;">(</span>
    PartitionId nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    <span style="color: #800000; font-weight: bold;">rows</span> nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    reserved nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    <span style="color: #800000; font-weight: bold;">data</span> nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    index_size nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    <span style="color: #800000; font-weight: bold;">unused</span> nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS
<span style="color: #808030;">)</span>

<span style="color: #696969;">--sp_spaceused holder table for dtString</span>
<span style="color: #800000; font-weight: bold;">create</span> <span style="color: #800000; font-weight: bold;">table</span> <span style="color: #808030;">#</span>t3 <span style="color: #808030;">(</span>
    PartitionId nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    <span style="color: #800000; font-weight: bold;">rows</span> nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    reserved nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    <span style="color: #800000; font-weight: bold;">data</span> nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    index_size nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS<span style="color: #808030;">,</span>
    <span style="color: #800000; font-weight: bold;">unused</span> nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">Collate</span> SQL_Latin1_General_CP1_CI_AS
<span style="color: #808030;">)</span>

<span style="color: #800000; font-weight: bold;">set</span> nocount <span style="color: #800000; font-weight: bold;">on</span>

<span style="color: #696969;">--vars used for building Partition GUID and main table name</span>
<span style="color: #800000; font-weight: bold;">declare</span> @partGUID nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span>
<span style="color: #800000; font-weight: bold;">declare</span> @tblName nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span>
<span style="color: #800000; font-weight: bold;">declare</span> @tblNameComplete nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span>
<span style="color: #800000; font-weight: bold;">declare</span> @schema nvarchar<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span>
<span style="color: #800000; font-weight: bold;">DECLARE</span> @vQuery NVARCHAR<span style="color: #808030;">(</span><span style="color: #bb7977; font-weight: bold;">MAX</span><span style="color: #808030;">)</span>

<span style="color: #696969;">--cursor</span>
<span style="color: #800000; font-weight: bold;">declare</span> <span style="color: #800000; font-weight: bold;">c</span> <span style="color: #800000; font-weight: bold;">cursor</span> <span style="color: #800000; font-weight: bold;">for</span>
    <span style="color: #800000; font-weight: bold;">select</span> PartitionID <span style="color: #800000; font-weight: bold;">from</span> <span style="color: #808030;">#</span>t1
<span style="color: #800000; font-weight: bold;">open</span> <span style="color: #800000; font-weight: bold;">c</span>
<span style="color: #800000; font-weight: bold;">fetch</span> <span style="color: #800000; font-weight: bold;">next</span> <span style="color: #800000; font-weight: bold;">from</span> <span style="color: #800000; font-weight: bold;">c</span> <span style="color: #800000; font-weight: bold;">into</span> @partGUID

<span style="color: #696969;">--start cursor usage</span>
<span style="color: #800000; font-weight: bold;">while</span> @@FETCH_STATUS <span style="color: #808030;">=</span> <span style="color: #008c00;">0</span>
<span style="color: #800000; font-weight: bold;">begin</span>

<span style="color: #696969;">--tblName - first usage for dtEvent</span>
<span style="color: #800000; font-weight: bold;">set</span> @tblName <span style="color: #808030;">=</span> <span style="color: #0000e6;">'dtEvent_'</span> <span style="color: #808030;">+</span> @partGUID

<span style="color: #696969;">--retrieve the schema name</span>
<span style="color: #800000; font-weight: bold;">SET</span> @vQuery <span style="color: #808030;">=</span> <span style="color: #0000e6;">'SELECT @dbschema = TABLE_SCHEMA from INFORMATION_SCHEMA.tables where TABLE_NAME = '</span><span style="color: #0000e6;">''</span> <span style="color: #808030;">+</span> @tblName <span style="color: #808030;">+</span> <span style="color: #0000e6;">''</span><span style="color: #0000e6;">''</span>
<span style="color: #800000; font-weight: bold;">EXEC</span> sp_executesql @vQuery<span style="color: #808030;">,</span>N<span style="color: #0000e6;">'@dbschema nvarchar(max) out, @dbtblName nvarchar(max)'</span><span style="color: #808030;">,</span>@schema <span style="color: #800000; font-weight: bold;">out</span><span style="color: #808030;">,</span> @tblname

<span style="color: #696969;">--tblNameComplete</span>
<span style="color: #800000; font-weight: bold;">set</span> @tblNameComplete <span style="color: #808030;">=</span> @schema <span style="color: #808030;">+</span> <span style="color: #0000e6;">'.'</span> <span style="color: #808030;">+</span> @tblName

<span style="color: #800000; font-weight: bold;">INSERT</span> <span style="color: #808030;">#</span>t2
    <span style="color: #800000; font-weight: bold;">EXEC</span> sp_spaceused @tblNameComplete

<span style="color: #696969;">--tblName - second usage for dtString</span>
<span style="color: #800000; font-weight: bold;">set</span> @tblName <span style="color: #808030;">=</span> <span style="color: #0000e6;">'dtString_'</span> <span style="color: #808030;">+</span> @partGUID

<span style="color: #696969;">--retrieve the schema name</span>
<span style="color: #800000; font-weight: bold;">SET</span> @vQuery <span style="color: #808030;">=</span> <span style="color: #0000e6;">'SELECT @dbschema = TABLE_SCHEMA from INFORMATION_SCHEMA.tables where TABLE_NAME = '</span><span style="color: #0000e6;">''</span> <span style="color: #808030;">+</span> @tblName <span style="color: #808030;">+</span> <span style="color: #0000e6;">''</span><span style="color: #0000e6;">''</span>
<span style="color: #800000; font-weight: bold;">EXEC</span> sp_executesql @vQuery<span style="color: #808030;">,</span>N<span style="color: #0000e6;">'@dbschema nvarchar(max) out, @dbtblName nvarchar(max)'</span><span style="color: #808030;">,</span>@schema <span style="color: #800000; font-weight: bold;">out</span><span style="color: #808030;">,</span> @tblname

<span style="color: #696969;">--tblNameComplete</span>
<span style="color: #800000; font-weight: bold;">set</span> @tblNameComplete <span style="color: #808030;">=</span> @schema <span style="color: #808030;">+</span> <span style="color: #0000e6;">'.'</span> <span style="color: #808030;">+</span> @tblName

<span style="color: #800000; font-weight: bold;">INSERT</span> <span style="color: #808030;">#</span>t3
    <span style="color: #800000; font-weight: bold;">EXEC</span> sp_spaceused @tblNameComplete

<span style="color: #800000; font-weight: bold;">fetch</span> <span style="color: #800000; font-weight: bold;">next</span> <span style="color: #800000; font-weight: bold;">from</span> <span style="color: #800000; font-weight: bold;">c</span> <span style="color: #800000; font-weight: bold;">into</span> @partGUID
<span style="color: #800000; font-weight: bold;">end</span>
<span style="color: #800000; font-weight: bold;">close</span> <span style="color: #800000; font-weight: bold;">c</span>
<span style="color: #800000; font-weight: bold;">deallocate</span> <span style="color: #800000; font-weight: bold;">c</span>

<span style="color: #696969;">--select * from #t2</span>
<span style="color: #696969;">--select * from #t3</span>

<span style="color: #696969;">--results</span>
<span style="color: #800000; font-weight: bold;">select</span> <span style="color: #808030;">#</span>t1<span style="color: #808030;">.</span>PartitionId<span style="color: #808030;">,</span>
    <span style="color: #808030;">#</span>t1<span style="color: #808030;">.</span>Status<span style="color: #808030;">,</span>
    <span style="color: #808030;">#</span>t1<span style="color: #808030;">.</span>PartitionStartTime<span style="color: #808030;">,</span>
    <span style="color: #808030;">#</span>t1<span style="color: #808030;">.</span>PartitionCloseTime<span style="color: #808030;">,</span>
    <span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">rows</span><span style="color: #808030;">,</span>
    <span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span>reserved<span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span>reserved<span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span> <span style="color: #808030;">+</span> <span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span>reserved<span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span>reserved<span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">as</span> <span style="color: #0000e6;">'reservedKB'</span><span style="color: #808030;">,</span>
    <span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">data</span><span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">data</span><span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span> <span style="color: #808030;">+</span> <span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t3<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">data</span><span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t3<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">data</span><span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #800000; font-weight: bold;">as</span> <span style="color: #0000e6;">'dataKB'</span><span style="color: #808030;">,</span>
    <span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span>index_size<span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span>index_size<span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span> <span style="color: #808030;">+</span> <span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t3<span style="color: #808030;">.</span>index_size<span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t3<span style="color: #808030;">.</span>index_size<span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">as</span> <span style="color: #0000e6;">'indexKB'</span><span style="color: #808030;">,</span>
    <span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">unused</span><span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">unused</span><span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span> <span style="color: #808030;">+</span> <span style="color: #800000; font-weight: bold;">CAST</span><span style="color: #808030;">(</span><span style="color: #800000; font-weight: bold;">LEFT</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t3<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">unused</span><span style="color: #808030;">,</span><span style="color: #bb7977; font-weight: bold;">LEN</span><span style="color: #808030;">(</span><span style="color: #808030;">#</span>t3<span style="color: #808030;">.</span><span style="color: #800000; font-weight: bold;">unused</span><span style="color: #808030;">)</span><span style="color: #808030;">-</span><span style="color: #008c00;">3</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">AS</span> <span style="color: #800000; font-weight: bold;">NUMERIC</span><span style="color: #808030;">(</span><span style="color: #008c00;">18</span><span style="color: #808030;">,</span><span style="color: #008c00;">0</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span><span style="color: #808030;">)</span> <span style="color: #800000; font-weight: bold;">as</span> <span style="color: #0000e6;">'unusedKB'</span>
<span style="color: #800000; font-weight: bold;">from</span> <span style="color: #808030;">#</span>t1
<span style="color: #800000; font-weight: bold;">join</span> <span style="color: #808030;">#</span>t2
<span style="color: #800000; font-weight: bold;">on</span> <span style="color: #808030;">#</span>t2<span style="color: #808030;">.</span>PartitionId <span style="color: #808030;">=</span> <span style="color: #808030;">(</span><span style="color: #0000e6;">'dtEvent_'</span> <span style="color: #808030;">+</span> <span style="color: #808030;">#</span>t1<span style="color: #808030;">.</span>PartitionId<span style="color: #808030;">)</span>
<span style="color: #800000; font-weight: bold;">join</span> <span style="color: #808030;">#</span>t3
<span style="color: #800000; font-weight: bold;">on</span> <span style="color: #808030;">#</span>t3<span style="color: #808030;">.</span>PartitionId <span style="color: #808030;">=</span> <span style="color: #808030;">(</span><span style="color: #0000e6;">'dtString_'</span> <span style="color: #808030;">+</span> <span style="color: #808030;">#</span>t1<span style="color: #808030;">.</span>PartitionId<span style="color: #808030;">)</span>
<span style="color: #800000; font-weight: bold;">order</span> <span style="color: #800000; font-weight: bold;">by</span> PartitionStartTime <span style="color: #800000; font-weight: bold;">desc</span>

<span style="color: #696969;">--cleanup</span>
<span style="color: #800000; font-weight: bold;">drop</span> <span style="color: #800000; font-weight: bold;">table</span> <span style="color: #808030;">#</span>t1
<span style="color: #800000; font-weight: bold;">drop</span> <span style="color: #800000; font-weight: bold;">table</span> <span style="color: #808030;">#</span>t2
<span style="color: #800000; font-weight: bold;">drop</span> <span style="color: #800000; font-weight: bold;">table</span> <span style="color: #808030;">#</span>t3</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2011/05/04/improved-acs-partitions-query/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpsMgr Agents and Gateways Failover Queries</title>
		<link>http://www.muscetta.com/2010/12/23/opsmgr-agents-and-gateways-failover-queries/</link>
		<comments>http://www.muscetta.com/2010/12/23/opsmgr-agents-and-gateways-failover-queries/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 13:44:38 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[gateway]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2010/12/23/opsmgr-agents-and-gateways-failover-queries/</guid>
		<description><![CDATA[The following article by Jimmy Harper explains very well how to set up agents and gateways’ failover paths thru Powershell http://blogs.technet.com/b/jimmyharper/archive/2010/07/23/powershell-commands-to-configure-gateway-server-agent-failover.aspx . This is the approach I also recommend, and that article is great – I encourage you to check it out if you haven’t done it yet! Anyhow, when checking for the actual failover [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>The following article by Jimmy Harper explains very well how to set up agents and gateways’ failover paths thru Powershell <a title="http://blogs.technet.com/b/jimmyharper/archive/2010/07/23/powershell-commands-to-configure-gateway-server-agent-failover.aspx" href="http://blogs.technet.com/b/jimmyharper/archive/2010/07/23/powershell-commands-to-configure-gateway-server-agent-failover.aspx">http://blogs.technet.com/b/jimmyharper/archive/2010/07/23/powershell-commands-to-configure-gateway-server-agent-failover.aspx</a> . This is the approach I also recommend, and that article is great – I encourage you to check it out if you haven’t done it yet!</p>
<p>Anyhow, when checking for the actual failover paths that have been configured, the use of Powershell suggested by Jimmy is rather slow – especially if your agent count is high. In the Operations Manager Health Check tool I was also using that technique at the beginning, but eventually moved to the use of SQL queries just for performance reasons. Since then, we have been using these SQL queries quite successfully for about 3 years now.</p>
<p>But this the season of giving&#8230; and I guess SQL Queries can be a gift, right? Therefore I am now donating them as Christmas Gift to the OpsMrg community <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.muscetta.com/wp-content/uploads/wlEmoticon-smile1.png" /></p>
<p>Enjoy – and Merry Christmas!</p>
<p>&#160;</p>
<pre style="background: #ffffff; color: #000000"><span style="color: #696969">--GetAgentForWhichServerIsPrimary</span>
<span style="color: #800000; font-weight: bold">SELECT</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Agent<span style="color: #808030">,</span>TargetBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Server
<span style="color: #800000; font-weight: bold">FROM</span> Relationship <span style="color: #800000; font-weight: bold">R</span> <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity SourceBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>SourceEntityID <span style="color: #808030">=</span> SourceBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity TargetBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>TargetEntityID <span style="color: #808030">=</span> TargetBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">WHERE</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>RelationshipTypeId <span style="color: #808030">=</span> dbo<span style="color: #808030">.</span>fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceCommunication<span style="color: #808030">(</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">not</span> <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> DisplayName
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedEntityGenericView <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> MonitoringClassId <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> ManagedTypeId
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedType <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> TypeName <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.SystemCenter.GatewayManagementServer'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">and</span> IsDeleted <span style="color: #808030">=</span><span style="color: #0000e6">'0'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">not</span> <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> DisplayName <span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedEntityGenericView <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> MonitoringClassId <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> ManagedTypeId <span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedType <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> TypeName <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.SystemCenter.ManagementServer'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">and</span> IsDeleted <span style="color: #808030">=</span><span style="color: #0000e6">'0'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>IsDeleted <span style="color: #808030">=</span> <span style="color: #0000e6">'0'</span>

<span style="color: #696969">--GetAgentForWhichServerIsFailover</span>
<span style="color: #800000; font-weight: bold">SELECT</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Agent<span style="color: #808030">,</span>TargetBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Server
<span style="color: #800000; font-weight: bold">FROM</span> Relationship <span style="color: #800000; font-weight: bold">R</span> <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity SourceBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>SourceEntityID <span style="color: #808030">=</span> SourceBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity TargetBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>TargetEntityID <span style="color: #808030">=</span> TargetBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">WHERE</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>RelationshipTypeId <span style="color: #808030">=</span> dbo<span style="color: #808030">.</span>fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceSecondaryCommunication<span style="color: #808030">(</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">not</span> <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> DisplayName
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedEntityGenericView <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> MonitoringClassId <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> ManagedTypeId
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedType <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> TypeName <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.SystemCenter.GatewayManagementServer'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">and</span> IsDeleted <span style="color: #808030">=</span><span style="color: #0000e6">'0'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">not</span> <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> DisplayName
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedEntityGenericView <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> MonitoringClassId <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> ManagedTypeId
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedType <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> TypeName <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.SystemCenter.ManagementServer'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">and</span> IsDeleted <span style="color: #808030">=</span><span style="color: #0000e6">'0'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>IsDeleted <span style="color: #808030">=</span> <span style="color: #0000e6">'0'</span>

<span style="color: #696969">--GetGatewayForWhichServerIsPrimary</span>
<span style="color: #800000; font-weight: bold">SELECT</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Gateway<span style="color: #808030">,</span> TargetBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Server
<span style="color: #800000; font-weight: bold">FROM</span> Relationship <span style="color: #800000; font-weight: bold">R</span> <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity SourceBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>SourceEntityID <span style="color: #808030">=</span> SourceBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity TargetBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>TargetEntityID <span style="color: #808030">=</span> TargetBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">WHERE</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>RelationshipTypeId <span style="color: #808030">=</span> dbo<span style="color: #808030">.</span>fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceCommunication<span style="color: #808030">(</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> DisplayName
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedEntityGenericView <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> MonitoringClassId <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> ManagedTypeId
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedType <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> TypeName <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.SystemCenter.GatewayManagementServer'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">and</span> IsDeleted <span style="color: #808030">=</span><span style="color: #0000e6">'0'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>IsDeleted <span style="color: #808030">=</span> <span style="color: #0000e6">'0'</span>

<span style="color: #696969">--GetGatewayForWhichServerIsFailover</span>
<span style="color: #800000; font-weight: bold">SELECT</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">As</span> Gateway<span style="color: #808030">,</span> TargetBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Server
<span style="color: #800000; font-weight: bold">FROM</span> Relationship <span style="color: #800000; font-weight: bold">R</span> <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity SourceBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>SourceEntityID <span style="color: #808030">=</span> SourceBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">JOIN</span> BaseManagedEntity TargetBME
<span style="color: #800000; font-weight: bold">ON</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>TargetEntityID <span style="color: #808030">=</span> TargetBME<span style="color: #808030">.</span>BaseManagedEntityID
<span style="color: #800000; font-weight: bold">WHERE</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>RelationshipTypeId <span style="color: #808030">=</span> dbo<span style="color: #808030">.</span>fn_ManagedTypeId_MicrosoftSystemCenterHealthServiceSecondaryCommunication<span style="color: #808030">(</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> SourceBME<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> DisplayName
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedEntityGenericView <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> MonitoringClassId <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> ManagedTypeId
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>ManagedType <span style="color: #800000; font-weight: bold">WITH</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">NOLOCK</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">where</span> TypeName <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.SystemCenter.GatewayManagementServer'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">and</span> IsDeleted <span style="color: #808030">=</span><span style="color: #0000e6">'0'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">AND</span> <span style="color: #800000; font-weight: bold">R</span><span style="color: #808030">.</span>IsDeleted <span style="color: #808030">=</span> <span style="color: #0000e6">'0'</span>

<span style="color: #696969">--xplat agents</span>
<span style="color: #800000; font-weight: bold">select</span> bme2<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> XPlatAgent<span style="color: #808030">,</span> bme<span style="color: #808030">.</span>DisplayName <span style="color: #800000; font-weight: bold">as</span> Server
<span style="color: #800000; font-weight: bold">from</span> dbo<span style="color: #808030">.</span>Relationship <span style="color: #800000; font-weight: bold">r</span> <span style="color: #800000; font-weight: bold">with</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">nolock</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">join</span> dbo<span style="color: #808030">.</span>RelationshipType rt <span style="color: #800000; font-weight: bold">with</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">nolock</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">on</span> <span style="color: #800000; font-weight: bold">r</span><span style="color: #808030">.</span>RelationshipTypeId <span style="color: #808030">=</span> rt<span style="color: #808030">.</span>RelationshipTypeId
<span style="color: #800000; font-weight: bold">join</span> dbo<span style="color: #808030">.</span>BasemanagedEntity bme <span style="color: #800000; font-weight: bold">with</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">nolock</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">on</span> bme<span style="color: #808030">.</span>basemanagedentityid <span style="color: #808030">=</span> <span style="color: #800000; font-weight: bold">r</span><span style="color: #808030">.</span>SourceEntityId
<span style="color: #800000; font-weight: bold">join</span> dbo<span style="color: #808030">.</span>BasemanagedEntity bme2 <span style="color: #800000; font-weight: bold">with</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">nolock</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">on</span> <span style="color: #800000; font-weight: bold">r</span><span style="color: #808030">.</span>TargetEntityId <span style="color: #808030">=</span> bme2<span style="color: #808030">.</span>BaseManagedEntityId
<span style="color: #800000; font-weight: bold">where</span> rt<span style="color: #808030">.</span>RelationshipTypeName <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.SystemCenter.HealthServiceManagesEntity'</span>
<span style="color: #800000; font-weight: bold">and</span> bme<span style="color: #808030">.</span>IsDeleted <span style="color: #808030">=</span> <span style="color: #008c00">0</span>
<span style="color: #800000; font-weight: bold">and</span> <span style="color: #800000; font-weight: bold">r</span><span style="color: #808030">.</span>IsDeleted <span style="color: #808030">=</span> <span style="color: #008c00">0</span>
<span style="color: #800000; font-weight: bold">and</span> bme2<span style="color: #808030">.</span>basemanagedtypeid <span style="color: #800000; font-weight: bold">in</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">SELECT</span> DerivedTypeId
<span style="color: #800000; font-weight: bold">FROM</span> DerivedManagedTypes <span style="color: #800000; font-weight: bold">with</span> <span style="color: #808030">(</span><span style="color: #bb7977; font-weight: bold">nolock</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">WHERE</span> BaseTypeId <span style="color: #808030">=</span> <span style="color: #808030">(</span><span style="color: #800000; font-weight: bold">select</span> managedtypeid
<span style="color: #800000; font-weight: bold">from</span> managedtype <span style="color: #800000; font-weight: bold">where</span> typename <span style="color: #808030">=</span> <span style="color: #0000e6">'Microsoft.Unix.Computer'</span><span style="color: #808030">)</span>
<span style="color: #800000; font-weight: bold">and</span> DerivedIsAbstract <span style="color: #808030">=</span> <span style="color: #008c00">0</span><span style="color: #808030">)</span></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/12/23/opsmgr-agents-and-gateways-failover-queries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Got Orphaned OpsMgr Objects?</title>
		<link>http://www.muscetta.com/2010/12/17/got-orphaned-opsmgr-objects/</link>
		<comments>http://www.muscetta.com/2010/12/17/got-orphaned-opsmgr-objects/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 20:56:18 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[agents]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[orphan]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=516</guid>
		<description><![CDATA[Have you ever wondered what would happen if, in Operations Manager, you’d delete a Management Server or Gateway that managed objects (such as network devices) or has agents pointing uniquely to it as their primary server? The answer is simple, but not very pleasant: you get ORPHANED objects, which will linger in the database but [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Have you ever wondered what would happen if, in Operations Manager, you’d <strong>delete</strong> a Management Server or Gateway that managed objects (such as network devices) or has agents pointing uniquely to it as their primary server?</p>
<p>The answer is simple, but not very pleasant: you get ORPHANED objects, which will linger in the database but you won’t be able to “see” or re-assign anymore from the GUI.</p>
<p>So the first thing I want to share is a query to determine IF you have any of those orphaned agents. Or even if you know, since you are not able to &#034;see&#034; them from the console, you might have to dig their name out of the database. Here&#039;s a query I got from a colleague in our reactive support team:</p>
<p><code><br />
<span style="color: #808080; font-style: italic;">-- Check for orphaned health services (e.g. agent).</span><br />
declare @DiscoverySourceId uniqueidentifier;<br />
<span style="color: #993333; font-weight: bold;">SET</span> @DiscoverySourceId <span style="color: #66cc66;">=</span> dbo.fn_DiscoverySourceId_User<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span>;<br />
<span style="color: #993333; font-weight: bold;">SELECT</span> TME.<span style="color: #66cc66;">[</span>TypedManagedEntityid<span style="color: #66cc66;">]</span>, HS.PrincipalName<br />
<span style="color: #993333; font-weight: bold;">FROM</span> MTV_HealthService HS<br />
<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> dbo.<span style="color: #66cc66;">[</span>BaseManagedEntity<span style="color: #66cc66;">]</span> BHS <span style="color: #993333; font-weight: bold;">WITH</span><span style="color: #66cc66;">(</span>nolock<span style="color: #66cc66;">)</span><br />
<span style="color: #993333; font-weight: bold;">ON</span> BHS.<span style="color: #66cc66;">[</span>BaseManagedEntityId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> HS.<span style="color: #66cc66;">[</span>BaseManagedEntityId<span style="color: #66cc66;">]</span><br />
<span style="color: #808080; font-style: italic;">-- get host managed computer instances</span><br />
<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> dbo.<span style="color: #66cc66;">[</span>TypedManagedEntity<span style="color: #66cc66;">]</span> TME <span style="color: #993333; font-weight: bold;">WITH</span><span style="color: #66cc66;">(</span>nolock<span style="color: #66cc66;">)</span><br />
<span style="color: #993333; font-weight: bold;">ON</span> TME.<span style="color: #66cc66;">[</span>BaseManagedEntityId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> BHS.<span style="color: #66cc66;">[</span>TopLevelHostEntityId<span style="color: #66cc66;">]</span><br />
<span style="color: #993333; font-weight: bold;">AND</span> TME.<span style="color: #66cc66;">[</span>IsDeleted<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span><br />
<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> dbo.<span style="color: #66cc66;">[</span>DerivedManagedTypes<span style="color: #66cc66;">]</span> DMT <span style="color: #993333; font-weight: bold;">WITH</span><span style="color: #66cc66;">(</span>nolock<span style="color: #66cc66;">)</span><br />
<span style="color: #993333; font-weight: bold;">ON</span> DMT.<span style="color: #66cc66;">[</span>DerivedTypeId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> TME.<span style="color: #66cc66;">[</span>ManagedTypeId<span style="color: #66cc66;">]</span><br />
<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> dbo.<span style="color: #66cc66;">[</span>ManagedType<span style="color: #66cc66;">]</span> BT <span style="color: #993333; font-weight: bold;">WITH</span><span style="color: #66cc66;">(</span>nolock<span style="color: #66cc66;">)</span><br />
<span style="color: #993333; font-weight: bold;">ON</span> DMT.<span style="color: #66cc66;">[</span>BaseTypeId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> BT.<span style="color: #66cc66;">[</span>ManagedTypeId<span style="color: #66cc66;">]</span><br />
<span style="color: #993333; font-weight: bold;">AND</span> BT.<span style="color: #66cc66;">[</span>TypeName<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> N<span style="color: #ff0000;">'Microsoft.Windows.Computer'</span><br />
<span style="color: #808080; font-style: italic;">-- only with missing primary</span><br />
<span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">OUTER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> dbo.Relationship HSC <span style="color: #993333; font-weight: bold;">WITH</span><span style="color: #66cc66;">(</span>nolock<span style="color: #66cc66;">)</span><br />
<span style="color: #993333; font-weight: bold;">ON</span> HSC.<span style="color: #66cc66;">[</span>SourceEntityId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> HS.<span style="color: #66cc66;">[</span>BaseManagedEntityId<span style="color: #66cc66;">]</span><br />
<span style="color: #993333; font-weight: bold;">AND</span> HSC.<span style="color: #66cc66;">[</span>RelationshipTypeId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> dbo.fn_RelationshipTypeId_HealthServiceCommunication<span style="color: #66cc66;">(</span><span style="color: #66cc66;">)</span><br />
<span style="color: #993333; font-weight: bold;">AND</span> HSC.<span style="color: #66cc66;">[</span>IsDeleted<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span><br />
<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> DiscoverySourceToTypedManagedEntity DSTME <span style="color: #993333; font-weight: bold;">WITH</span><span style="color: #66cc66;">(</span>nolock<span style="color: #66cc66;">)</span><br />
<span style="color: #993333; font-weight: bold;">ON</span> DSTME.<span style="color: #66cc66;">[</span>TypedManagedEntityId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> TME.<span style="color: #66cc66;">[</span>TypedManagedEntityId<span style="color: #66cc66;">]</span><br />
<span style="color: #993333; font-weight: bold;">AND</span> DSTME.<span style="color: #66cc66;">[</span>DiscoverySourceId<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> @DiscoverySourceId<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> HS.<span style="color: #66cc66;">[</span>IsAgent<span style="color: #66cc66;">]</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">1</span><br />
<span style="color: #993333; font-weight: bold;">AND</span> HSC.<span style="color: #66cc66;">[</span>RelationshipId<span style="color: #66cc66;">]</span> <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span>;</code></p>
<p>Once you have identified the agent you need to re-assign to a new management server, this is doable from the SDK. Below is a powershell script I wrote which will re-assign it to the RMS. It has to run from within the OpsMgr Command Shell.<br />
You still need to change the logic which chooses which agent &#8211; this is meant as a starting base&#8230; you could easily expand it into accepting parameters and/or consuming an input text file, or using a different Management Server than the RMS&#8230; you get the point.</p>
<div class="dp-highlighter">
<ol class="dp-rb">
<li class="alt">$mg = (get-managementgroupconnection).managementgroup</li>
<li>$mrc = Get-RelationshipClass | where {$_.name –like <span class="string">&#034;*Microsoft.SystemCenter.HealthServiceCommunication*&#034;</span>}</li>
<li class="alt">$cmro = <span class="keyword">new</span>-object Microsoft.EnterpriseManagement.Monitoring.CustomMonitoringRelationshipObject($mrc)</li>
<li>$rms = (get-rootmanagementserver).HostedHealthService</li>
<li class="alt"></li>
<li>$deviceclass = $mg.getmonitoringclass(“HealthService”)</li>
<li class="alt">$mc = Get-connector | where {$_.Name –like “*MOM Internal Connector*”}</li>
<li></li>
<li class="alt">Foreach ($obj <span class="keyword">in</span> $mg.GetMonitoringObjects($deviceclass))</li>
<li>{</li>
<li class="alt"><span class="preprocessor">    #the next line should be changed to pick the right agent to re-assign </span></li>
<li>    <span class="keyword">if</span> ($obj.DisplayName -match <span class="string">&#039;dsxlab&#039;</span>)</li>
<li class="alt">    {</li>
<li>                Write-host $obj.displayname</li>
<li class="alt">                $imdd = <span class="keyword">new</span>-object Microsoft.EnterpriseManagement.ConnectorFramework.IncrementalMonitoringDiscoveryData</li>
<li>                $cmro.SetSource($obj)</li>
<li class="alt">                $cmro.SetTarget($rms)</li>
<li>                $imdd.Add($cmro)</li>
<li class="alt">                $imdd.Commit($mc)</li>
<li>    }</li>
<li class="alt">}</li>
</ol>
<p><textarea class="originalCode" style="display: none;">$mg = (get-managementgroupconnection).managementgroup&lt;br /&gt; $mrc = Get-RelationshipClass | where {$_.name –like &#034;*Microsoft.SystemCenter.HealthServiceCommunication*&#034;}&lt;br /&gt; $cmro = new-object Microsoft.EnterpriseManagement.Monitoring.CustomMonitoringRelationshipObject($mrc)&lt;br /&gt; $rms = (get-rootmanagementserver).HostedHealthService&lt;/p&gt; &lt;p&gt;$deviceclass = $mg.getmonitoringclass(“HealthService”)&lt;br /&gt; $mc = Get-connector | where {$_.Name –like “*MOM Internal Connector*”}&lt;/p&gt; &lt;p&gt;Foreach ($obj in $mg.GetMonitoringObjects($deviceclass))&lt;br /&gt; {&lt;br /&gt; #the next line should be changed to pick the right agent to re-assign&lt;br /&gt; if ($obj.DisplayName -match &#039;dsxlab&#039;)&lt;br /&gt; {&lt;br /&gt; Write-host $obj.displayname&lt;br /&gt; $imdd = new-object Microsoft.EnterpriseManagement.ConnectorFramework.IncrementalMonitoringDiscoveryData&lt;br /&gt; $cmro.SetSource($obj)&lt;br /&gt; $cmro.SetTarget($rms)&lt;br /&gt; $imdd.Add($cmro)&lt;br /&gt; $imdd.Commit($mc)&lt;br /&gt; }&lt;br /&gt; }&lt;/p&gt; &lt;p&gt;</textarea></p>
</div>
<p>Similarly, you might get orphaned network devices. The script below is used to re-assign all Network Devices to the RMS. This script is actually something I have had even before the other one (yes, it has been sitting in my &#034;digital drawer&#034; for a couple of years or more&#8230;) and uses the same concept &#8211; only you might notice that the relation&#039;s source and target are &#034;reversed&#034;, since the relationships are different:</p>
<ul>
<li>the Management Server (source) &#034;manages&#034; the Network Device (target)</li>
<li>the Agent (source) &#034;talks&#034; to the Management Server (target)</li>
</ul>
<p>With a bit of added logic it should be easy to have it work for specific devices.</p>
<div class="dp-highlighter">
<ol class="dp-rb">
<li class="alt">$mg = (get-managementgroupconnection).managementgroup</li>
<li></li>
<li class="alt">$mrc = Get-RelationshipClass | where {$_.name –like <span class="string">&#034;*Microsoft.SystemCenter.HealthServiceShouldManageEntity*&#034;</span>}</li>
<li></li>
<li class="alt">$cmro = <span class="keyword">new</span>-object Microsoft.EnterpriseManagement.Monitoring.CustomMonitoringRelationshipObject($mrc)</li>
<li>$rms = (get-rootmanagementserver).HostedHealthService</li>
<li class="alt"></li>
<li>$deviceclass = $mg.getmonitoringclass(“NetworkDevice”)</li>
<li class="alt"></li>
<li>Foreach ($obj in $mg.GetMonitoringObjects($deviceclass))</li>
<li class="alt"></li>
<li>{</li>
<li class="alt">                Write-host $obj.displayname</li>
<li>                $imdd = <span class="keyword">new</span>-object Microsoft.EnterpriseManagement.ConnectorFramework.IncrementalMonitoringDiscoveryData</li>
<li class="alt">                $cmro.SetSource($rms)</li>
<li>                $cmro.SetTarget($obj)</li>
<li class="alt">                $imdd.Add($cmro)</li>
<li></li>
<li class="alt">                $mc = Get-connector | where {$_.Name –like “*MOM Internal Connector*”}</li>
<li></li>
<li class="alt">                $imdd.Commit($mc)</li>
<li>}</li>
</ol>
<p><textarea class="originalCode" style="display: none;">$mg = (get-managementgroupconnection).managementgroup&lt;/p&gt; &lt;p&gt;$mrc = Get-RelationshipClass | where {$_.name –like &#034;*Microsoft.SystemCenter.HealthServiceShouldManageEntity*&#034;}&lt;/p&gt; &lt;p&gt;$cmro = new-object Microsoft.EnterpriseManagement.Monitoring.CustomMonitoringRelationshipObject($mrc)&lt;br /&gt; $rms = (get-rootmanagementserver).HostedHealthService&lt;/p&gt; &lt;p&gt;$deviceclass = $mg.getmonitoringclass(“NetworkDevice”)&lt;/p&gt; &lt;p&gt;Foreach ($obj in $mg.GetMonitoringObjects($deviceclass))&lt;/p&gt; &lt;p&gt;{&lt;br /&gt; Write-host $obj.displayname&lt;br /&gt; $imdd = new-object Microsoft.EnterpriseManagement.ConnectorFramework.IncrementalMonitoringDiscoveryData&lt;br /&gt; $cmro.SetSource($rms)&lt;br /&gt; $cmro.SetTarget($obj)&lt;br /&gt; $imdd.Add($cmro)&lt;/p&gt; &lt;p&gt; $mc = Get-connector | where {$_.Name –like “*MOM Internal Connector*”}&lt;/p&gt; &lt;p&gt; $imdd.Commit($mc)&lt;br /&gt; }&lt;/p&gt; &lt;p&gt;</textarea></p>
</div>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/12/17/got-orphaned-opsmgr-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Does anyone have a new System Center sticker for me?</title>
		<link>http://www.muscetta.com/2010/11/27/does-anyone-have-a-new-system-center-sticker-for-me/</link>
		<comments>http://www.muscetta.com/2010/11/27/does-anyone-have-a-new-system-center-sticker-for-me/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 12:19:21 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[laptop]]></category>
		<category><![CDATA[sticker]]></category>
		<category><![CDATA[system center]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=515</guid>
		<description><![CDATA[I got this sticker last APRIL at MMS2010 in JUST ONE COPY, and I waited till I got a NEW laptop in SEPTEMBER to actually use that&#8230; It also took a while to stick it on properly (other than to re-install the PC as I wanted&#8230;),  but this week they told me that, for an error, [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/5204066237/"><img src="http://farm5.static.flickr.com/4091/5204066237_8de87d0899.jpg" alt="Does anyone have a new System Center sticker?" /></a></p>
<p>I got this sticker last APRIL at MMS2010 in JUST ONE COPY, and I waited till I got a NEW laptop in SEPTEMBER to actually use that&#8230;<br />
It also took a while to stick it on properly (other than to re-install the PC as I wanted&#8230;),  but this week they told me that, for an error, I got given the wrong machine (they did it all themselves, tho - I did not ask for any specific one) and this one needs to be replaced!!!!</p>
<p>This is WORSE than any hardware FAILure, as the machine just works very well and I was expecting to keep it for the next two years <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>Can anyone be so nice to send me one of those awesome stickers again? <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/11/27/does-anyone-have-a-new-system-center-sticker-for-me/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Inversely Proportional</title>
		<link>http://www.muscetta.com/2010/11/17/inversely-proportional/</link>
		<comments>http://www.muscetta.com/2010/11/17/inversely-proportional/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 13:42:34 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=514</guid>
		<description><![CDATA[Some time ago I was reading www.caffeinatedcoder.com/book-review-the-c-programming-la&#8230; [...] Since a good portion of the C# books are between the 500 and 1000 page range, it was refreshing to read a book that was less than 200 pages. Partly this is because when the book was published the surface area of the reusable API was a [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/5135380596/"><img src="http://farm5.static.flickr.com/4027/5135380596_3e5ae05b0d.jpg" alt="Inversely Proportional" /></a></p>
<p>Some time ago I was reading <a rel="nofollow" href="http://www.caffeinatedcoder.com/book-review-the-c-programming-language/">www.caffeinatedcoder.com/book-review-the-c-programming-la&#8230;</a></p>
<blockquote><p>[...] Since a good portion of the C# books are between the 500 and 1000 page range, it was refreshing to read a book that was less than 200 pages. Partly this is because when the book was published the surface area of the reusable API was a small fraction of what it is now. However, I also wonder if there was an expectation of disciplined conciseness in technical writing back in the late 80’s that simply no longer exists today. [...]</p></blockquote>
<p>I think this is a very important point. But then, again, it was no secret &#8211; this was written in the <a rel="nofollow" href="http://www.trunix.org/programlama/c/CProgrammingLanguage/preface1.html">Preface to the first edition of that book</a>:</p>
<blockquote><p>[...] is not a &#034;very high level&#034; language, nor a &#034;big&#034; one, and is not specialized to any particular area of application. But its absence of resrictions and its generality make it more convenient and effective for many tasks than supposedly more powerful languages. [...]</p></blockquote>
<p>I think it all boils down to simplicity, as Glenn Scott says in <a rel="nofollow" href="http://glennsc.com/start-a-revolution-with-confident-simplicity">glennsc.com/start-a-revolution-with-confident-simplicity</a></p>
<blockquote><p>[...] To master this technique you need to adopt this mindset that your product is, say, simple and clean, and you just know this, and you are confident and assured of this. There is no urgent need to “prove” anything. [...]</p></blockquote>
<p>Another similar book on a (different) programming language, is <a rel="nofollow" href="http://www.ruby-doc.org/docs/ProgrammingRuby/">&#034;Programming Ruby, the pragmatic programmer&#039;s guide&#034;</a> which starts with</p>
<blockquote><p>[...] This book is a tutorial and reference for the Ruby programming language. Use Ruby, and you&#039;ll write better code, be more productive, and enjoy programming more. [...] As Pragmatic Programmers we&#039;ve tried many, many languages in our search for tools to make our lives easier, for tools to help us do our jobs better. Until now, though, we&#039;d always been frustrated by the languages we were using. [...]</p></blockquote>
<p>Of course that language is simple and sweet, very expressive, and programmers are seen as having to be &#034;pragmatic&#034;. No nonsensical, incredibly complex cathedrals (in the language itself and in the documentation) &#8211; but quick and dirty things that just WORK.</p>
<p>But way too often, the size of a book is considered a measure for its quality and depth.<br />
I recently read on Twitter about an upcoming &#034;Programming Windows Phone 7&#034; book that would be more than a thousand pages in size: <a rel="nofollow" href="http://twitter.com/#!/MicrosoftPress/status/27374650771">twitter.com/#!/MicrosoftPress/status/27374650771</a></p>
<p>I mean: I do understand that there are many API&#039;s to take a look at and the book wants to be comprehensive&#8230;but&#8230;. do they really think that the sheer *size* of a book (&gt;1000 pages) is an advantage in itself? it might actually scare people away, for how I see things. But it must be me.</p>
<p>In the meantime the book has been released and can be dowloaded from here <a rel="nofollow" href="http://blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-ebook-programming-windows-phone-7-by-charles-petzold.aspx">blogs.msdn.com/b/microsoft_press/archive/2010/10/28/free-&#8230;</a></p>
<p>I have not looked at it yet &#8211; when I will have time to take a look at it I&#039;ll be able to judge better&#8230;</p>
<p>for now I only incidentally noticed that a quick search for <a rel="nofollow" href="http://www.amazon.com/Professional-iPhone-iPod-touch-Programming/dp/0470251557#_">books</a> about <a rel="nofollow" href="http://www.amazon.com/gp/product/0321503619?ie=UTF8&amp;tag=shinthin-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321503619#_">programming</a> the <a rel="nofollow" href="http://www.amazon.com/Beginning-iPhone-Development-Exploring-SDK/dp/1430216263#_">iPhone/iPad</a> returns books that are between 250 and 500 pages maximum&#8230;</p>
<p>And yet simplicity CAN be known to us, and some teams really &#034;Get it&#034;: take Powershell, for example &#8211; it is a refreshing example of this: the <a rel="nofollow" href="http://blogs.msdn.com/b/powershell/">official powershell blog</a> has a subtitle of &#034;changing the world, one line at the time&#034; &#8211; that&#039;s a strong statement&#8230; but in line with the empowerment that simplicity enables. In fact, Bruce Payette&#039;s book &#034;Powershell in Action&#034; is also not huge.<br />
I suppose it must be a coincidence. Or maybe not.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/11/17/inversely-proportional/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft.Linux.RHEL.5.LogicalDisk.DiskBytesPerSecond Type Mismatch</title>
		<link>http://www.muscetta.com/2010/10/22/microsoft-linux-rhel-5-logicaldisk-diskbytespersecond-type-mismatch/</link>
		<comments>http://www.muscetta.com/2010/10/22/microsoft-linux-rhel-5-logicaldisk-diskbytespersecond-type-mismatch/#comments</comments>
		<pubDate>Fri, 22 Oct 2010 14:18:58 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[cast]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[iostat]]></category>
		<category><![CDATA[null]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[scx]]></category>
		<category><![CDATA[syssstat]]></category>
		<category><![CDATA[troubleshooting]]></category>
		<category><![CDATA[typemismatch]]></category>
		<category><![CDATA[ws-man]]></category>
		<category><![CDATA[wsman]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=513</guid>
		<description><![CDATA[I have had the following in my notes for a while… and I have not blogged in a while (been too busy) so I decided to blog it today, before the topic gets too old and starts stinking &#160; It all started when a customer showed me an Alert he was seeing in his environment [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I have had the following in my notes for a while… and I have not blogged in a while (been too busy) so I decided to blog it today, before the topic gets too old and starts stinking <img style="border-bottom-style: none; border-right-style: none; border-top-style: none; border-left-style: none" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://www.muscetta.com/wp-content/uploads/wlEmoticon-smile.png" /></p>
<p>&#160;</p>
<p>It all started when a customer showed me an Alert he was seeing in his environment from some XPlat workflow. The alert looks like the following:</p>
<p><strong>Generic Performance Mapper Module Failed Execution      <br /></strong>Alert Description Source: RLWSCOM02.domain.dom     <br />Module was unable to convert parameter to a double value     <br />Original parameter: &#039;$Data///*[local-name()=&quot;BytesPerSecond&quot;]$&#039;     <br />Parameter after $Data replacement: &#034;     <br />Error: 0&#215;80020005     <br />Details: Type mismatch.     <br />One or more workflows were affected by this.     <br />Workflow name: Microsoft.Linux.RHEL.5.LogicalDisk.DiskBytesPerSecond.Collection     <br />Instance name: /     <br />Instance ID: {4F6FA8F5-C56F-4C9B-ED36-12DAFF4073D1}     <br />Management group: DataCenter     <br />Path: <a href="console:execute?viewname=Microsoft.SystemCenter.StateView&amp;viewtarget=378a23ca-03a7-1809-71fd-083539b7f171&amp;viewtargettype=ea99500d-8d52-fc52-b5a5-10dcd1e9d2bd">RLWSCOM02.domain.dom</a>\<b>RLWSCOM02.domain.dom</b> Alert Rule: <a href="console:action?rulesettings">Generic Performance Mapper Module Runtime Failure</a> Created: 6/28/2010 11:30:28 PM</p>
<p>&#160;</p>
<p>First I stumbled into this forum post which mentions he same symptom <a href="http://social.technet.microsoft.com/Forums/en-US/crossplatformgeneral/thread/62e0bf3e-be6f-4218-a37b-f1e66f02aa49">http://social.technet.microsoft.com/Forums/en-US/crossplatformgeneral/thread/62e0bf3e-be6f-4218-a37b-f1e66f02aa49</a> &#8211; but when looking at the resolution, the locale on the customer machine was good (== set to US settings), so I concluded that it was not the same root cause. </p>
<p>&#160;</p>
<p>Then I looked at what that rule was supposed to do, and queried the same CIM class both remotely thru WS-Man and locally via CIM, and concluded that my issue was that certain values were returning as NULL while we were expecting to see a number on the Management Server – therefore the Type Mismatch!</p>
<p><a href="http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/" target="_blank">I have explained</a> previously <a href="http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/" target="_blank">how to run CIM</a> queries <a href="http://www.muscetta.com/2009/10/26/invoking-methods-on-the-xplat-agent-with-winrm/" target="_blank">against the XPlat agent</a>; in this case it was the following one:</p>
<p><strong>winrm enumerate http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/SCX_FileSystemStatisticalInformation?__cimnamespace=root/scx -username:scomuser -password:password -r:https://rllspago01.domain.dom:1270/wsman -auth:basic –skipCACheck -skipCNCheck</strong></p>
<p>&#160;</p>
<p><strong>SCX_FileSystemStatisticalInformation</strong></p>
<p>AverageDiskQueueLength = null</p>
<p>AverageTransferTime = null</p>
<p>BytesPerSecond = null</p>
<p>Caption = File system information</p>
<p>Description = Performance statistics related to a logical unit of secondary storage</p>
<p>ElementName = null</p>
<p>FreeMegabytes = 4007</p>
<p>IsAggregate = false</p>
<p>IsOnline = true</p>
<p>Name = /</p>
<p>PercentBusyTime = null</p>
<p>PercentFreeSpace = 55</p>
<p>PercentIdleTime = null</p>
<p>PercentUsedSpace = 45</p>
<p>ReadBytesPerSecond = null</p>
<p>ReadsPerSecond = null</p>
<p>TransfersPerSecond = null</p>
<p>UsedMegabytes = 3278</p>
<p>WriteBytesPerSecond = null</p>
<p>WritesPerSecond = null</p>
<p>&#160;</p>
<p>See the NULLs ? Those are our issue.</p>
<p>Now, before you continue reading, I will tell you that I have investigated this also internally, and apparently we have just (in <a href="http://support.microsoft.com/kb/2251525/" target="_blank">Cumulative Update 3</a>) changed this behaviour in our XPlat modules, so that when NULL is returned, we consider it to be ZERO. Good or bad that is, it will at least take care of the error. But if you don’t get any data from the Unix system… well, you are not getting any data – so that might cause a surprise later on when you go and look at those charts and expect to see your disk “performance counters” but in fact all you have is a bunch of ZERO’s (how very interesting!). So, basically, the fix in CU3 suppresses the symptom, but does not address the cause.</p>
<p>So, let’s see what is actually causing this, as you might well want to get those statistics, or probably you would not be monitoring that server!</p>
<p>I looked at the <strong>Cimd.log</strong> (set to verbose) only says the following (basically not much: is getting info for 3 partitions… and the provider code is working)</p>
<p>2010-09-01T08:38:32,796Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] BaseProvider::EnumInstances()</p>
<p>2010-09-01T08:38:33,359Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] Object Path = //rllspago01.domain.dom/root/scx:SCX_FileSystemStatisticalInformation</p>
<p>2010-09-01T08:38:33,359Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] BaseProvider::EnumInstances() &#8211; Calling DoEnumInstances()</p>
<p>2010-09-01T08:38:33,359Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] DiskProvider DoEnumInstances</p>
<p>2010-09-01T08:38:33,359Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] DiskProvider GetDiskEnumeration &#8211; type 3</p>
<p>2010-09-01T08:38:33,360Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] BaseProvider::EnumInstances() &#8211; <strong>DoEnumInstances() returned &#8211; 3</strong></p>
<p>2010-09-01T08:38:33,360Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] BaseProvider::EnumInstances() &#8211; Call ReturnDone</p>
<p>2010-09-01T08:38:33,360Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.providers.diskprovider:5964:3086830480] BaseProvider::EnumInstances() &#8211; return OK</p>
<p>2010-09-01T08:38:33,360Z Trace&#160;&#160;&#160;&#160;&#160; [scx.core.provsup.cmpibase.singleprovider.DiskProvider:5964:3086830480] SingleProvider::EnumInstances() -<strong> Returning &#8211; 0</strong></p>
<p>&#160;</p>
<p>but it still did not give me an idea as to why we would not get data for those “counters”. A this point I stopped using complex troubleshooting techniques and simply turned intuition on, and tried with some help from a search engine: <a title="http://www.bing.com/search?q=How+do+I+find+out+Linux+Disk+utilization" href="http://www.bing.com/search?q=How+do+I+find+out+Linux+Disk+utilization">http://www.bing.com/search?q=How+do+I+find+out+Linux+Disk+utilization</a>&#160;</p>
<p>the results I got all mentioned that on Linux you would use the “<strong>iostat</strong>” command.</p>
<p>So I tried to use and… lol and behold: the <strong>iostat</strong> commend was NOT INSTALLED on that machine!</p>
<p>Guess what? We installed it (it is included in the “<strong>sysstat</strong>” package for RedHat linux, so a simple “<strong>yum install sysstat</strong>” took care of this) and the counters started working!</p>
<p>Hope that is useful to some.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/10/22/microsoft-linux-rhel-5-logicaldisk-diskbytespersecond-type-mismatch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Way</title>
		<link>http://www.muscetta.com/2010/07/18/microsoft-way/</link>
		<comments>http://www.muscetta.com/2010/07/18/microsoft-way/#comments</comments>
		<pubDate>Sun, 18 Jul 2010 15:09:52 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[family]]></category>
		<category><![CDATA[me]]></category>
		<category><![CDATA[myself]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[picture]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=511</guid>
		<description><![CDATA[In the last couple of weeks we have been driving thru America from the east coast (New York) to the west coast (Seattle). I figured out I needed to show my family the Microsoft campus too. Of course they know I work at Microsoft&#8230; but having only seen the office of a subsidiary &#8211; the [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm5.static.flickr.com/4095/4802822777_810c1f9165.jpg" alt="Microsoft Way" /></p>
<p>In the last couple of weeks we have been driving thru America from the east coast (New York) to the west coast (Seattle).</p>
<p>I figured out I needed to show my family the Microsoft campus too. Of course they know I work at Microsoft&#8230; but having only seen the office of a subsidiary &#8211; the one in Rome, with about 250 people at its max &#8211; might not have given them (especially the kids) an idea of the actual size of the company.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/07/18/microsoft-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpsMgr Event IDs Spreadsheet</title>
		<link>http://www.muscetta.com/2010/06/22/opsmgr-event-ids-spreadsheet/</link>
		<comments>http://www.muscetta.com/2010/06/22/opsmgr-event-ids-spreadsheet/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 16:28:23 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[EventID]]></category>
		<category><![CDATA[eventlog]]></category>
		<category><![CDATA[events]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[Spreadsheet]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=510</guid>
		<description><![CDATA[I work in support (mostly with System Center Operations Manager, as you know), and I work with event logs every day. The following are typical situations: I get a colleague or a customer telling me “I am having a problem and the SCOM agent is showing 21037 events and 20002 events.&#160; What’s wrong with it?”&#160;&#160;&#160; [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I work in support (mostly with System Center Operations Manager, as you know), and I work with event logs every day. The following are typical situations:</p>
<ol>
<li>I get a colleague or a customer telling me “I am having a problem and the SCOM agent is showing 21037 events and 20002 events.&#160; What’s wrong with it?”&#160;&#160;&#160; </li>
<li>I want to tune an OpsMgr environment and reduce load on the database by turning off a few event collections, as my friend Kevin Holman suggests here <a href="http://blogs.technet.com/kevinholman/archive/2009/11/25/tuning-tip-turning-off-some-over-collection-of-events.aspx">http://blogs.technet.com/kevinholman/archive/2009/11/25/tuning-tip-turning-off-some-over-collection-of-events.aspx</a> . </li>
<li>I am analyzing, sorting and grouping Events with Powershell like I have written on my blog lately <a href="http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/">http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/</a> but I can’t read those long descriptions properly. </li>
<li>I exported an EVT from a customer environment and I load it on a machine that does not have OpsMgr message DLLs installed – all I see are EventIDs and type (Warning, Error) – but no real description – and I still want to figure out what those events are trying to tell me. </li>
</ol>
<p>Getting to the point: I, like everyone – don’t have every OpsMgr event memorized.</p>
<p>This is why I thought of building this spreadsheet, and I hope it might come in handy to more people.</p>
<p>The spreadsheet contains an “AllEvents” list – and then the same events are broken down by event source as well:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.muscetta.com/wp-content/uploads/clip_image0023.jpg" width="678" height="49" /></p>
<p>When you want to search for an events (in one of the situations described above) just open up the spreadsheet, go to the “AllEvents” tab, hit <strong>CTRL+F</strong> (“Find”) and type in the Event ID you are searching for:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.muscetta.com/wp-content/uploads/clip_image0043.jpg" width="448" height="196" /></p>
<p>And this will take you to the row containing the event, so you can look up its description:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image006" border="0" alt="clip_image006" src="http://www.muscetta.com/wp-content/uploads/clip_image0061.jpg" width="625" height="163" /></p>
<p>The description shows the event standard text (which is in the message DLL, therefore is the part you will not see if opening an EVT on another machine that does not have OpsMgr installed), and where the event parameters are (%1, %2, etc – which will be the strings you see in the EVT anyway).</p>
<p>That way you can get an understanding of what the original message would have looked like on the original machine.</p>
<p>This is just one possible usage pattern of this reference. It can also be useful to just read/study the events, learning about new ones you have never encountered, or remembering those you HAVE seen in the past but did not quite remember. And of course you can also find other creative ways to use it.</p>
<p><a href="http://cid-aaf797a1484e6150.office.live.com/view.aspx/Public/OpsMgr%5E_EventIDs.xlsx"><strong>You can get it from here</strong></a>.</p>
<p>&#160;</p>
<p>A few last words to give due credit: this spreadsheet has been compiled by using Eventlog Explorer (<a href="http://blogs.technet.com/momteam/archive/2008/04/02/eventlog-explorer.aspx">http://blogs.technet.com/momteam/archive/2008/04/02/eventlog-explorer.aspx</a> ) to extract the event information out of the message DLLs on a OpsMgr2007 R2 installation. That info has been then copied and pasted in Excel in order to have an “offline” reference. Also I would like to thank Kevin Holman for pointing me to Eventlog Explorer first, and then for insisting I should not keep this spreadsheet in my drawer, as it could be useful to more people!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/06/22/opsmgr-event-ids-spreadsheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to convert (and fixup) the RedHat RPM to run on Debian/Ubuntu</title>
		<link>http://www.muscetta.com/2010/06/21/how-to-convert-and-fixup-the-redhat-rpm-to-run-on-debianubuntu/</link>
		<comments>http://www.muscetta.com/2010/06/21/how-to-convert-and-fixup-the-redhat-rpm-to-run-on-debianubuntu/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 20:57:00 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[agent]]></category>
		<category><![CDATA[deb]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[management pack]]></category>
		<category><![CDATA[MP]]></category>
		<category><![CDATA[package]]></category>
		<category><![CDATA[repackage]]></category>
		<category><![CDATA[repackaging]]></category>
		<category><![CDATA[rpm]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=505</guid>
		<description><![CDATA[In an earlier post I had shown how I got the Xplat agent running on Ubuntu. I perfected the technique over time, and what follows is a step-by-step process on how to convert and change the RedHat package to run on Debian/Ubuntu. Of course this is still a hack… but some people asked me to [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.muscetta.com/2009/05/30/installing-the-opsmgr-2007-r2-scx-agent-on-ubuntu/">In an earlier post I had shown how I got the Xplat agent running on Ubuntu</a>. I perfected the technique over time, and what follows is a step-by-step process on how to convert and change the RedHat package to run on Debian/Ubuntu. Of course this is still a hack… but some people asked me to detail it a bit more. At the same time, the cross platform team is working to update the <a href="http://scx.codeplex.com/">the source code</a> on codeplex with extra bits that will make more straightforward to grab it, modify it and re-compile it than it is today. Until then, here is how I got it to work.</p>
<p>I assume you have already copied the right .RPM package off the OpsMgr server’s /AgentManagement directory to the Linux box here. The examples below refer to the 32bit package, but of course the same identical technique would work for the 64bit version.</p>
<p>We start by converting the RPM package to DEB format:</p>
<p>root# <b>alien -k scx-1.0.4-258.rhel.5.x86.rpm &#8211;scripts</b></p>
<p>scx_1.0.4-258_i386.deb generated</p>
<p>&#160;</p>
<p>Then we need to create a folder where we will extract the content of the package, modify stuff, and repackage it:</p>
<p>root# <b>mkdir scx_1.0.4-258_i386</b></p>
<p>root# <b>cd scx_1.0.4-258_i386</b></p>
<p>root# <b>ar -x ../scx_1.0.4-258_i386.deb</b></p>
<p>root# <b>mkdir debian</b></p>
<p>root# <b>cd debian</b></p>
<p>root# <b>mkdir DEBIAN</b></p>
<p>root# <b>cd DEBIAN</b></p>
<p>root# <b>cd ../..</b></p>
<p>root# <b>rm debian-binary</b></p>
<p>root# <b>mv control.tar.gz debian/DEBIAN/</b></p>
<p>root# <b>mv data.tar.gz debian/</b></p>
<p>root# <b>cd debian</b></p>
<p>root# <b>tar -xvzf data.tar.gz</b></p>
<p>root# <b>rm data.tar.gz</b></p>
<p>root# <b>cd DEBIAN/</b></p>
<p>root# <b>tar -xvzf control.tar.gz</b></p>
<p>root# <b>rm control.tar.gz</b></p>
<p>Now we have the “skeleton” of the package easily laid out on the filesystem and we are ready to modify the package and add/change stuff to and in it.</p>
<p>&#160;</p>
<p>First, we need to add some stuff to it, which is expected to be found on a redhat distro, but is not present in debian. In particular:</p>
<p>1. You should copy the file “functions” (that you can get from a <strong>redhat/centos box under /etc/init.d</strong>) under the <strong>debian/etc/init.d</strong> folder in our package folder. This file is required/included by our startup scripts, so it needs to be deployed too.</p>
<p>Then we need to chang some of the packacge behavior by editing files under <strong>debian/DEBIAN</strong>:</p>
<p>2. edit the “<strong>control</strong>” file (a file describing what the package is, and does):</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.muscetta.com/wp-content/uploads/clip_image0022.jpg" width="624" height="198" /></p>
<p>3. edit the “<strong>preinst</strong>” file (pre-installation instructions): we need to add instructions to copy the “<strong>issue</strong>” file onto “<strong>redhat-release</strong>” (as the SCX_OperatingSystem class will look into that file, and this is hard-coded in the binary, we need to let it find it):</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.muscetta.com/wp-content/uploads/clip_image0042.jpg" width="624" height="201" /></p>
<p>these are the actual command lines to add for both packages (DEBIAN or UBUNTU):</p>
<blockquote><p># symbolic links for libaries called differently on Ubuntu and Debian vs. RedHat</p>
<p>ln -s /usr/lib/libcrypto.so.0.9.8 /usr/lib/libcrypto.so.6</p>
<p>ln -s /usr/lib/libssl.so.0.9.8 /usr/lib/libssl.so.6</p>
</blockquote>
<p><font color="#777777"></font></p>
<p>the following bit would be Ubuntu-specific:</p>
<blockquote><p>#we need this file for the OS provider relies on it, so we convert what we have in /etc/issue</p>
<p>#this is ok for Ubuntu (“Ubuntu 9.0.4 \n \l” becomes “Ubuntu 9.0.4”)</p>
<p>cat /etc/issue | awk &#039;/\\n/ {print $1, $2}&#039; &gt; /etc/redhat-release</p>
</blockquote>
<p><font color="#777777"></font></p>
<p>while the following bit is Debian-specific:</p>
<blockquote><p>#this is ok for Debian (“Debian GNU/Linux 5.0 \n \l” becomes “Debian GNU/Linux 5.0”)</p>
<p>cat /etc/issue | awk &#039;/\\n/ {print $1, $2, $3}&#039; &gt; /etc/redhat-release</p>
</blockquote>
<p>&#160;</p>
<p>4. Then we edit/modify the “<strong>postinst</strong>” file (post-installation instructions) as follows:</p>
<p>a. remove the 2<sup>nd</sup> and 3<sup>rd</sup> lines which look like the following</p>
<blockquote><p>RPM_INSTALL_PREFIX=</p>
<p>export RPM_INSTALL_PREFIX</p>
</blockquote>
<p>as they are only useful for the RPM system, not DEB/APT, so we don’t need them.</p>
<p>b. change the following 2 functions which contain RedHat-specific commands:</p>
<blockquote><p>configure_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; /usr/lib/lsb/install_initd /etc/init.d/scx-cimd</p>
<p>}</p>
<p>start_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; service scx-cimd start</p>
<p>}</p>
</blockquote>
<p>c. We need to change in the Debian equivalents for registering a service in INIT and starting it:</p>
<blockquote><p>configure_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; update-rc.d scx-cimd defaults</p>
<p>}</p>
<p>start_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; /etc/init.d/scx-cimd start</p>
<p>}</p>
</blockquote>
<p>5. Modify the “<strong>prerm</strong>” file (pre-removal instructions):</p>
<p>a. Just like “<strong>postinst</strong>”, remove the lines</p>
<blockquote><p>RPM_INSTALL_PREFIX=</p>
<p>export RPM_INSTALL_PREFIX</p>
</blockquote>
<p>b. Locate the two functions stopping and un-installing the service</p>
<blockquote><p>stop_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; service scx-cimd stop</p>
<p>}</p>
<p>unregister_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; /usr/lib/lsb/remove_initd /etc/init.d/scx-cimd</p>
<p>}</p>
</blockquote>
<p>c. Change those two functions with the Debian-equivalent command lines</p>
<blockquote><p>stop_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; /etc/init.d/scx-cimd stop</p>
<p>}</p>
<p>unregister_pegasus_service() {</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; update-rc.d -f scx-cimd remove</p>
<p>}</p>
</blockquote>
<p>At this point the change we needed have been put in place, and we can re-build the DEB package.</p>
<p>Move yourself in the main folder of the application (the <b>scx_1.0.4-258_i386</b> folder):</p>
<p>root# <b>cd ../..</b></p>
<p>Create the package starting from the folders</p>
<p>root# <b>dpkg-deb &#8211;build debian</b></p>
<p>dpkg-deb: building package `scx&#039; in `debian.deb&#039;.</p>
<p>Rename the package (for Ubuntu)</p>
<p>root# <b>mv debian.deb scx_1.0.4-258_Ubuntu_9_i386.deb</b></p>
<p>Rename the package (for Debian)</p>
<p>root# <b>mv debian.deb scx_1.0.4-258_Debian_5_i386.deb</b></p>
<p>Install it</p>
<p>root# <b>dpkg -i scx_1.0.4-258_Platform_Version_i386.deb</b></p>
<p>All done! It should install and work!</p>
<p>&#160;</p>
<p>Next step would be creating a Management Pack to monitor Debian and Ubuntu. It is pretty similar to what Robert Hearn has described <a href="http://blogs.msdn.com/scxplat/archive/2010/01/05/building-a-centos-management-pack-part-1.aspx">step</a> <a href="http://blogs.msdn.com/b/scxplat/archive/2010/01/15/building-a-centos-management-pack-part-2.aspx">by</a> <a href="http://blogs.msdn.com/b/scxplat/archive/2010/01/18/building-a-centos-management-pack-part-3.aspx">step</a> for CentOS, but with some different replacements of strings, as you can imagine. I have done this but have not written down the procedure yet, so I will post another article on how to do this as soon as I manage to get it standardized and reliable. There is a bit more work involved for Ubuntu/Debian… as some of the daemons/services have different names, and certain files too… but nothing terribly difficult to change so you might want to try it already and have a go at it!</p>
<p>In the meantime, as a teaser, here’s my server’s (<a href="http://www.muscetta.com">http://www.muscetta.com</a>) performance, being monitored with this “hack”:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.muscetta.com/wp-content/uploads/image51.png" width="1018" height="567" /></p>
<p>&#160;</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &quot;AS IS&quot; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &quot;AS IS&quot; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.    <br />THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/06/21/how-to-convert-and-fixup-the-redhat-rpm-to-run-on-debianubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Audit Collection Services Database Partitions Size Report</title>
		<link>http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/</link>
		<comments>http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/#comments</comments>
		<pubDate>Wed, 05 May 2010 21:45:31 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[ACS]]></category>
		<category><![CDATA[Audit]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[report]]></category>
		<category><![CDATA[reporting]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[SSRS]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=499</guid>
		<description><![CDATA[A number of people I have talked to liked my previous post on ACS sizing. One thing that was not extremely easy or clear to them in that post was *how* exactly I did one thing I wrote: […] use the dtEvent_GUID table to get the number of events for that day, and use the [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>A number of people I have talked to liked <a href="http://www.muscetta.com/2010/03/18/a-few-thoughts-on-sizing-audit-collection-system/">my previous post on ACS sizing</a>. One thing that was not extremely easy or clear to them in that post was *how* exactly I did one thing I wrote:</p>
<blockquote><p><em>[…] use the <strong>dtEvent_GUID</strong> table to get the number of events for that day, and use the stored procedure “sp_spaceused”  against that same table to get an overall idea of how much space that day is taking in the database […]</em></p></blockquote>
<p>To be completely honest, I do not expect people to do this manually a hundred times if they have a hundred partitions. In fact, I have been doing this for a while with a script which will do the looping for me and run that sp_spaceused for me a number of time. I cannot share that script, but I do realize that this automation is very useful, therefore I wrote a “stand-alone” SQL query which, using a couple of temporary tables, produces a similar type of output. I also went a step further and packaged it into a SQL Server Reporting Services Report for everyone’s consumption. The report should look like the following screenshot, featuring a chart and the table with the numerical information about each and every partition in the database:</p>
<p><a href="http://www.muscetta.com/wp-content/uploads/image50.png" rel="lightbox[499]"><img style="display: inline; border: 0px;" title="ACS Partitions Report" src="http://www.muscetta.com/wp-content/uploads/image_thumb1.png" border="0" alt="ACS Partitions Report" width="640" height="351" /></a></p>
<p><a href="http://cid-aaf797a1484e6150.office.live.com/self.aspx/Public/ACSPartitionsReport.zip">You can download the report from here</a>.</p>
<p>You need to upload it to your report server, and change the data source to the shared Data Source that also the built-in ACS Reports use, and it should work.</p>
<p><strong>[NOTE/UPDATE May 4th 2011: This report has a few bugs. I have posted the updated query on <a href="http://www.muscetta.com/2011/05/04/improved-acs-partitions-query/">http://www.muscetta.com/2011/05/04/improved-acs-partitions-query/</a> . I am sorry I can't provide a ready made report with the fix right now. Make sure you understand this and don't implement it without testing.]</strong></p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A few thoughts on sizing Audit Collection System</title>
		<link>http://www.muscetta.com/2010/03/18/a-few-thoughts-on-sizing-audit-collection-system/</link>
		<comments>http://www.muscetta.com/2010/03/18/a-few-thoughts-on-sizing-audit-collection-system/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 13:07:25 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[ACS]]></category>
		<category><![CDATA[Audit]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[queries]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[sizing]]></category>
		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=495</guid>
		<description><![CDATA[People were already collecting logs with MOM, so why not the security log? Some people were doing that, but it did not scale enough; for this reason, a few years ago Eric Fitzgerald announced that he was working on Microsoft Audit Collection System. Anyhow, the tool as it was had no interface… and the rest [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>People were already collecting logs with MOM, so why not the security log? Some people were doing that, but it did not scale enough; for this reason, a few years ago <a href="http://blogs.msdn.com/ericfitz/">Eric Fitzgerald</a> announced that he was working on <a href="http://lists.jammed.com/loganalysis/2003/10/0024.html">Microsoft Audit Collection System</a>. Anyhow, the tool as it was had no interface… and the rest is history: it has been integrated into System Center Operations Manager. Anyhow, ACS remains a lesser-known component of OpsMgr.</p>
<p>There are a number of resources on the web that is worth mentioning and linking to:</p>
<ul>
<li>SecureVantage ACS Resource Kit <a title="http://www.securevantage.com/Products/ACSResourceKit.aspx" href="http://www.securevantage.com/Products/ACSResourceKit.aspx">http://www.securevantage.com/Products/ACSResourceKit.aspx</a></li>
<li>Securevantage has also some very nice online training “Master Classes” <a title="http://www.securevantage.com/ACSTraining.aspx" href="http://www.securevantage.com/ACSTraining.aspx">http://www.securevantage.com/ACSTraining.aspx</a></li>
<li>Old-ish Overview <a title="http://opsmgr2007.wikidot.com/system:audit-collection-services" href="http://opsmgr2007.wikidot.com/system:audit-collection-services">http://opsmgr2007.wikidot.com/system:audit-collection-services</a></li>
<li>Old-ish post by kevin <a title="http://blogs.technet.com/kevinholman/archive/2008/03/07/acs-internals-part-1.aspx" href="http://blogs.technet.com/kevinholman/archive/2008/03/07/acs-internals-part-1.aspx">http://blogs.technet.com/kevinholman/archive/2008/03/07/acs-internals-part-1.aspx</a></li>
<li><a href="http://blogs.technet.com/momteam/archive/2009/05/08/acs-reports-for-windows-2008-and-windows-2008-r2.aspx"><span style="color: #333333;">ACS Reports for Win2008 </span>http://blogs.technet.com/momteam/archive/2009/05/08/acs-reports-for-windows-2008-and-windows-2008-r2.aspx</a></li>
<li><a title="http://blogs.msdn.com/scxplat/archive/2009/12/17/cross-platform-audit-collection-services-released.aspx" href="http://blogs.msdn.com/scxplat/archive/2009/12/17/cross-platform-audit-collection-services-released.aspx"><span style="color: #333333;">ACS for Cross-Platform </span>http://blogs.msdn.com/scxplat/archive/2009/12/17/cross-platform-audit-collection-services-released.aspx</a></li>
<li>Jimmy Harper’s Custom ACS Reports <a title="http://blogs.technet.com/jimmyharper/archive/2009/12/10/some-custom-acs-reports.aspx" href="http://blogs.technet.com/jimmyharper/archive/2009/12/10/some-custom-acs-reports.aspx">http://blogs.technet.com/jimmyharper/archive/2009/12/10/some-custom-acs-reports.aspx</a></li>
</ul>
<p>and, of course, many more, I cannot link them all.</p>
<p>As for myself, I have been playing with ACS since those early beta days (before <a href="http://blogs.msdn.com/dmuscett/archive/2004/11/18/263280.aspx">I joined Microsoft and before going back to MOM</a>, when I was working in Security), but I never really blogged about this piece.</p>
<p>Since I have been doing quite a lot of work around ACS lately, again, I thought it might be worth consolidating some thoughts about it, hence this post.</p>
<h3>Anatomy of an “Online” Sizing Calculation</h3>
<p>What I would like to explain here is the strategy and process I go thru when analyzing the data stored in a ACS database, in order to determine a filtering strategy: what to keep and what not to keep, by applying a filter on the ACS Collector.</p>
<p>So, the first thing I usually start with is using one of the many “ACS sizer” Excel spreadsheets around… which usually tell you that you need more space than it really is necessary… basically giving you a “worst case” scenario. I don’t know how some people can actually do this from a purely theoretical point of view, but I usually prefer a bottom up approach: I look at the actual data that the ACS is collecting without filters, and start from there for a better/more accurate sizing.</p>
<p>In the case of a new install this is easy – you just turn ACS on, set the retention to a few days (one or two weeks maximum), give the DB plenty of space to make sure it will make it, add all your forwarders… sit back and wait.</p>
<p>Then you come back 2 weeks later and start looking at the data that has been collected.</p>
<h3>What/How much data are we collecting?</h3>
<p>First of all, if we have not changed the default settings, the grooming and partitioning algorithm will create new partitioned tables every day. So my first step is to see how big each “partition” is.</p>
<p>But… what is a partition, anyway? A partition is a set of 4 tables joint together:</p>
<ol>
<li>dtEvent_GUID</li>
<li>dtEventData_GUID</li>
<li>dtPrincipal_GUID</li>
<li>dtSTrings_GUID</li>
</ol>
<p>where GUID is a new GUID every day, and of course the 4 tables that make up a daily partition will have the same GUID.</p>
<p>The <strong>dtPartition</strong> table contains a list of all partitions and their GUIDs, together with their start and closing time.</p>
<p>Just to get a rough estimate we can ignore the space used by the last three tables – which are usually very small – and only use the <strong>dtEvent_GUID</strong> table to get the number of events for that day, and use the stored procedure “sp_spaceused”  against that same table to get an overall idea of how much space that day is taking in the database.</p>
<p>By following this process, I come up with something like the following:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="391"><strong>Partition ID </strong></td>
<td width="64"><strong>Status </strong></td>
<td width="139"><strong>Partition Start Time </strong></td>
<td width="183"><strong>Partition Close Time </strong></td>
<td width="121"><strong>Rows </strong></td>
<td width="163"><strong>Reserved  KB </strong></td>
<td width="96"><strong>Total GB </strong></td>
</tr>
<tr>
<td width="391">9b45a567_c848_4a32_9c35_39b402ea0ee2</td>
<td width="64">0</td>
<td width="139">2/1/2010 2:00</td>
<td width="183">2/1/2010 2:00</td>
<td width="121">29,749,366</td>
<td width="163">7,663,488</td>
<td width="96" valign="bottom">7,484</td>
</tr>
<tr>
<td width="391">8d8c8ee1_4c5c_4dea_b6df_82233c52e346</td>
<td width="64">2</td>
<td width="139">1/31/2010 2:00</td>
<td width="183">2/1/2010 2:00</td>
<td width="121">28,067,438</td>
<td width="163">9,076,904</td>
<td width="96" valign="bottom">8,864</td>
</tr>
<tr>
<td width="391">34ce995b_689b_46ae_b9d3_c644cfb66e01</td>
<td width="64">2</td>
<td width="139">1/30/2010 2:00</td>
<td width="183">1/31/2010 2:00</td>
<td width="121">30,485,110</td>
<td width="163">9,857,896</td>
<td width="96" valign="bottom">9,627</td>
</tr>
<tr>
<td width="391">bb7ea5d3_f751_473a_a835_1d1d42683039</td>
<td width="64">2</td>
<td width="139">1/29/2010 2:00</td>
<td width="183">1/30/2010 2:00</td>
<td width="121">48,464,952</td>
<td width="163">15,670,792</td>
<td width="96" valign="bottom">15,304</td>
</tr>
<tr>
<td width="391">ee262692_beae_4d81_8079_470a54567946</td>
<td width="64">2</td>
<td width="139">1/28/2010 2:00</td>
<td width="183">1/29/2010 2:00</td>
<td width="121">48,980,178</td>
<td width="163">15,836,416</td>
<td width="96" valign="bottom">15,465</td>
</tr>
<tr>
<td width="391">7984b5b8_ddea_4e9c_9e51_0ee7a413b4c9</td>
<td width="64">2</td>
<td width="139">1/27/2010 2:00</td>
<td width="183">1/28/2010 2:00</td>
<td width="121">51,295,777</td>
<td width="163">16,585,408</td>
<td width="96" valign="bottom">16,197</td>
</tr>
<tr>
<td width="391">d93b9f0e_2ec3_4f61_b5e0_b600bbe173d2</td>
<td width="64">2</td>
<td width="139">1/26/2010 2:00</td>
<td width="183">1/27/2010 2:00</td>
<td width="121">53,385,239</td>
<td width="163">17,262,232</td>
<td width="96" valign="bottom">16,858</td>
</tr>
<tr>
<td width="391">8ce1b69a_7839_4a05_8785_29fd6bfeda5f</td>
<td width="64">2</td>
<td width="139">1/25/2010 2:00</td>
<td width="183">1/26/2010 2:00</td>
<td width="121">55,997,546</td>
<td width="163">18,105,840</td>
<td width="96" valign="bottom">17,681</td>
</tr>
<tr>
<td width="391">19aeb336_252d_4099_9a55_81895bfe5860</td>
<td width="64">2</td>
<td width="139">1/24/2010 2:00</td>
<td width="183">1/24/2010 2:00</td>
<td width="121">28,525,304</td>
<td width="163">7,345,120</td>
<td width="96" valign="bottom">7,173</td>
</tr>
<tr>
<td width="391">1cf70e01_3465_44dc_9d5c_4f3700dc408a</td>
<td width="64">2</td>
<td width="139">1/23/2010 2:00</td>
<td width="183">1/23/2010 2:00</td>
<td width="121">26,046,092</td>
<td width="163">6,673,472</td>
<td width="96" valign="bottom">6,517</td>
</tr>
<tr>
<td width="391">f5ec207f_158c_47a8_b15f_8aab177a6305</td>
<td width="64">2</td>
<td width="139">1/22/2010 2:00</td>
<td width="183">1/22/2010 2:00</td>
<td width="121">47,818,322</td>
<td width="163">12,302,208</td>
<td width="96" valign="bottom">12,014</td>
</tr>
<tr>
<td width="391">b48dabe6_a483_4c60_bb4d_93b7d3549b3e</td>
<td width="64">2</td>
<td width="139">1/21/2010 2:00</td>
<td width="183">1/21/2010 2:00</td>
<td width="121">55,060,150</td>
<td width="163">14,155,392</td>
<td width="96" valign="bottom">13,824</td>
</tr>
<tr>
<td width="391">efe66c10_0cf2_4327_adbf_bebb97551c93</td>
<td width="64">2</td>
<td width="139">1/20/2010 2:00</td>
<td width="183">1/20/2010 2:00</td>
<td width="121">58,322,217</td>
<td width="163">15,029,216</td>
<td width="96" valign="bottom">14,677</td>
</tr>
<tr>
<td width="391">0231463e_8d50_4a42_a834_baf55e6b4dcd</td>
<td width="64">2</td>
<td width="139">1/19/2010 2:00</td>
<td width="183">1/19/2010 2:00</td>
<td width="121">61,257,393</td>
<td width="163">15,741,248</td>
<td width="96" valign="bottom">15,372</td>
</tr>
<tr>
<td width="391">510acc08_dc59_482e_a353_bfae1f85e648</td>
<td width="64">2</td>
<td width="139">1/18/2010 2:00</td>
<td width="183">1/18/2010 2:00</td>
<td width="121">64,579,122</td>
<td width="163">16,612,512</td>
<td width="96" valign="bottom">16,223</td>
</tr>
</tbody>
</table>
<p>If you have just installed ACS and let it run without filters with your agents for a couple of weeks, you should get some numbers like those above for your “couple of weeks” of analysis. If you graph your numbers in Excel (both size and number of rows/events per day) you should get some similar lines that show a pattern or trend:</p>
<p><img style="display: inline; border-width: 0px;" title="Trend: Space user by day" src="http://www.muscetta.com/wp-content/uploads/clip_image002.gif" border="0" alt="Trend: Space user by day" width="700" height="291" /></p>
<p><img style="display: inline; border-width: 0px;" title="Trend: Number of events by day" src="http://www.muscetta.com/wp-content/uploads/clip_image004.gif" border="0" alt="Trend: Number of events by day" width="679" height="322" /></p>
<p>So, in my example above, we can clearly observe a “weekly” pattern (monday-to-friday being busier than the weekend) and we can see that – for that environment – the biggest partition is roughly 17GB. If we round this up to 20GB – and also considering the weekends are much quieter – we can forecast 20*7 = 140GB per week. This has an excess “buffer” which will let the system survive event storms, should they happen. We also always recommend having some free space to allow for re-indexing operations.</p>
<p>In fact, especially when collecting everything without filters, the daily size is a lot less predictable: imagine worms “trying out” administrator account’s passwords, and so on… those things can easily create event storms.</p>
<p>Anyway, in the example above, the customer would have liked to keep 6 MONTHS (180days) of data online, which would become 20*180 = 3600GB = THREE TERABYTE and a HALF! Therefore we need a filtering strategy – and badly – to reduce this size.</p>
<p>[edited on May 7th 2010 - if you want to automate the above analysis and produce a table and graphs like those just shown, <a href="http://www.muscetta.com/2010/05/05/audit-collection-services-database-partitions-size-report/">you should look at my following post</a>.]</p>
<h3>Filtering Strategies</h3>
<p>Ok, then we need to look at WHAT actually comprises that amount of events we are collecting without filters. As I wrote above, I usually run queries to get this type of information.</p>
<p>I will not get into HOW TO write a filter here – a collector’s filter is a WMI notification query and it is already described pretty well elsewhere how to configure it.</p>
<p>Here, instead, I want to walk thru the process and the queries I use to understand where the noise comes from and what could be filtered – and get an estimate of how much space we could be saving if filter one way or another.</p>
<p><strong>Number of Events per User</strong></p>
<p>&#8211;event count by User (with Percentages)<br />
declare @total float<br />
select @total = count(HeaderUser) from AdtServer.dvHeader<br />
select count(HeaderUser),HeaderUser, cast(convert(float,(count(HeaderUser)) / (convert(float,@total)) * 100) as decimal(10,2))<br />
from AdtServer.dvHeader<br />
group by HeaderUser<br />
order by count(HeaderUser) desc</p>
<p>In our example above, over the 14 days we were observing, we obtained percentages like the following ones:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="138" valign="bottom"><strong>#evt </strong></td>
<td width="268" valign="bottom"><strong>HeaderUser Account</strong></td>
<td width="125" valign="bottom"><strong>Percent</strong></td>
</tr>
<tr>
<td width="138" valign="bottom">204,904,332</td>
<td width="268" valign="bottom">SYSTEM</td>
<td width="125" valign="bottom">40.79 %</td>
</tr>
<tr>
<td width="138" valign="bottom">18,811,139</td>
<td width="268" valign="bottom">LOCAL SERVICE</td>
<td width="125" valign="bottom">3.74 %</td>
</tr>
<tr>
<td width="138" valign="bottom">14,883,946</td>
<td width="268" valign="bottom">ANONYMOUS LOGON</td>
<td width="125" valign="bottom">2.96 %</td>
</tr>
<tr>
<td width="138" valign="bottom">10,536,317</td>
<td width="268" valign="bottom">appintrauser</td>
<td width="125" valign="bottom">2.09 %</td>
</tr>
<tr>
<td width="138" valign="bottom">5,590,434</td>
<td width="268" valign="bottom">mossfarmusr</td>
<td width="125" valign="bottom">…</td>
</tr>
</tbody>
</table>
<p>Just by looking at this, it is pretty clear that filtering out events tracked by the accounts “SYSTEM”, “LOCAL SERVICE” and “ANONYMOUS”, we would save over 45% of the disk space!</p>
<p><strong>Number of Events by EventID</strong></p>
<p>Similarly, we can look at how different Event IDs have different weights on the total amount of events tracked in the database:</p>
<p>&#8211;event count by ID (with Percentages)<br />
declare @total float<br />
select @total = count(EventId) from AdtServer.dvHeader<br />
select count(EventId),EventId, cast(convert(float,(count(EventId)) / (convert(float,@total)) * 100) as decimal(10,2))<br />
from AdtServer.dvHeader<br />
group by EventId<br />
order by count(EventId) desc</p>
<p>We would get some similar information here:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td width="114" valign="bottom"><strong>Event ID </strong></td>
<td width="392" valign="bottom"><strong>Meaning </strong></td>
<td width="116" valign="bottom"><strong>Sum of events </strong></td>
<td width="101" valign="bottom"><strong>Percent </strong></td>
</tr>
<tr>
<td width="114" valign="bottom">538</td>
<td width="392" valign="bottom">A user logged off</td>
<td width="116" valign="bottom">99,494,648</td>
<td width="101" valign="bottom">27.63</td>
</tr>
<tr>
<td width="114" valign="bottom">540</td>
<td width="392" valign="bottom">Successful Network Logon</td>
<td width="116" valign="bottom">97,819,640</td>
<td width="101" valign="bottom">27.16</td>
</tr>
<tr>
<td width="114" valign="bottom">672</td>
<td width="392" valign="bottom">Authentication Ticket Request</td>
<td width="116" valign="bottom">52,281,129</td>
<td width="101" valign="bottom">14.52</td>
</tr>
<tr>
<td width="114" valign="bottom">680</td>
<td width="392" valign="bottom">Account Used for Logon by (Windows 2000)</td>
<td width="116" valign="bottom">35,141,235</td>
<td width="101" valign="bottom">9.76</td>
</tr>
<tr>
<td width="114" valign="bottom">576</td>
<td width="392" valign="bottom">Specified privileges were added to a user&#039;s access token.</td>
<td width="116" valign="bottom">26,154,761</td>
<td width="101" valign="bottom">7.26</td>
</tr>
<tr>
<td width="114" valign="bottom">8086</td>
<td width="392" valign="bottom">Custom Application ID</td>
<td width="116" valign="bottom">18,789,599</td>
<td width="101" valign="bottom">5.21</td>
</tr>
<tr>
<td width="114" valign="bottom">673</td>
<td width="392" valign="bottom">Service Ticket Request</td>
<td width="116" valign="bottom">10,641,090</td>
<td width="101" valign="bottom">2.95</td>
</tr>
<tr>
<td width="114" valign="bottom">675</td>
<td width="392" valign="bottom">Pre-Authentication Failed</td>
<td width="116" valign="bottom">7,890,823</td>
<td width="101" valign="bottom">2.19</td>
</tr>
<tr>
<td width="114" valign="bottom">552</td>
<td width="392" valign="bottom">Logon attempt using explicit credentials</td>
<td width="116" valign="bottom">4,143,741</td>
<td width="101" valign="bottom">1.15</td>
</tr>
<tr>
<td width="114" valign="bottom">539</td>
<td width="392" valign="bottom">Logon Failure &#8211; Account locked out</td>
<td width="116" valign="bottom">2,383,809</td>
<td width="101" valign="bottom">0.66</td>
</tr>
<tr>
<td width="114" valign="bottom">528</td>
<td width="392" valign="bottom">Successful Logon</td>
<td width="116" valign="bottom">1,764,697</td>
<td width="101" valign="bottom">0.49</td>
</tr>
</tbody>
</table>
<p>Also, do not forget that ACS provides some report to do this type of analysis out of the box, even if for my experience they are generally slower – on large datasets – than the queries provided here. Also, a number of reports have been buggy over time, so I just prefer to run queries and be on the safe side.</p>
<p>Below an example of such report (even if run against a different environment – just in case you were wondering why the numbers were not the same ones <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ):<img style="display: inline; border-width: 0px;" title="Event Counts ACS Default Report" src="http://www.muscetta.com/wp-content/uploads/image46.png" border="0" alt="Event Counts ACS Default Report" width="1037" height="598" /></p>
<p>The numbers and percentages we got from the two queries above should already point us in the right direction about what we might want to adjust in either our auditing policy directly on Windows and/or decide if there is something we want to filter out at the collector level (here you should ask yourself the question: “if they aren’t worth collecting are they worth generating?” – but I digress).</p>
<p>Also, a permutation of the above two queries should let you see which user is generating the most “noise” in regards to some events and not other ones… for example:</p>
<p>&#8211;event distribution for a specific user (change the @user) &#8211; with percentages for the user and compared with the total #events in the DB<br />
declare @user varchar(255)<br />
set @user = &#039;SYSTEM&#039;<br />
declare @total float<br />
select @total = count(Id) from AdtServer.dvHeader<br />
declare @totalforuser float<br />
select @totalforuser = count(Id) from AdtServer.dvHeader where HeaderUser = @user<br />
select count(Id), EventID, cast(convert(float,(count(Id)) / convert(float,@totalforuser) * 100) as decimal(10,2)) as PercentageForUser, cast(convert(float,(count(Id)) / (convert(float,@total)) * 100) as decimal(10,2)) as PercentageTotal<br />
from AdtServer.dvHeader<br />
where HeaderUser = @user<br />
group by EventID<br />
order by count(Id) desc</p>
<p>The above is particularly important, as we might want to filter out a number of events for the SYSTEM account (i.e. logons that occur when starting and stopping services) but we might want to keep other events that are tracked by the SYSTEM account too, such as an administrator having wiped the Security Log clean – which might be something you want to keep:</p>
<p><img style="display: inline; border-width: 0px;" title="Event ID 517 Audit Log was cleared" src="http://www.muscetta.com/wp-content/uploads/image47.png" border="0" alt="Event ID 517 Audit Log was cleared" width="624" height="409" /></p>
<p>of course the amount of EventIDs 517 over the total of events tracked by the SYSTEM account will not be as many, and we can still filter the other ones out.</p>
<p><strong>Number of Events by EventID and by User</strong></p>
<p>We could also combine the two approaches above – by EventID and by User:</p>
<p>select count(Id),HeaderUser, EventId</p>
<p>from AdtServer.dvHeader</p>
<p>group by HeaderUser, EventId</p>
<p>order by count(Id) desc</p>
<p>This will produce a table like the following one</p>
<p><img style="display: inline; border-width: 0px;" title="SQL Query: Events by EventID and by User" src="http://www.muscetta.com/wp-content/uploads/image48.png" border="0" alt="SQL Query: Events by EventID and by User" width="421" height="458" /></p>
<p>which can be easily copied/pasted into Excel in order to produce a pivot Table:</p>
<p><img style="display: inline; border-width: 0px;" title="Pivot Table" src="http://www.muscetta.com/wp-content/uploads/image49.png" border="0" alt="Pivot Table" width="624" height="419" /></p>
<h3>Cluster EventLog Replication</h3>
<p>One more aspect that is less widely known, but I think is worth showing, is the way that clusters behave when in ACS. I don’t mean all clusters… but if you keep the “eventlog replication” feature of clusters enabled (you should disable it also from a monitoring perspective, but I digress), each cluster node’s security eventlog will have events not just for itself, but for all other nodes as well.</p>
<p>Albeit I have not found a reliable way to filter out – other than disabling eventlog replication altogether.</p>
<p>Anyway, just to get an idea of how much this type of “duplicate” events weights on the total, I use the following query, that tells you how many events for each machine are tracked by another machine:</p>
<p>&#8211;to spot machines that are cluster nodes with eventlog repliation and write duplicate events (slow)</p>
<p>select Count(Id) as Total,replace(right(AgentMachine, (len(AgentMachine) &#8211; patindex(&#039;%\%&#039;,AgentMachine))),&#039;$',&#034;) as ForwarderMachine, EventMachine</p>
<p>from AdtServer.dvHeader</p>
<p>&#8211;where ForwarderMachine &lt;&gt; EventMachine</p>
<p>group by EventMachine,replace(right(AgentMachine, (len(AgentMachine) &#8211; patindex(&#039;%\%&#039;,AgentMachine))),&#039;$',&#034;)</p>
<p>order by ForwarderMachine,EventMachine</p>
<p><img style="display: inline; border-width: 0px;" title="Cluster Events" src="http://www.muscetta.com/wp-content/uploads/clip_image006.jpg" border="0" alt="Cluster Events" width="363" height="221" /></p>
<p>Those presented above are just some of the approaches I usually look into at first. Of course there are a number more. Here I am including the same queries already shown in action, plus a few more that can be useful in this process.</p>
<p>I have even considered building a page with all these queries – a bit like <a href="http://blogs.technet.com/kevinholman/archive/2007/10/18/useful-operations-manager-2007-sql-queries.aspx">those that Kevin is collecting for OpsMgr</a> (we actually wrote some of them together when building the OpsMgr Health Check)… shall I move the below queries on such a page? I though I’d list them here and give some background on how I normally use them, to start off with.</p>
<h3>Some more Useful Queries</h3>
<p>&#8211;top event ids<br />
select count(EventId), EventId<br />
from AdtServer.dvHeader<br />
group by EventId<br />
order by count(EventId) desc</p>
<p>&#8211;event count by ID (with Percentages)<br />
declare @total float<br />
select @total = count(EventId) from AdtServer.dvHeader<br />
select count(EventId),EventId, cast(convert(float,(count(EventId)) / (convert(float,@total)) * 100) as decimal(10,2))<br />
from AdtServer.dvHeader<br />
group by EventId<br />
order by count(EventId) desc</p>
<p>&#8211;which machines have ever written event 538<br />
select distinct EventMachine, count(EventId) as total<br />
from AdtServer.dvHeader<br />
where EventID = 538<br />
group by EventMachine</p>
<p>&#8211;machines<br />
select * from dtMachine</p>
<p>&#8211;machines (more readable)<br />
select replace(right(Description, (len(Description) &#8211; patindex(&#039;%\%&#039;,Description))),&#039;$',&#034;)<br />
from dtMachine</p>
<p>&#8211;events by machine<br />
select count(EventMachine), EventMachine<br />
from AdtServer.dvHeader<br />
group by EventMachine</p>
<p>&#8211;rows where EventMachine field not available (typically events written by ACS itself for chekpointing)<br />
select *<br />
from AdtServer.dvHeader<br />
where EventMachine = &#039;n/a&#039;</p>
<p>&#8211;event count by day<br />
select convert(varchar(20), CreationTime, 102) as Date, count(EventMachine) as total<br />
from AdtServer.dvHeader<br />
group by convert(varchar(20), CreationTime, 102)<br />
order by convert(varchar(20), CreationTime, 102)</p>
<p>&#8211;event count by day and by machine<br />
select convert(varchar(20), CreationTime, 102) as Date, EventMachine, count(EventMachine) as total<br />
from AdtServer.dvHeader<br />
group by EventMachine, convert(varchar(20), CreationTime, 102)<br />
order by convert(varchar(20), CreationTime, 102)</p>
<p>&#8211;event count by machine and by date (distinuishes between AgentMachine and EventMachine<br />
select convert(varchar(10),CreationTime,102),Count(Id),EventMachine,AgentMachine<br />
from AdtServer.dvHeader<br />
group by convert(varchar(10),CreationTime,102),EventMachine,AgentMachine<br />
order by convert(varchar(10),CreationTime,102) desc ,EventMachine</p>
<p>&#8211;event count by User<br />
select count(Id),HeaderUser<br />
from AdtServer.dvHeader<br />
group by HeaderUser<br />
order by count(Id) desc</p>
<p>&#8211;event count by User (with Percentages)<br />
declare @total float<br />
select @total = count(HeaderUser) from AdtServer.dvHeader<br />
select count(HeaderUser),HeaderUser, cast(convert(float,(count(HeaderUser)) / (convert(float,@total)) * 100) as decimal(10,2))<br />
from AdtServer.dvHeader<br />
group by HeaderUser<br />
order by count(HeaderUser) desc</p>
<p>&#8211;event distribution for a specific user (change the @user) &#8211; with percentages for the user and compared with the total #events in the DB<br />
declare @user varchar(255)<br />
set @user = &#039;SYSTEM&#039;<br />
declare @total float<br />
select @total = count(Id) from AdtServer.dvHeader<br />
declare @totalforuser float<br />
select @totalforuser = count(Id) from AdtServer.dvHeader where HeaderUser = @user<br />
select count(Id), EventID, cast(convert(float,(count(Id)) / convert(float,@totalforuser) * 100) as decimal(10,2)) as PercentageForUser, cast(convert(float,(count(Id)) / (convert(float,@total)) * 100) as decimal(10,2)) as PercentageTotal<br />
from AdtServer.dvHeader<br />
where HeaderUser = @user<br />
group by EventID<br />
order by count(Id) desc</p>
<p>&#8211;to spot machines that write duplicate events (such as cluster nodes with eventlog replication enabled)<br />
select Count(Id),EventMachine,AgentMachine<br />
from AdtServer.dvHeader<br />
group by EventMachine,AgentMachine<br />
order by EventMachine</p>
<p>&#8211;to spot machines that are cluster nodes with eventlog repliation and write duplicate events (better but slower)<br />
select Count(Id) as Total,replace(right(AgentMachine, (len(AgentMachine) &#8211; patindex(&#039;%\%&#039;,AgentMachine))),&#039;$',&#034;) as ForwarderMachine, EventMachine<br />
from AdtServer.dvHeader<br />
&#8211;where ForwarderMachine &lt;&gt; EventMachine<br />
group by EventMachine,replace(right(AgentMachine, (len(AgentMachine) &#8211; patindex(&#039;%\%&#039;,AgentMachine))),&#039;$',&#034;)<br />
order by ForwarderMachine,EventMachine</p>
<p>&#8211;which user and from which machine is target of elevation (network service doing &#034;runas&#034; is a 552 event)<br />
select count(Id),EventMachine, TargetUser<br />
from AdtServer.dvHeader<br />
where HeaderUser = &#039;NETWORK SERVICE&#039;<br />
and EventID = 552<br />
group by EventMachine, TargetUser<br />
order by count(Id) desc</p>
<p>&#8211;by hour, minute and user<br />
&#8211;(change the timestamp)&#8230; this query is useful to search which users are active in a given time period&#8230;<br />
&#8211;helpful to spot &#034;peaks&#034; of activities such as password brute force attacks, or other activities limited in time.<br />
select datepart(hour,CreationTime) as Hours, datepart(minute,CreationTime) as Minutes, HeaderUser, count(Id) as total<br />
from AdtServer.dvHeader<br />
where CreationTime &lt; &#039;2010-02-22T16:00:00.000&#039;<br />
and CreationTime &gt; &#039;2010-02-22T15:00:00.000&#039;<br />
group by datepart(hour,CreationTime), datepart(minute,CreationTime),HeaderUser<br />
order by datepart(hour,CreationTime), datepart(minute,CreationTime),HeaderUser</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2010/03/18/a-few-thoughts-on-sizing-audit-collection-system/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OpsMgr Eventlog analysis with Powershell</title>
		<link>http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/</link>
		<comments>http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 10:17:35 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[analysis]]></category>
		<category><![CDATA[CLI]]></category>
		<category><![CDATA[eventlog]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=489</guid>
		<description><![CDATA[The following technique should already be understood by any powersheller. Here we focus on Operations Manager log entries, even if the data mining technique shows is entirely possibly – and encouraged &#8211; with any other event log. Let’s start by getting our eventlog into a variable called $evt: PS&#160; &#62;&#62; $evt = Get-Eventlog “Operations Manager” [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>The following technique should already be understood by any powersheller. Here we focus on Operations Manager log entries, even if the data mining technique shows is entirely possibly – and encouraged <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  &#8211; with any other event log.</p>
<p>Let’s start by getting our eventlog into a variable called $evt:</p>
<p><strong>PS&#160; &gt;&gt; $evt = Get-Eventlog “Operations Manager”</strong></p>
<p>The above only works locally in POSH v1.</p>
<p>In POSH v2 you can go remotely by using the “-computername” parameter:</p>
<p><strong>PS&#160; &gt;&gt; $evt = Get-Eventlog “Operations Manager” –computername RMS.domain.com</strong></p>
<p>Anyhow, you can get to this remotely also in POSHv1 with this other more “dotNET-tish” syntax:</p>
<p><strong>PS &gt;&gt; $evt = (New-Object System.Diagnostics.Eventlog -ArgumentList &quot;Operations Manager&quot;).get_Entries()</strong></p>
<p>you could even export this (or any of the above) to a CLIXML file:</p>
<p><strong>PS &gt;&gt; (New-Object System.Diagnostics.Eventlog -ArgumentList &quot;Operations Manager&quot;).get_Entries() | export-clixml -path c:\evt\Evt-OpsMgr-RMS.MYDOMAIN.COM.xml</strong></p>
<p>and then you could reload your eventlog to another machine:</p>
<p><strong>PS&#160; &gt;&gt; $evt = import-clixml c:\evt\Evt-OpsMgr-RMS.MYDOMAIN.COM.xml</strong>     </p>
<p>whatever way you used to populate your $evt&#160; variable, be it from a “live” eventlog or by re-importing it from XML, you can then start analyzing it:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -match &quot;Error&quot;} | select EventId,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />1510 4509&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4509; Source=HealthService; Message=The constructor for the managed module type &quot;Microsoft.EnterpriseManagement.Mom.DatabaseQueryModules.GroupCalculatio.     <br />&#160;&#160; 15 20022&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20022; Source=OpsMgr Connector; Message=The health service {7B0E947B-2055&#8230;     <br />&#160;&#160;&#160; 3 26319&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=26319; Source=OpsMgr SDK Service; Message=An exception was thrown while p&#8230;     <br />&#160;&#160;&#160; 1 4512&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4512; Source=HealthService; Message=Converting data batch to XML failed w&#8230; </p>
<p>the above is functionally identical to the following:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -eq 1} | select EventID,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />1510 4509&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4509; Source=HealthService; Message=The constructor for the managed modul&#8230;     <br />&#160;&#160; 15 20022&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20022; Source=OpsMgr Connector; Message=The health service {7B0E947B-2055&#8230;     <br />&#160;&#160;&#160; 3 26319&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=26319; Source=OpsMgr SDK Service; Message=An exception was thrown while p&#8230;     <br />&#160;&#160;&#160; 1 4512&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4512; Source=HealthService; Message=Converting data batch to XML failed w&#8230; </p>
<p>Note that Eventlog Entries’ type is an ENUM that has values of 0,1,2 – similarly to OpsMgr health states – but beware that their order is not the same, as shown in the following table:</p>
<table border="1" cellspacing="0" cellpadding="2" width="342">
<tbody>
<tr>
<td valign="top" width="71"><strong>Code</strong></td>
<td valign="top" width="137"><strong>OpsMgr States</strong></td>
<td valign="top" width="132"><strong>Events EntryType</strong></td>
</tr>
<tr>
<td valign="top" width="71">0</td>
<td valign="top" width="137">Not Monitored</td>
<td valign="top" width="132">Information</td>
</tr>
<tr>
<td valign="top" width="71">1</td>
<td valign="top" width="137">Success</td>
<td valign="top" width="132">Error</td>
</tr>
<tr>
<td valign="top" width="71">2</td>
<td valign="top" width="137">Warning</td>
<td valign="top" width="132">Warning</td>
</tr>
<tr>
<td valign="top" width="71">3</td>
<td valign="top" width="137">Critical</td>
<td valign="top" width="132">&#8211;</td>
</tr>
</tbody>
</table>
<p>Let’s now look at Information Events (Entrytype –eq 0)</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -eq 0} | select EventID,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />4135 2110&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=2110; Source=HealthService; Message=Health Service successfully transferr&#8230;     <br />1548 21025&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=21025; Source=OpsMgr Connector; Message=OpsMgr has received new configura&#8230;     <br />4644 7026&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7026; Source=HealthService; Message=The Health Service successfully logge&#8230;     <br />1548 7023&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7023; Source=HealthService; Message=The Health Service has downloaded sec&#8230;     <br />1548 7025&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7025; Source=HealthService; Message=The Health Service has authorized all&#8230;     <br />1548 7024&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7024; Source=HealthService; Message=The Health Service successfully logge&#8230;     <br />1548 7028&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7028; Source=HealthService; Message=All RunAs accounts for management gro&#8230;     <br />&#160;&#160; 16 20021&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20021; Source=OpsMgr Connector; Message=The health service {7B0E947B-2055&#8230;     <br />&#160;&#160; 13 7019&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=7019; Source=HealthService; Message=The Health Service has validated all &#8230;     <br />&#160;&#160;&#160; 4 4002&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=4002; Source=Health Service Script; Message=Microsoft.Windows.Server.Logi&#8230; </p>
<p>&#160;</p>
<p>And “Warning” events (Entrytype –eq 2):</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Entrytype -eq 2} | select EventID,Source,Message | group eventid </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />1511 1103&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=1103; Source=HealthService; Message=Summary: 1 rule(s)/monitor(s) failed &#8230;     <br />&#160; 501 20058&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=20058; Source=OpsMgr Connector; Message=The Root Connector has received b&#8230;     <br />&#160;&#160;&#160; 5 29202&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=29202; Source=OpsMgr Config Service; Message=OpsMgr Config Service could &#8230;     <br />&#160; 421 31501&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=31501; Source=Health Service Modules; Message=No primary recipients were &#8230;     <br />&#160;&#160; 18 10103&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=10103; Source=Health Service Modules; Message=In PerfDataSource, could no&#8230;     <br />&#160;&#160;&#160; 1 29105&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {@{EventID=29105; Source=OpsMgr Config Service; Message=The request for management p&#8230; </p>
<p>&#160;</p>
<p>&#160;</p>
<p>Ok now let’s see those event 20022, for example… so we get an idea of which healthservices they are referring to (20022 indicates&quot; “hearthbeat failure”, btw):</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.eventid -eq 20022} | select message </strong></p>
<p>Message    <br />&#8212;&#8212;-     <br />The health service {7B0E947B-2055-C12A-B6DB-DD6B311ADF39} running on host webapp3.domain1.mydomain.com and s&#8230;     <br />The health service {E3B3CCAA-E797-4F08-860F-47558B3DA477} running on host SERVER1.domain2.mydomain.com and serving&#8230;     <br />The health service {E3B3CCAA-E797-4F08-860F-47558B3DA477} running on host SERVER1.domain2.mydomain.com and serving&#8230;     <br />The health service {E3B3CCAA-E797-4F08-860F-47558B3DA477} running on host SERVER1.domain2.mydomain.com and serving&#8230;     <br />The health service {52E16F9C-EB1A-9FAF-5B9C-1AA9C8BC28E3} running on host DC4WK3.domain1.mydomain.com and se&#8230;     <br />The health service {F96CC9E6-2EC4-7E63-EE5A-FF9286031C50} running on host VWEBDL2.domain1.mydomain.com and s&#8230;     <br />The health service {71987EE0-909A-8465-C32D-05F315C301CC} running on host VDEVWEBPROBE2.domain2.mydomain.com&#8230;.     <br />The health service {BAF6716E-54A7-DF68-ABCB-B1101EDB2506} running on host XP2SMS002.domain2.mydomain.com and serving mana&#8230;     <br />The health service {30C81387-D5E0-32D6-C3A3-C649F1CF66F1} running on host stgweb3.domain3.mydomain.com and&#8230;     <br />The health service {3DCDD330-BBBB-B8E8-4FED-EF163B27DE0A} running on host VWEBDL1.domain1.mydomain.com and s&#8230;     <br />The health service {13A47552-2693-E774-4F87-87DF68B2F0C0} running on host DC2.domain4.mydomain.com and &#8230;     <br />The health service {920BF9A8-C315-3064-A5AA-A92AA270529C} running on host FSCLU2 and serving management group Pr&#8230;     <br />The health service {FAA3C2B5-C162-C742-786F-F3F8DC8CAC2F} running on host WEBAPP4.domain1.mydomain.com and s&#8230;     <br />The health service {3DCDD330-BBBB-B8E8-4FED-EF163B27DE0A} running on host WEBDL1.domain1.mydomain.com and s&#8230;     <br />The health service {3DCDD330-BBBB-B8E8-4FED-EF163B27DE0A} running on host WEBDL1.domain1.mydomain.com and s&#8230; </p>
<p>&#160;</p>
<p>or let’s look at some warning for the Config Service:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Eventid -eq 29202} </strong></p>
<p>&#160;&#160; Index Time&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; EntryType&#160;&#160; Source&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; InstanceID Message    <br />&#160;&#160; &#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;&#160;&#160; &#8212;&#8212;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;- &#8212;&#8212;-     <br />5535065 Dec 07 21:18&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5543960 Dec 09 16:39&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5545536 Dec 10 01:06&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5553119 Dec 11 08:24&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230;     <br />5555677 Dec 11 10:34&#160; Warning&#160;&#160;&#160;&#160; OpsMgr Config Ser&#8230;&#160;&#160; 2147512850 OpsMgr Config Service could not retrieve a cons&#8230; </p>
<p>Once seen those, can you remember of any particular load you had on those days that justifies the instance space changing so quickly that the Config Service couldn’t keep up?</p>
<p>&#160;</p>
<p>Or let’s group those events with ID 21025 by hour, so we know how many Config recalculations we’ve had (which, if many, might indicate <a href="http://blogs.technet.com/kevinholman/archive/2009/10/05/what-is-config-churn.aspx">Config Churn</a>):</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Eventid -eq 21025} | select TimeGenerated | % {$_.TimeGenerated.ToShortDateString()} | group </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />&#160;&#160; 39 12/7/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/7/2009, 12/7/2009, 12/7/2009, 12/7/2009&#8230;}     <br />&#160; 203 12/8/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/8/2009, 12/8/2009, 12/8/2009, 12/8/2009&#8230;}     <br />&#160; 217 12/9/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/9/2009, 12/9/2009, 12/9/2009, 12/9/2009&#8230;}     <br />&#160; 278 12/10/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/10/2009, 12/10/2009, 12/10/2009, 12/10/2009&#8230;}     <br />&#160; 259 12/11/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/11/2009, 12/11/2009, 12/11/2009, 12/11/2009&#8230;}     <br />&#160; 224 12/12/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/12/2009, 12/12/2009, 12/12/2009, 12/12/2009&#8230;}     <br />&#160; 237 12/13/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/13/2009, 12/13/2009, 12/13/2009, 12/13/2009&#8230;}     <br />&#160;&#160; 91 12/14/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/14/2009, 12/14/2009, 12/14/2009, 12/14/2009&#8230;} </p>
<p>&#160;</p>
<p>Event ID 21025 shows that there is a new configuration for the Management Group.</p>
<p>Event ID 29103 has a similar wording, but shows that there is a new configuration for a given Healthservice. These should normally be many more events, unless your only health Service is the RMS, which is unlikely…</p>
<p>If we look at the event description (“message”) in search for the name (or even the GUID, as both are present) or our RMS, as follows, then they should be the same numbers of the 21025 above:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.Eventid -eq 29103} | where {$_.message -match &quot;myrms.domain.com&quot;} | select TimeGenerated | % {$_.TimeGenerated.ToShortDateString()} | group </strong></p>
<p>Count Name&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Group    <br />&#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8211;     <br />&#160;&#160; 39 12/7/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/7/2009, 12/7/2009, 12/7/2009, 12/7/2009&#8230;}     <br />&#160; 203 12/8/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/8/2009, 12/8/2009, 12/8/2009, 12/8/2009&#8230;}     <br />&#160; 217 12/9/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/9/2009, 12/9/2009, 12/9/2009, 12/9/2009&#8230;}     <br />&#160; 278 12/10/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/10/2009, 12/10/2009, 12/10/2009, 12/10/2009&#8230;}     <br />&#160; 259 12/11/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/11/2009, 12/11/2009, 12/11/2009, 12/11/2009&#8230;}     <br />&#160; 224 12/12/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/12/2009, 12/12/2009, 12/12/2009, 12/12/2009&#8230;}     <br />&#160; 237 12/13/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/13/2009, 12/13/2009, 12/13/2009, 12/13/2009&#8230;}     <br />&#160;&#160; 91 12/14/2009&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {12/14/2009, 12/14/2009, 12/14/2009, 12/14/2009&#8230;} </p>
<p>&#160;</p>
<p>Going back to the initial counts of events by their IDs, when showing the errors the counts above had spotted the presence of a lonely 4512 event, which might have gone undetected if just browsing the eventlog with the GUI, since it only occurred once.</p>
<p>Let’s take a look at it:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.eventid -eq 4512} </strong></p>
<p>&#160;&#160; Index Time&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; EntryType&#160;&#160; Source&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; InstanceID Message    <br />&#160;&#160; &#8212;&#8211; &#8212;-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;&#160;&#160; &#8212;&#8212;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8212;&#8212;&#8212;- &#8212;&#8212;-     <br />5560756 Dec 12 11:18&#160; Error&#160;&#160;&#160;&#160;&#160;&#160; HealthService&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3221229984 Converting data batch to XML failed with error &#8230; </p>
<p>Now, when it is about counts, Powershell is great.&#160; But sometimes Powershell makes it difficult to actually READ the (long) event messages (descriptions) in the console. For example, our event ID 4512 is difficult to read in its entirety and gets truncated with trailing dots…</p>
<p>we can of course increase the window size and/or selecting only THAT one field to read it better:</p>
<p><strong>PS&#160; &gt;&gt; $evt | where {$_.eventid -eq 4512} | select message </strong></p>
<p>Message    <br />&#8212;&#8212;-     <br />Converting data batch to XML failed with error &quot;Not enough storage is available to complete this operation.&quot; (0x8007000E) in rule &quot;Microsoft.SystemCenter.ConfigurationService.CollectionRule.Event.ConfigurationChanged&quot; running for instance &quot;RMS.MYDOMAIN.COM&quot; with id:&quot;{04F4ADED-2C7F-92EF-D620-9AF9685F736F}&quot; in management group &quot;SCOMPROD&quot; </p>
<p>Or, worst case, if it still does not fit, we can still go and search for it in the actual, usual eventlog application… but at least we will have spotted it!</p>
<p>&#160;</p>
<p>The above wants to give you an idea of what is easily accomplished with some simple one-liners, and how it can be a useful aid in analyzing/digging into Eventlogs.</p>
<p>All of the above is ALSO be possible with Logparser, and it would actually be even less heavy on memory usage and it will be quicker, to be honest! </p>
<p>I just like Powershell syntax a lot more, and its ubiquity, which makes it a better option for me. Your mileage may vary, of course.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/12/16/opsmgr-eventlog-analysis-with-powershell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Invoking Methods on the Xplat agent with WINRM</title>
		<link>http://www.muscetta.com/2009/10/26/invoking-methods-on-the-xplat-agent-with-winrm/</link>
		<comments>http://www.muscetta.com/2009/10/26/invoking-methods-on-the-xplat-agent-with-winrm/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 22:32:43 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[invoke]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[winrm]]></category>
		<category><![CDATA[ws-man]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=488</guid>
		<description><![CDATA[So I was testing other stuff tonight, to be honest, but I got pinged on Instant Messenger by my geek friend and colleague Stefan Stranger who pointed me at his request for help here http://friendfeed.com/sstranger/4571f39b/help-needed-on-winrs-or-winrm-and-openwsman-to He wanted to use WINRM or any other command line utility to interact with the Xplat agent, and call methods [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>So I was testing other stuff tonight, to be honest, but I got pinged on Instant Messenger by my geek friend and colleague <a href="http://blogs.technet.com/stefan_stranger/">Stefan Stranger</a> who pointed me at his request for help here <a title="http://friendfeed.com/sstranger/4571f39b/help-needed-on-winrs-or-winrm-and-openwsman-to" href="http://friendfeed.com/sstranger/4571f39b/help-needed-on-winrs-or-winrm-and-openwsman-to">http://friendfeed.com/sstranger/4571f39b/help-needed-on-winrs-or-winrm-and-openwsman-to</a></p>
<p>He wanted to use WINRM or any other command line utility to interact with the Xplat agent, and call methods on the Unix machine from windows. This could be very useful to – for example – restart a service (in fact it is what the RECOVERY actions in the Xplat Management Packs do, btw).</p>
<p>At first I told him I had only tested enumerations – such as on this other post <a title="http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/" href="http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/">http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/</a> … but the question intrigued me, so I check out the help for winrm’s INVOKE verb:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://www.muscetta.com/wp-content/uploads/clip_image0021.jpg" width="650" height="472" /></p>
<p>Which told me that you can pass in the parameters for the method to be called/invoked either as an hashtable @{KEY=”value”;KEY2=”value”}, or as an input XML file. I first tried the XML file but I could not get its format right.</p>
<p>After a few more minutes of trying, I figured out the right syntax.</p>
<p>This one works, for example:</p>
<p><strong>winrm invoke ExecuteCommand http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/SCX_OperatingSystem?__cimnamespace=root/scx @{command=&quot;ps&quot;;timeout=&quot;60&quot;} -username:root -password:password -auth:basic -r:https://virtubuntu.huis.dom:1270/wsman -skipCACheck -encoding:UTF-8</strong></p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image004" border="0" alt="clip_image004" src="http://www.muscetta.com/wp-content/uploads/clip_image0041.jpg" width="634" height="662" /></p>
<p>Happy remote management of your unix systems from Windows <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/10/26/invoking-methods-on-the-xplat-agent-with-winrm/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PS&gt; Get-Milk</title>
		<link>http://www.muscetta.com/2009/09/17/ps-get-milk/</link>
		<comments>http://www.muscetta.com/2009/09/17/ps-get-milk/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 13:00:08 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[baby]]></category>
		<category><![CDATA[cmdlet]]></category>
		<category><![CDATA[daughter]]></category>
		<category><![CDATA[Get-Milk]]></category>
		<category><![CDATA[red]]></category>
		<category><![CDATA[sara]]></category>
		<category><![CDATA[TShirt]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=483</guid>
		<description><![CDATA[I printed a tshirt for Sara with a baby-friendly Powershell cmdlet (&#034;Get-Milk&#034;). She already seems to be wondering what script she can write with it.<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a title="Get-Milk" href="http://www.flickr.com/photos/dani3l3/3924854309/"><img src="http://farm3.static.flickr.com/2659/3924854309_7c1f7952c0.jpg" alt="PS&gt; Get-Milk" /></a></p>
<p>I printed a tshirt for Sara with a baby-friendly Powershell cmdlet (&#034;Get-Milk&#034;).<br />
She already seems to be wondering what script she can write with it.</p>
<p><a href="http://www.flickr.com/photos/dani3l3/3924854309/"><img src="http://farm4.static.flickr.com/3536/3924858247_a2da4f9fb9.jpg" alt="PS&gt; Get-Milk" width="500" height="333" /></a></p>
<p><a href="http://www.flickr.com/photos/dani3l3/3924854309/"><img src="http://farm4.static.flickr.com/3449/3925641880_aab0165f75.jpg" alt="PS&gt; Get-Milk" width="500" height="333" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/09/17/ps-get-milk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The mystery of the lost registry values</title>
		<link>http://www.muscetta.com/2009/09/10/mistery-of-lost-registry-values/</link>
		<comments>http://www.muscetta.com/2009/09/10/mistery-of-lost-registry-values/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 14:53:44 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[32bit]]></category>
		<category><![CDATA[64bit]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Monad]]></category>
		<category><![CDATA[registry]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[StdRegProvider]]></category>
		<category><![CDATA[vbscript]]></category>
		<category><![CDATA[Wbem]]></category>
		<category><![CDATA[WMI]]></category>
		<category><![CDATA[Wow]]></category>
		<category><![CDATA[Wow32]]></category>
		<category><![CDATA[Wow64]]></category>
		<category><![CDATA[Wow6432Node]]></category>
		<category><![CDATA[wrapper]]></category>
		<category><![CDATA[x64]]></category>
		<category><![CDATA[x86]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=481</guid>
		<description><![CDATA[During the OpsMgr Health Check engagement we use custom code to assess the customer’s Management group, as I wrote here already. Given that the customer tells us which machine is the RMS, one of the very first things that we do in our tool is to connect to the RMS’s registry, and check the values [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>During the OpsMgr Health Check engagement we use custom code to assess the customer’s Management group, <a href="http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/">as I wrote here already</a>. Given that the customer tells us which machine is the RMS, one of the very first things that we do in our tool is to connect to the RMS’s registry, and check the values under <strong>HKLM\SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup </strong>to see which machine holds the database. It is a rather critical piece of information for us, as we run a number of queries afterward… so we need to know where the db is, obviously <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I learned from here <a title="http://mybsinfo.blogspot.com/2007/01/powershell-remote-registry-and-you-part.html" href="http://mybsinfo.blogspot.com/2007/01/powershell-remote-registry-and-you-part.html">http://mybsinfo.blogspot.com/2007/01/powershell-remote-registry-and-you-part.html</a> how to access registry remotely thru powershell, by using .Net classes. This is also one of the methods illustrated in this other article on Technet Script Center <a href="http://www.microsoft.com/technet/scriptcenter/resources/qanda/jan09/hey0105.mspx">http://www.microsoft.com/technet/scriptcenter/resources/qanda/jan09/hey0105.mspx</a> </p>
<p>Therefore the “core” instructions of the function I was using to access the registry looked like the following</p>
<p><!-- Code --></p>
<div class="dp-highlighter">
<ol class="dp-rb">
<li class="alt"><span><span>Function GetValueFromRegistry ([string]</span><span class="variable">$computername</span><span>, </span><span class="variable">$regkey</span><span>, </span><span class="variable">$value</span><span>)    </span></span></li>
<li><span>{   </span></li>
<li><span>     </span><span class="variable">$reg</span><span> = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey(</span><span class="string">&#039;LocalMachine&#039;</span><span>, </span><span class="variable">$computername</span><span>)   </span></li>
<li><span>     </span><span class="variable">$regKey</span><span>= </span><span class="variable">$reg</span><span>.OpenSubKey(</span><span class="string">&#034;$regKey&#034;</span><span>)   </span></li>
<li><span>     </span><span class="variable">$result</span><span> = </span><span class="variable">$regkey</span><span>.GetValue(</span><span class="string">&#034;$value&#034;</span><span>)   </span></li>
<li><span>     </span><span class="keyword">return</span><span> </span><span class="variable">$result</span><span>  </span></li>
<li><span>}   </span></li>
</ol>
</div>
<p><span> </span></p>
<p>[Note: the actual function is bigger, and contains error handling, and logging, and a number of other things that are unnecessary here]</p>
<p>Therefore, the function was called as follows:<br />
<strong>GetValueFromRegistry $RMS &#034;SOFTWARE\\Microsoft\\Microsoft Operations Manager\\3.0\\Setup&#034; &#034;DatabaseServerName&#034;</strong><br />
Now so far so good.</p>
<p>In theory.</p>
<p> </p>
<p>Now for some reason that I could not immediately explain, we had noticed that this piece of code performing registry accessm while working most of the times, only on SOME occasions was giving errors about not being able to open the registry value…</p>
<p><a href="http://www.muscetta.com/wp-content/uploads/image45.png" rel="lightbox[481]"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image_thumb.png" border="0" alt="image" width="518" height="69" /></a></p>
<p>When you are onsite with a customer conducting an assessment, the PFE engineer does not always has the time to troubleshoot the error… as time is critical, we have usually resorted to just running the assessment from ANOTHER machine, and this “solved” the issue… but always left me wondering WHY this was giving an error. I had suspected an issue with permissions first, but it could not be as the permissions were obviously right: performing the assessment from another machine but with the same user was working!</p>
<p>A few days ago <a href="http://blogs.technet.com/stefan_stranger/">my colleague and buddy Stefan Stranger</a> figured out that this was related to the platform architecture:</p>
<ul>
<li>X64 client to x64 RMS was working</li>
<li>X64 client to x86 RMS was working</li>
<li>X86 client to x86 RMS was working</li>
<li><strong>X86 client to x64 RMS was NOT working</strong></li>
</ul>
<p>You don’t need to use our custom code to reproduce this, REGEDIT shows the behavior as well.</p>
<p>If, from a 64-bit server, you open a remote registry connection to 64-bit RMS server, you can see all OpsMgr registry keys:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image002" src="http://www.muscetta.com/wp-content/uploads/clip_image002.jpg" border="0" alt="clip_image002" width="918" height="268" /></p>
<p>If, anyhow, from a 32-bit server, you open a remote registry connection to 64-bit RMS server, you don’t see ALL – but only SOME &#8211; OpsMgr registry keys:<br />
<img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image004" src="http://www.muscetta.com/wp-content/uploads/clip_image004.jpg" border="0" alt="clip_image004" width="863" height="192" /></p>
<p>So here’s the reason! This is what was happening! How could I not think of this before? It was nothing related to permissions, but to <a href="http://msdn.microsoft.com/en-us/library/aa384232(VS.85).aspx">registry redirection</a>! The issue was happening because the 32 bit machine is using the 32bit registry editor and what it will do when accessing a 64bit machine will be to default to the Wow6432Node location in the registry. There all OpsMgr data won’t be in the WOW64 location on a 64bit machine, only some.</p>
<p>So, just like regedit, the 32bit powershell and the 32bit .Net framework were being redirected to the 32bit-compatibility registry keys… not finding the stuff we needed, whereas a 64bit application could find that. Any 32bit application by default gets redirected to a 32bit-safe registry.</p>
<p>So, after finally UNDERSTANDING what the issue was, I started wondering: ok&#8230; but<strong> how can I access the REAL “HLKM\SOFTWARE\Microsoft” key on a 64bit machine when running this FROM a 32bit machine – WITHOUT being redirected to “HKLM\SOFTWARE\Wow6432Node\Microsoft” ? </strong>What if my application CAN deal just fine with those values and actually NEEDs to access them?</p>
<p>The answer wasn’t as easy as the question. I did a bit of digging on this, and still I have NOT yet found a way to do this with the .Net classes. It seems that in a lot of situations, Powershell or even .Net classes are nice and sweet wrappers on the underlying Windows APIs… but for how sweet and easy they are, they are very often not very complete wrappers – letting you do just about enough for most situations, but not quite everything you would or could with the APi underneath. But I digress, here&#8230;</p>
<p>The good news is that I did manage to get this working, but I had to resort to using dear old WMI StdRegProvider… There are a number of locations on the Internet mentioning the issue of accessing 32bit registry from 64bit machines or vice versa, but all examples I have found were using VBScript. But I needed it in Powershell. Therefore I started with the <a href="http://msdn.microsoft.com/en-us/library/aa393067(VS.85).aspx">VBScript example code that is present here</a>, and I ported it to Powershell.</p>
<p>Handling the WMI COM object from Powershell was slightly less intuitive than in VBScript, and it took me a couple of hours to figure out how to change some stuff, especially this bit that sets the parameters collection:</p>
<blockquote><p>Set Inparams = objStdRegProv.Methods_(&#034;GetStringValue&#034;).Inparameters</p>
<p>Inparams.Hdefkey = HKLM</p>
<p>Inparams.Ssubkeyname = RegKey</p>
<p>Inparams.Svaluename = RegValue</p>
<p>Set Outparams = objStdRegProv.ExecMethod_(&#034;GetStringValue&#034;, Inparams,,objCtx)</p></blockquote>
<p>INTO this:</p>
<blockquote><p>$Inparams = ($objStdRegProv.Methods_ | where {$_.name -eq &#034;GetStringValue&#034;}).InParameters.SpawnInstance_()</p>
<p>($Inparams.Properties_ | where {$_.name -eq &#034;Hdefkey&#034;}).Value = $HKLM</p>
<p>($Inparams.Properties_ | where {$_.name -eq &#034;Ssubkeyname&#034;}).Value = $regkey</p>
<p>($Inparams.Properties_ | where {$_.name -eq &#034;Svaluename&#034;}).Value = $value</p>
<p>$Outparams = $objStdRegProv.ExecMethod_(&#034;GetStringValue&#034;, $Inparams, &#034;&#034;, $objNamedValueSet)</p></blockquote>
<p> </p>
<p>I have only done limited testing at this point and, even if the actual work now requires nearly <strong>15</strong> lines of code to be performed vs. the previous <strong>3 </strong>lines in the .Net implementation, it at least seems to work just fine.</p>
<p>What follows is the complete code of my replacement function, in all its <span style="text-decoration: line-through;">uglyness</span> glory:</p>
<p> </p>
<p><!-- Code --></p>
<div class="dp-highlighter">
<ol class="dp-rb">
<li class="alt"><span>Function GetValueFromRegistryThruWMI([string]</span><span class="variable">$computername</span><span>, </span><span class="variable">$regkey</span><span>, </span><span class="variable">$value</span><span>)   </span></li>
<li><span>{   </span></li>
<li><span>    </span><span class="comment">#constant for the HLKM </span><span>  </span></li>
<li><span>    </span><span class="variable">$HKLM</span><span> = </span><span class="string">&#034;&amp;h80000002&#034;</span><span>  </span></li>
<li><span> </span></li>
<li><span>    #creates an SwbemNamedValueSet object</span></li>
<li><span>    </span><span class="variable">$objNamedValueSet</span><span> = </span><span class="builtin">New-Object</span><span> -COM </span><span class="string">&#034;WbemScripting.SWbemNamedValueSet&#034;</span><span>  </span></li>
<li><span> </span></li>
<li><span>    #adds the actual value that will requests the target to provide 64bit-registry info</span></li>
<li><span>    </span><span class="variable">$objNamedValueSet</span><span>.Add(</span><span class="string">&#034;__ProviderArchitecture&#034;</span><span>, 64) | </span><span class="builtin">Out-Null</span><span>  </span></li>
<li> </li>
<li><span>    #back to all the other usual COM objects for WMI that you have used a zillion times in VBScript</span></li>
<li><span>    </span><span class="variable">$objLocator</span><span> = </span><span class="builtin">New-Object</span><span> -COM </span><span class="string">&#034;Wbemscripting.SWbemLocator&#034;</span><span>  </span></li>
<li><span>    </span><span class="variable">$objServices</span><span> = </span><span class="variable">$objLocator</span><span>.ConnectServer(</span><span class="variable">$computername</span><span>,</span><span class="string">&#034;root\default&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="string">&#034;&#034;</span><span>,</span><span class="variable">$objNamedValueSet</span><span>)   </span></li>
<li><span>    </span><span class="variable">$objStdRegProv</span><span> = </span><span class="variable">$objServices</span><span>.Get(</span><span class="string">&#034;StdRegProv&#034;</span><span>)   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment"># Obtain an InParameters object specific to the method. </span><span>  </span></li>
<li><span>    </span><span class="variable">$Inparams</span><span> = (</span><span class="variable">$objStdRegProv</span><span>.Methods_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;GetStringValue&#034;</span><span>}).InParameters.SpawnInstance_()   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment"># Add the input parameters </span><span>  </span></li>
<li><span>    (</span><span class="variable">$Inparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;Hdefkey&#034;</span><span>}).Value = </span><span class="variable">$HKLM</span><span>  </span></li>
<li><span>    (</span><span class="variable">$Inparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;Ssubkeyname&#034;</span><span>}).Value = </span><span class="variable">$regkey</span><span>  </span></li>
<li><span>    (</span><span class="variable">$Inparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;Svaluename&#034;</span><span>}).Value = </span><span class="variable">$value</span><span>  </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment">#Execute the method </span><span>  </span></li>
<li><span>    </span><span class="variable">$Outparams</span><span> = </span><span class="variable">$objStdRegProv</span><span>.ExecMethod_(</span><span class="string">&#034;GetStringValue&#034;</span><span>, </span><span class="variable">$Inparams</span><span>, </span><span class="string">&#034;&#034;</span><span>, </span><span class="variable">$objNamedValueSet</span><span>)   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="comment">#shows the return value </span><span>  </span></li>
<li><span>    (</span><span class="variable">$Outparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;ReturnValue&#034;</span><span>}).Value   </span></li>
<li><span>  </span></li>
<li class="alt"><span>    </span><span class="keyword">if</span><span> ((</span><span class="variable">$Outparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;ReturnValue&#034;</span><span>}).Value -eq 0)   </span></li>
<li><span>    {   </span></li>
<li><span>       write-host </span><span class="string">&#034;it worked&#034;</span><span>  </span></li>
<li><span>       </span><span class="variable">$result</span><span> = (</span><span class="variable">$Outparams</span><span>.Properties_ | </span><span class="keyword">where</span><span> {</span><span class="variable">$_</span><span>.name -eq </span><span class="string">&#034;sValue&#034;</span><span>}).Value   </span></li>
<li><span>       write-host </span><span class="string">&#034;Result: $result&#034;</span><span>  </span></li>
<li><span>       </span><span class="keyword">return</span><span> </span><span class="variable">$result</span><span>  </span></li>
<li><span>    }   </span></li>
<li><span>    </span><span class="keyword">else</span><span>  </span></li>
<li><span>    {   </span></li>
<li><span>        write-host </span><span class="string">&#034;nope&#034;</span><span>  </span></li>
<li><span>    }   </span></li>
<li><span>}   </span></li>
</ol>
</div>
<p><span> </span></p>
<p><span>which can be called similarly to the previous one: </span><br />
<strong><span>GetValueFromRegistryThruWMI </span><span class="variable">$RMS</span><span> </span><span class="string">&#034;SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup&#034;</span><span> </span><span class="string">&#034;DatabaseServerName&#034;</span></strong></p>
<p>[Note: you don’t need the double\escape backslashes here, compared to the .Net implementation]</p>
<p>Enjoy your cross-architecture registry access: from 32bit to 64bit &#8211; and back!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/09/10/mistery-of-lost-registry-values/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SCX Evolutions</title>
		<link>http://www.muscetta.com/2009/07/19/scx-evolutions/</link>
		<comments>http://www.muscetta.com/2009/07/19/scx-evolutions/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 10:31:53 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[management pack]]></category>
		<category><![CDATA[openpegasus]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[scx]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=475</guid>
		<description><![CDATA[During the beta of the Cross-Platform extensions and of System Center Operations Manager 2007 R2, the product team had promised to eventually release the SCX Providers&#039;source code. Now that this promise has been mantained, and the SCX providers have been released on Codeplex at http://xplatproviders.codeplex.com/ it should be finally possible to entirely build your own [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>During the beta of the Cross-Platform extensions and of System Center Operations Manager 2007 R2, <a href="http://blogs.msdn.com/scxplat/archive/2008/08/11/opsmgr-2007-cross-platform-extensions-beta-refresh.aspx">the product team had promised to eventually release the SCX Providers&#039;source code</a>.</p>
<p>Now that <a href="http://blogs.msdn.com/cellfish/archive/2009/07/09/system-center-opsmgr-x-plat-providers-source-code-available.aspx">this promise has been mantained</a>, and the SCX providers have been released on Codeplex at <a href="http://xplatproviders.codeplex.com/">http://xplatproviders.codeplex.com/</a> it should be finally possible to entirely build your own unsupported agent package, starting from source code, without having to <a href="http://www.muscetta.com/2009/05/30/installing-the-opsmgr-2007-r2-scx-agent-on-ubuntu/">modify the original package as I have shown earlier on this blog</a>.<br />
Of course this will still be unsupported by Microsoft Product support, but will eventually work just fine!<br />
This is an extraordinary event in my opinion, as it is not a common event that Microsoft releases code as open source, especially when this is part of one of the product it sells. I suspect we will see more of this as we going forward.</p>
<p>Also, at R2 release time, <a href="http://technet.microsoft.com/en-us/library/dd919155.aspx">some official documentation about buildilng Cross-Plaform Management Packs has been published on Technet</a>.</p>
<p>Anyway, I have in the past posted a number of posts on my blog under this tag <a href="http://www.muscetta.com/tag/xplat/">http://www.muscetta.com/tag/xplat/</a> (I will continue to use that tag going forward) which show/describe how I hacked/modified both the existing MPs AND the SCX agent package to let it run on unsupported distributions (and I think they are still useful as they show a number of techniques about how to test, understand and troubleshoot the Xplat agent a bit. In fact, I have first learned how to understand and <a href="http://www.muscetta.com/2008/11/23/centos-discovery-in-opsmgr2007-r2-beta/">modify the RedHat MPs to monitor CentOS</a> and eventually even <a href="http://www.muscetta.com/2009/05/30/installing-the-opsmgr-2007-r2-scx-agent-on-ubuntu/">modified the RPM package to run on Ubuntu</a> (which also works on <a href="http://www.debian.org/releases/lenny/">Debian 5/Lenny</a>), eventually, as you can see because I am now using it to monitor &#8211; from home, across the Internet &#8211; the machine running this blog:</p>
<p><a title="www.muscetta.com Performance in OpsMgr by Daniele Muscetta, on Flickr" href="http://www.flickr.com/photos/dani3l3/3734028273/"><img src="http://farm4.static.flickr.com/3142/3734028273_5a0016c352.jpg" alt="www.muscetta.com Performance in OpsMgr" width="500" height="201" /></a></p>
<p>Or even, with or without OpsMgr 2007 R2, <a href="http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/">you could write your own scripts to interact with those providers, by using your favourite Scripting Language</a>.</p>
<p>After all, those experimentations with Xplat got me a fame of being a &#034;Unix expert at Microsoft&#034; (this expression still makes me laugh), <a href="http://twitter.com/dani3l3/status/1972980193">as I was tweeting here</a>:<br />
<a title="Unix expert at Microsoft by Daniele Muscetta, on Twitter" href="http://twitter.com/dani3l3/status/1972980193"><img src="http://farm4.static.flickr.com/3496/3734827286_076702367c.jpg" alt="Unix expert at Microsoft" width="500" height="381" /></a></p>
<p>But really, I have never hidden my interest for interoperability and <a href="http://old.honeynet.org/scans/scan29/sol/dmuscetta/index.html">the fact that I have been using Linux quite a bit in the past</a>, and still do.</p>
<p>Also, one more related information is that the fine people at Xandros have released their <a href="http://www.bridgeways.ca/products.php">Bridgeways Management Packs</a> and at the same time also started their own blog at <a href="http://blog.xplatxperts.com/">http://blog.xplatxperts.com/</a> where they discuss some troubleshooting techniques for the Xplat agent, <a href="http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/">both similar to what I have been writing about here and also</a> &#8211; of course &#8211; <a href="http://blog.xplatxperts.com/xplat-xperts/2009/07/validating-and-troubleshooting-unixlinux-providers.html">specific to their own providers, that are in their XSM namespace</a>.</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/07/19/scx-evolutions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Using the SCX Agent with WSMan from Powershell v2</title>
		<link>http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/</link>
		<comments>http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 17:47:08 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[Get-WSManInstance]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[scx]]></category>
		<category><![CDATA[Test-WSMan]]></category>
		<category><![CDATA[ws-man]]></category>
		<category><![CDATA[wsman]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=473</guid>
		<description><![CDATA[So Powershell v2 adds a nice bunch of Ws-Man related cmdlets. Let’s see how we can use them to interact with OpenPegasus’s WSMan on a SCX Agent. PS C:\maint&#62; test-wsman -computer virtubuntu.huis.dom -port 1270 -authentication basic -credential (get-credential) -usessl cmdlet Get-Credential at command pipeline position 1 Supply values for the following parameters: Credential But we [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>So Powershell v2 adds <a href="http://blogs.msdn.com/wmi/archive/2009/03/26/wsman-enhancements-in-powershell-2-0.aspx" target="_blank">a nice bunch of Ws-Man related cmdlets</a>. Let’s see how we can use them to interact with OpenPegasus’s WSMan on a SCX Agent.</p>
<p>PS C:\maint&gt; <strong>test-wsman -computer virtubuntu.huis.dom -port 1270 -authentication basic -credential (get-credential) -usessl</strong></p>
<p>cmdlet Get-Credential at command pipeline position 1<br />
Supply values for the following parameters:<br />
Credential</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb22.png" border="0" alt="image" width="323" height="252" /></p>
<p>But we do get this error:</p>
<p><span style="color: #ff0000;">Test-WSMan : The server certificate on the destination computer (virtubuntu.huis.dom:1270) has the following errors:<br />
The SSL certificate could not be checked for revocation. The server used to check for revocation might be unreachable.</span></p>
<p><span style="color: #ff0000;">The SSL certificate is signed by an unknown certificate authority.<br />
At line:1 char:11<br />
+ test-wsman &lt;&lt;&lt;&lt;  -computer virtubuntu.huis.dom -port 1270 -authentication basic -credential (get-credential) -usessl<br />
+ CategoryInfo          : InvalidOperation: (:) [Test-WSMan], InvalidOperationException<br />
+ FullyQualifiedErrorId : WsManError,Microsoft.WSMan.Management.TestWSManCommand</span></p>
<p>The credentials above have to be a unix login. Which we typed correctly. But we still can&#039;t get thru, as the certificate used by the agent is not trusted by our workstation. This seems to be the “usual” issue I first faced when testing SCX with WINRM in beta1. <a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/">At the time I simply dismissed it with the following sentence</a></p>
<blockquote><p>[…] Of course you have to solve some other things such as DNS resolution AND trusting the self-issued certificates that the agent uses, first. Once you have done that, you can run test queries from the Windows box towards the Unix ones by using WinRM. […]</p></blockquote>
<p>and I sincerely thought that it would explain pretty well… but eventually a lot of people got confused by this and did not know what to do, especially for the part that goes about trusting the certificate.  Anyway, <a href="http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/">in the following posts I figured out you could pass the –skipCACheck parameter to WINRM</a>… which solved the issue with having to trust the certificate (which is fine for testing, but I would not use that for automations and scripts running in production… as it might expose your credentials to man-in-the-middle attacks).</p>
<p>So it seems that with the Powershell cmdlets we are back to that issue, as I can’t find a parameter to skip the CA check. Maybe it is there, but with PSv2 not having been released yet, I don&#039;t know everything about it, and the CTP documentation is not yet complete. Therefore, back to trusting the certificate.</p>
<p>Trusting the certificate is actually very simple, but it can be a bit tricky when passing those certs back and forth from unix to windows. So let&#039;s make the process a bit clearer.</p>
<p>All of the SCX-agents certificates are ultimately signed by a key on the Management server that has discovered them, but I don&#039;t currently know where that certificate/key is stored on the management server. Anyway, you can get it from the agent certificate &#8211; as you only really need the public key, not the private signing key.</p>
<p>Use WinSCP or any other utility to copy the certificate off one of the agents.<br />
You can find that in the <strong>/etc/opt/microsoft/scx/ssl</strong> location:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb23.png" border="0" alt="image" width="772" height="219" /></p>
<p>that <strong>scx-host-computername.pem</strong> is your agent certificate.</p>
<p>Copy it to the Management server and change its extension from <strong>.pem</strong> to <strong>.cer</strong>. Now Windows will be happy to show it to you with the usual Certificate interface:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb24.png" border="0" alt="image" width="404" height="472" /></p>
<p>We need to go to the “Certification Path” tab, select the ISSUER certificate (the one called “SCX-Certificate”):</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb25.png" border="0" alt="image" width="813" height="476" /></p>
<p>then go to the “Details” tab, and use the “Copy to File” button to export the certificate.</p>
<p>After you have the certificate in a .CER file, you can add it to the “trusted root certification authorities” store on the computer you are running your powershell tests from.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb26.png" border="0" alt="image" width="792" height="374" /></p>
<p>So after you have trusted it, the same command as above actually works now:</p>
<p>PS C:\maint&gt; <strong>test-wsman -computer virtubuntu.huis.dom -port 1270 -authentication basic -credential (get-credential) -usessl</strong></p>
<p>cmdlet Get-Credential at command pipeline position 1<br />
Supply values for the following parameters:<br />
Credential</p>
<p>wsmid           : http://schemas.dmtf.org/wbem/wsman/identify/1/wsmanidentity.xsd<br />
lang            :<br />
ProtocolVersion : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd<br />
ProductVendor   : Microsoft System Center Cross Platform<br />
ProductVersion  : 1.0.4-248</p>
<p>Ok, we can talk to it! Now we can do something funnier, like actually returning instances and/or calling methods:</p>
<p>PS C:\maint&gt; <strong>Get-WSManInstance -computer virtubuntu.huis.dom -authentication basic -credential (get-credential) -port 1270 -usessl -enumerate http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/SCX_OperatingSystem?__cimnamespace=root/scx</strong></p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb27.png" border="0" alt="image" width="836" height="697" /></p>
<p>This is far from exhaustive, but should get you started on a world of possibilities about automating diagnostics and responses with Powershell v2 towards the OpsMgr 2007 R2 Cross-Platform machines. Enjoy!</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/06/01/using-the-scx-agent-with-wsman-from-powershell-v2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installing the OpsMgr 2007 R2 SCX Agent on Ubuntu</title>
		<link>http://www.muscetta.com/2009/05/30/installing-the-opsmgr-2007-r2-scx-agent-on-ubuntu/</link>
		<comments>http://www.muscetta.com/2009/05/30/installing-the-opsmgr-2007-r2-scx-agent-on-ubuntu/#comments</comments>
		<pubDate>Sat, 30 May 2009 12:19:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[cim]]></category>
		<category><![CDATA[deb]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[openpegasus]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[rpm]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[scx]]></category>
		<category><![CDATA[scxcimcli]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[wsman]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=458</guid>
		<description><![CDATA[You know since the beta1 of Xplat I have been busy with modifying the Redhat management pack and monitor CentOS with OpsMgr. Now, CentOS is a distribution that is pretty similar to RedHat, so the RPM package just runs, and it is only a matter of hacking a modified MP. I never went really further [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>You know <a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/" target="_blank">since the beta1 of Xplat I have been busy with modifying the Redhat management pack and monitor CentOS with OpsMgr</a>. Now, CentOS is a distribution that is pretty similar to RedHat, so the RPM package just runs, and <a href="http://www.muscetta.com/2008/11/23/centos-discovery-in-opsmgr2007-r2-beta/" target="_blank">it is only a matter of hacking a modified MP</a>.</p>
<p>I never went really further in my experiments, mostly due to lack of time… but then yesterday I got a comment to this older post asking about Ubuntu. Of course I know about Ubuntu, and have been using Debian-based distributions for years. I actually even prefer them over RPM-based distributions such as RedHat or SuSE (personal preference). Heck, even this weblog is running on Debian!</p>
<p>Anyway, I never really tried to see if one of the existing RPM packages for RedHat or SuSE could be modified to run on Ubuntu. I will eventually test this on Debian too, but for now I used Ubuntu which tends to have slightly newer packages and libraries, overall. The machine I tested on is a Ubuntu Server 8.04.2. Older/newer versions might slightly differ.</p>
<p>BEWARE THAT ALL THAT FOLLOWS BELOW IS <strong>NOT</strong> SUPPORTED BY MICROSOFT. It is only described here for EXPERIMENTAL (==fun) purpose. DO NOT USE THIS IN A PRODUCTION ENVIRONMENT.</p>
<p>So, you are warned. Now let’s hack it.</p>
<p>The first thing to do is to copy the Redhat agent’s RPM package off your OpsMgr2007 R2 server in the “usual” path “<strong>C:Program FilesSystem Center Operations manager 2007AgentManagementUnixAgents</strong>”. Let’s grab the RHEL5 agent, which is called <strong>scx-1.0.4-248.rhel.5.x86.rpm</strong> in R2 RTM.</p>
<p>First we need to <a href="http://ubuntu.wordpress.com/2005/09/23/installing-using-an-rpm-file/" target="_blank">CONVERT the RPM package to the DEB package format used by Ubuntu, by using the ALIEN package</a>:</p>
<blockquote><p>sudo apt-get update<br />
sudo apt-get install alien<br />
sudo bash<br />
alien -k scx-1.0.4-248.rhel.5.x86.rpm &#8211;scripts<br />
dpkg -i scx_1.0.4-248_i386.deb</p></blockquote>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb15.png" border="0" alt="image" width="628" height="253" /></p>
<p>The converted package will install… but the script execution will fail in a few places – most notably in the generation of the certificate, as it is not able to locate the right openssl libraries, as shown in the screenshot above.</p>
<p>If the libssl.so.6 file cannot be found, you might be missing the “libssl-dev” package, which you can install as follows:</p>
<blockquote><p>apt-get install libssl-dev</p></blockquote>
<p>But even if it is installed, you will find that the files are still missing. This is not really true: actually, the files are there, but on Ubuntu they have a different name than on RedHat, that’s all. You can therefore create hardlinks to the “right” files, so that they are aliased and get found afterwards:</p>
<blockquote><p>cd /usr/lib<br />
ln -s libcrypto.so.0.9.8 libcrypto.so.6<br />
ln -s libssl.so.0.9.8 libssl.so.6</p></blockquote>
<p>So now when installing the package, the certificate generation will work:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb16.png" border="0" alt="image" width="629" height="266" /></p>
<p>You are nearly ready to go. You have to start the service by using the init scripts – the “service” command is RedHat-specific, that will still fail.</p>
<p><strong>/etc/init.d/scx-cimd start</strong> is the “standard” way of starting daemons from init on Unix.</p>
<p>But it still fails, as it seems that the init script provided in the RedHat package is really searching for a file called “functions” which is present on RedHat and on CentOS, which provides re-usable functions for startup scripts to include:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb17.png" border="0" alt="image" width="533" height="78" /></p>
<p>How do you fix this? I just copied the <strong>/etc/init.d/functions</strong> file from a CentOS box to my Ubuntu box.</p>
<p>I copied it via SCP from the CentOS box I have:</p>
<blockquote><p>cd /etc/init.d</p>
<p>scp root@centos.huis.dom:/etc/init.d/functions .</p></blockquote>
<p>You can probably also find and fetch the file from the Internet (both CentOS and RedHat should have accessible repositories with all the files in their distributions, since it is open sourced).</p>
<p>After you have the file in place, the init script will be able to include it, will find the functions it needs, and the daemon/service will now start (even if with minor errors I have not investigated for now, but that don’t seem to be causing troubles):</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb18.png" border="0" alt="image" width="631" height="87" /></p>
<p>and here you can see it is finally running:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb19.png" border="0" alt="image" width="629" height="143" /></p>
<p>So let’s try to issue a few queries <a href="http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/">as shown in a previous posts</a>:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb20.png" border="0" alt="image" width="627" height="630" /></p>
<p>IT WORKS!!!</p>
<p>But… there is a “but”: not all classes actually return instances and values just yet. Most notably the “<strong>SCX_OperatingSystem</strong>” class does not seem to return anything right awy. That is a very important class, because is the one we would use to first discover the Operating System object in the Management Packs. So we need to fix it. The reason why the class does not return anything, is that the SCX provider is looking into the <strong>/etc/redhat-release</strong> file to return what OS version/distribution the machine is running. And the file is obviously not there on Ubuntu.</p>
<p>On all Linuxes there is a similar file, called <strong>/etc/issue</strong>&#8230; which again, we can copy with the other name and trick the provider into working:</p>
<blockquote><p>cd /etc</p>
<p>cp issue redhat-release</p></blockquote>
<p>And NOW, the <strong>SCX_OperatingSystem</strong> Class also returns an instance:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb21.png" border="0" alt="image" width="635" height="407" /></p>
<p>The next step would be “cooking” an MP to discover Ubuntu. More on this on a later post (maybe). I did not test all classes and their implementation… you can try to poke at them by following <a href="http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/">the instructions and commands on my previous post here</a>. But this should get you started.</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/05/30/installing-the-opsmgr-2007-r2-scx-agent-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Get-WmiCustom (aka: Get-WMIObject with timeout!)</title>
		<link>http://www.muscetta.com/2009/05/27/get-wmicustom/</link>
		<comments>http://www.muscetta.com/2009/05/27/get-wmicustom/#comments</comments>
		<pubDate>Wed, 27 May 2009 18:23:07 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[timeout]]></category>
		<category><![CDATA[WMI]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=443</guid>
		<description><![CDATA[I make heavy use of WMI. But when using it to gather information from customer’s machines for assessments, I sometimes find the occasional broken WMI repository. There are a number of ways in which WMI can become corrupted and return weird results. Most of the times you would just get errors, such as “Class not [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I make heavy use of WMI.</p>
<p>But when using it to gather information from customer’s machines for assessments, I sometimes find the occasional broken WMI repository. There are a number of ways in which WMI can become corrupted and return weird results. Most of the times you would just get errors, such as “Class not registered” or “provider load failure”. I can handle those errors from within scripts.</p>
<p>But there are some, more subtle &#8211; and annoying – ways in which the WMI repository can get corrupted. the situations I am talking about are the ones when WMI will accept your query… will say it is executing it… but it will never actually return any error, and just stay stuck performing your query forever. Until your client application decides to time out. Which in some cases does not happen.</p>
<p>Now that was my issue – when my assessment script (which was using the handy Powershell <a href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/get-wmiobject.mspx">Get-WmiObject cmdlet</a>) would hit one of those machines… the whole script would hang forever and never finish its job. Ok, sure, the solution to this would be actually FIXING the WMI repository and then try again. But remember I am talking of an assessment: if the information I am getting is just one piece of a bigger puzzle, and I don’t necessarily care about it and can continue without that information – I want to be able to do it, to skip that info, maybe the whole section, report an error saying I am not able to get that information, and continue to get the remaining info. I can still fix the issue on the machine afterward AND then run the assessment script again, but in the first place I just want to get a picture of how the system looks like. With the good and with the bad things. Especially, I do want to take that whole picture – not just a piece of it.</p>
<p>Unfortunately, the <a href="http://www.microsoft.com/technet/scriptcenter/topics/msh/cmdlets/get-wmiobject.mspx">Get-WmiObject cmdlet</a> does not let you specify a timeout. Therefore I cooked my own function which has a compatible behaviour to that of Get-WmiObject, but with an added “-timeout” parameter which can be set. I dubbed it “Get-WmiCustom”</p>
<p><strong>Function Get-WmiCustom([string]$computername,[string]$namespace,[string]$class,[int]$timeout=15)<br />
{<br />
$ConnectionOptions = new-object System.Management.ConnectionOptions<br />
$EnumerationOptions = new-object System.Management.EnumerationOptions </strong></p>
<p><strong> $timeoutseconds = new-timespan -seconds $timeout<br />
$EnumerationOptions.set_timeout($timeoutseconds) </strong></p>
<p><strong> $assembledpath = &#034;\\&#034; + $computername + &#034;\&#034; + $namespace<br />
#write-host $assembledpath -foregroundcolor yellow </strong></p>
<p><strong> $Scope = new-object System.Management.ManagementScope $assembledpath, $ConnectionOptions<br />
$Scope.Connect() </strong></p>
<p><strong> $querystring = &#034;SELECT * FROM &#034; + $class<br />
#write-host $querystring </strong></p>
<p><strong> $query = new-object System.Management.ObjectQuery $querystring<br />
$searcher = new-object System.Management.ManagementObjectSearcher<br />
$searcher.set_options($EnumerationOptions)<br />
$searcher.Query = $querystring<br />
$searcher.Scope = $Scope </strong></p>
<p><strong> trap { $_ } $result = $searcher.get() </strong></p>
<p><strong> return $result<br />
}</strong></p>
<p>You can call it as follows, which is similar to how you would call get-WmiObject</p>
<p><strong>get-wmicustom -class Win32_Service -namespace &#034;root\cimv2&#034; -computername server1.domain.dom</strong></p>
<p>or, of course, specifying the timeout (in seconds):</p>
<p><strong>get-wmicustom -class Win32_Service -namespace &#034;root\cimv2&#034; -computername server1.domain.dom –timeout 1</strong></p>
<p>and obviously, since the function returns objects just like the original cmdlet, it is also possible to pipe them to other commands:</p>
<p><strong>get-wmicustom -class Win32_Service -namespace &#034;root\cimv2&#034; -computername server1.domain.dom –timeout 1 | Format-Table</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/05/27/get-wmicustom/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Burning Audio CDs with Media Player on Windows 2008 requires elevation</title>
		<link>http://www.muscetta.com/2009/05/03/burning-audio-cds-with-media-player-on-windows-2008-requires-elevation/</link>
		<comments>http://www.muscetta.com/2009/05/03/burning-audio-cds-with-media-player-on-windows-2008-requires-elevation/#comments</comments>
		<pubDate>Sun, 03 May 2009 07:26:03 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[2008]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[CDA]]></category>
		<category><![CDATA[connect a burner and restart the player]]></category>
		<category><![CDATA[elevated]]></category>
		<category><![CDATA[elevation]]></category>
		<category><![CDATA[media player]]></category>
		<category><![CDATA[run as administrator]]></category>
		<category><![CDATA[UAC]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=440</guid>
		<description><![CDATA[Yesterday, when trying to burn an Audio CD (to listen to music in my car) starting from MP3 files by using Windows Media Player 11, I kept getting this message &#034;connect a burner and restart the player&#034; and the “Start Burn” button was greyed out, like if the program was not able to seeing that [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Yesterday, when trying to burn an Audio CD (to listen to music in my car) starting from MP3 files by using <a href="http://www.microsoft.com/windows/windowsmedia/download" target="_blank">Windows Media Player 11</a>, I kept getting this message &#034;connect a burner and restart the player&#034; and the “Start Burn” button was greyed out, like if the program was not able to seeing that my CD/DVD Burner is actually capable of writing CDs:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image29.png" border="0" alt="image" width="299" height="150" /></p>
<p>But I knew the DVD/CD burner was connected and working, because I had used it the very same day (with another program) to burn an .ISO image, and it worked from there!</p>
<p><a href="http://www.google.com/search?hl=en&amp;q=%22connect+a+burner+and+restart+the+player%22&amp;btnG=Search" target="_blank">I searched all over the place for this error message</a>, and there are many posts in forums with this message, which suggest you to do the strangest things, from changing your computer, to deleting important pieces of the registry, to reinstall the whole system… most of them are bullshit.</p>
<p>I went to my wife’s PC to test…with her PC it worked. It looked mostly the same: she’s running Vista, not 2008 (but it really is the same kernel, isn’t it?), she has exactly the same DVD burner installed as I do, the same motherboard, both machines and OS’s are 64bit, we both have installed Internet Explorer 8 (and keep it with “protected mode” turned ON), we both have Media Player 11, we both keep UAC enabled…</p>
<p>But then in the end I tried using elevation:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image30.png" border="0" alt="image" width="262" height="385" /></p>
<p>And here we go, it worked:</p>
<p><a href="http://www.muscetta.com/wp-content/uploads/image31.png" rel="lightbox[440]"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image-thumb14.png" border="0" alt="image" width="293" height="154" /></a></p>
<p>When running the process as administrator, Windows Media Player is able to query the hardware to determine if we have a capable device on Windows Server 2008. It remains a mystery to me at this point why this works on my wife’s Vista machine without elevation, though&#8230;</p>
<p>It sure is not a problem to do this operation “as administrator” when needed – but it just took me a minute to figure it out, for some reason.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/05/03/burning-audio-cds-with-media-player-on-windows-2008-requires-elevation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross Platform in OpsMgr 2007 R2 Release Candidate</title>
		<link>http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/</link>
		<comments>http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 21:55:46 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[cim]]></category>
		<category><![CDATA[openpegasus]]></category>
		<category><![CDATA[openwsman]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[Red Hat]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[scx]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=431</guid>
		<description><![CDATA[You have heard it all over the place, System Center Operations Manager 2007 R2 has reached the Release Candidate milestone and the RC bits have been made available on connect.microsoft.com. As it is becoming a tradition for me with each new release, I want to take a look at the Unix Monitoring stuff like I [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>You have heard it all over the place, <a href="http://blogs.technet.com/momteam/archive/2009/03/26/system-center-operations-manager-2007-r2-release-candidate-ready-for-download.aspx" target="_blank">System Center Operations Manager 2007 R2 has reached the Release Candidate milestone and the RC bits have been made available on connect.microsoft.com</a>.</p>
<p>As it is becoming a tradition for me with each new release, I want to take a look at the Unix Monitoring stuff like I did since <a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/" target="_blank">beta1 of Xplat</a>, passing thru <a href="http://www.muscetta.com/2008/11/23/centos-discovery-in-opsmgr2007-r2-beta/" target="_blank">beta2</a>. I am an integration freak and I have always insisted that interoperability is key. I will leave the most obvious “release notes” kind of things out of here, such as saying that there are now agents for the x64 version of linux distro’s, and so on…. you can read this stuff in the release notes already and in a zillion of other places.</p>
<p>Let’s instead look at my first impression ( = I am amazed: this product is really getting awesome) and let’s do a bit of digging, mostly to note what changed since my previous posts on Xplat (which, by the way, is the MOST visited post on this blog I ever published) – of course there is A LOT more that has changed under the hood… but those are code changes, improvements, polishing of the product itself… while that would be interesting from a code perspective, here I am more interested in what the final user (the System Administrator) will ultimately interact with directly, and what he might need to troubleshoot and understand how the pieces fit together to realize Unix Monitoring in OpsMgr.</p>
<p>After having hacked the RedHat MP to work on my CentOS box (as usual), I started to take a look at what is installed on the Linux box. Here are the new services:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ps -Af | grep scx" src="http://www.muscetta.com/wp-content/uploads/image21.png" border="0" alt="ps -Af | grep scx" width="993" height="89" /></p>
<p>You will notice the daemons have changed names and get launched with new parameters.</p>
<p>Of course when you see who uses port 1270 everything becomes clearer:</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="netstat -anp | grep 1270" src="http://www.muscetta.com/wp-content/uploads/image22.png" border="0" alt="netstat -anp | grep 1270" width="862" height="75" /></p>
<p>Therefore I can place the two new names and understand that SCXCIMSERVER is the WSMAN implementation, while SCXCIMPROVAGT is the CIM/WBEM implementation.</p>
<p>There is one more difference at the “service” (or “daemon”) level: the fact that there is only ONE init script now: <strong>/etc/init.d/scx-cimd</strong></p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="/etc/init.d/scx-cimd" src="http://www.muscetta.com/wp-content/uploads/image23.png" border="0" alt="/etc/init.d/scx-cimd" width="434" height="70" /></p>
<p>So basically the SCX “Agent” will start and stop as a single thing, even if it is composed of multiple executables that will spawn various processes.</p>
<p>Another difference: if we look in “familiar” locations like <strong>/etc/opt/microsoft/scx/bin/tools/</strong> we see that a number of configuration files is either empty (0 bytes) or missing (<a href="http://contoso.se/blog/?p=276" target="_blank">like the one described on Ander’s blog to enable verbose logging of WSMan requests</a>), when compared to earlier versions:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="/etc/opt/microsoft/scx/conf" src="http://www.muscetta.com/wp-content/uploads/image24.png" border="0" alt="/etc/opt/microsoft/scx/conf" width="550" height="206" /></p>
<p>But that is because I have been told we now have a nice new tool called scxadmin under <strong>/opt/microsoft/scx/bin/tools/</strong> , which will let you configure those things:</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="/opt/microsoft/scx/bin/tools/scxadmin" src="http://www.muscetta.com/wp-content/uploads/image25.png" border="0" alt="/opt/microsoft/scx/bin/tools/scxadmin" width="879" height="402" /></p>
<p>Therefore you would enable VERBOSE logging for all components by issuing the command</p>
<blockquote><p><strong>./scxadmin -log-set all verbose</strong></p></blockquote>
<p>and you will bring it back to a less noisy setting of logging only errors with</p>
<blockquote><p><strong>./scxadmin -log-set all errors</strong></p></blockquote>
<p>the logs will be written under <strong>/var/opt/microsoft/scx/log</strong> just like they did before.</p>
<p>Other than this, a lot of the troubleshooting techniques I showed <a href="http://www.muscetta.com/2008/11/23/centos-discovery-in-opsmgr2007-r2-beta/" target="_blank">in one of my previous posts</a>, like how to query CIM classes directly or thru WSMAN remotely by using winrm – they should really stay the same. I will mention them again here for reference.</p>
<p>SCXCIMCLI is a useful and simple tool used to query CIM directly. You can roughly compare it to <a href="http://technet.microsoft.com/en-us/library/cc180684.aspx" target="_blank">wbemtest.exe</a><strong></strong> in the WIndows world (other than not having a UI). This utility can also be found in <strong>/opt/microsoft/scx/bin/tools</strong></p>
<p>A couple of examples of the most common/useful things you would do with scxcimcli:</p>
<p>1) Enumerate all Classes whose name contains “SCX_” in the <strong>root/scx</strong> namespace (the classes our Management packs use):</p>
<blockquote><p><strong>./scxcimcli nc -n root/scx -di |grep SCX_ | sort</strong></p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="./scxcimcli nc -n root/scx -di |grep SCX | sort" src="http://www.muscetta.com/wp-content/uploads/image26.png" border="0" alt="./scxcimcli nc -n root/scx -di |grep SCX | sort" width="582" height="350" /></p></blockquote>
<p>2) Execute a Query</p>
<blockquote><p><strong>./scxcimcli xq &#034;select * from SCX_OperatingSystem&#034; -n root/scx</strong></p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="./scxcimcli xq &quot;select * from SCX_OperatingSystem&quot; -n root/scx" src="http://www.muscetta.com/wp-content/uploads/image27.png" border="0" alt="./scxcimcli xq &quot;select * from SCX_OperatingSystem&quot; -n root/scx" width="701" height="425" /></p></blockquote>
<p>Also another thing that you might want to test when troubleshooting discoveries, is running the same queries through WS-Man (possibly from the same Management Server that will or should be managing that unix box). I already showed this in the past, it is the following command:</p>
<p><strong>winrm enumerate </strong><strong><span style="color: #800000;">http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/SCX_OperatingSystem?__cimnamespace=root/scx</span></strong><strong> -username:root -password:password -r:</strong><strong>https://linuxbox.mydomain.com:1270/wsman</strong><strong> -auth:basic –skipCACheck</strong></p>
<p>but if you launch it that way it will now return an error like the following (or at least it did in my test lab):</p>
<table border="1" cellspacing="0" cellpadding="2" width="761">
<tbody>
<tr>
<td width="759" valign="top">Fault<br />
Code<br />
Value = SOAP-ENV:Sender<br />
Subcode<br />
Value = wsman:EncodingLimit<br />
Reason<br />
Text = UTF-16 is not supported; Please use UTF-8<br />
Detail<br />
FaultDetail = <a href="http://schemas.dmtf.org/wbem/wsman/1/wsman/faultDetail/CharacterSet">http://schemas.dmtf.org/wbem/wsman/1/wsman/faultDetail/CharacterSet</a></p>
<p>Error number:  -2144108468 0x8033804C<br />
The WS-Management service does not support the character set used in the request<br />
. Change the request to use UTF-8 or UTF-16.</td>
</tr>
</tbody>
</table>
<p>the error message is pretty self explanatory: you need to specify the UTF-8 Character set. You can do it by adding the “-encoding” qualifier:</p>
<p><strong>winrm enumerate </strong><strong>http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/SCX_OperatingSystem?__cimnamespace=root/scx</strong><strong> -username:root -password:password -r:</strong><strong>https://linuxbox.mydomain.com:1270/wsman</strong><strong> -auth:basic –skipCACheck <span style="color: #ff0000;">–encoding:UTF-8</span></strong></p>
<p>Hope the above is useful to figure out the differences between the earlier beta releases of the System Center CrossPlatform extensions and the version built in OpsMgr 2007 R2 Release Candidate.</p>
<p>There are obviously a million of other things in R2 worth writing about (either related to the Unix monitoring or to everything else) and I am sure posts will start to appear on the many, more active, blogs out there (they have already started appearing, actually). I have not had time to dig further, but will likely do so AFTER Easter – as the next couple of weeks I will be travelling, working some of the time (but without my test environment and good connectivity) AND visiting relatives the rest of the time.</p>
<p>One last thing I noticed about the Unix/Cross Platform Management Packs in R2 Release Candidate… their current “release date” exposed by the <a href="http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/" target="_blank">MP Catalog Web Service</a> is the <strong>20th of March</strong>…</p>
<p><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" src="http://www.muscetta.com/wp-content/uploads/image28.png" border="0" alt="image" width="550" height="190" /></p>
<p>…which happens to be <a href="http://www.flickr.com/photos/dani3l3/3369447511/" target="_blank">my Birthday</a> &#8211; therefore they must be a present for me! <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2009/03/27/cross-platform-in-opsmgr-2007-r2-release-candidate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Early Adoptions, Health Checks and New Year Rants.</title>
		<link>http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/</link>
		<comments>http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 15:10:26 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[HC]]></category>
		<category><![CDATA[Health Check]]></category>
		<category><![CDATA[HealthCheck]]></category>
		<category><![CDATA[Premier]]></category>
		<category><![CDATA[Premier Field Engineer]]></category>
		<category><![CDATA[RAP]]></category>
		<category><![CDATA[Risk Assessment Program]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[Support]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=390</guid>
		<description><![CDATA[Two days ago I read the following Tweet by Hugh MacLeod: &#034;[...] Early Adopter Problem: How to differentiate from the bandwagon, once the bandwagon starts moving faster than you are [...]&#034; That makes me think of early adoption of a few technologies I have been working with, and how the community around those evolved. For [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/dani3l3/3150411409/"><img src="http://farm4.static.flickr.com/3258/3150411409_8ce3a8ea75.jpg" alt="Generations" width="500" height="333" /></a></p>
<p>Two days ago I read <a href="http://twitter.com/gapingvoid/status/1082816395">the following Tweet by Hugh MacLeod</a>:</p>
<blockquote><p>&#034;[...] Early Adopter Problem: How to differentiate from the bandwagon, once the bandwagon starts moving faster than you are [...]&#034;</p></blockquote>
<p>That makes me think of early adoption of a few technologies I have been working with, and how the community around those evolved. For example:</p>
<p><strong>Operations Manager</strong>&#8230; early adoption meant that I have been working with it since the beta, had posted <a href="http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/">one of the earliest posts about how to use a script in a Unit Monitor back in may 2007</a> (the product was released in April 2007 and there was NO documentation back then, so we had to really try to figure out everything&#8230;), but <a href="http://contoso.se/blog/?p=305">someone seems to think it is worth repeating the very same lesson in November 2008</a>, with not a lot of changes, as <a href="http://twitter.com/dani3l3/status/1030704645">I wrote here</a>. I don&#039;t mean being rude to Anders&#8230; repeating things will surely help the late adopters finding the information they need, of course.</p>
<p>Also, I started playing early with <strong>Powershell</strong>. <a href="http://www.muscetta.com/2006/11/24/out-blog/">I posted my first (and only) cmdlet</a> back in 2006. It was not a lot more than a test for myself to learn how to write one, but that&#039;s just to say that I started playing early with it. I have been using it <a href="http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/">to automate tasks</a> for example.</p>
<p>Going back to the quote above, everyone gets on the bandwagon posting <a href="http://www.systemcenterforum.org/news/advanced-example-using-powershell-and-the-opsmgr-sdk-creating-and-updating-groups/">examples and articles</a>. I had been asked a few times about writing articles on OpsMgr and Powershell usage (for example by <a href="http://www.powershell.it">www.powershell.it</a>) but I declined, as I was too busy using this knowledge to do stuff for work (where “work” is defined as in “work that pays your mortgage”), rather than seeking personal prestige through articles and blogs. Anyway, that kind of articles are appearing now all over the Internet and the blogosphere now. The above examples made me think of early adoption, and the bandwagon that follows later on… but even as an early adopter, I was never very noisy or visible.</p>
<p>Now, going back to what I do for work, (which <a href="http://blogs.msdn.com/dmuscett/archive/2005/09/02/459914.aspx">I mentioned here</a> and <a href="http://www.muscetta.com/2007/12/27/simply-works/">here in the past</a>), I work in the <a href="https://www.microsoft.com/emea/careers/technicalJobs/PremierFieldEngineer.mspx">Premier Field Engineering</a> organization of Microsoft Services, which provides Premier services to customers. <a href="http://www.microsoft.com/services/microsoftservices/srv_premier.mspx">Microsoft Premier customer have a wide range of Premier agreement features and components</a> that they can use to support their people, improve their processes, and improve the productive use of the Microsoft technology they have purchased. Some of these services we provide are known to the world as “<a href="http://www.google.com/search?hl=en&amp;q=health+check+site%3Amicrosoft.com&amp;btnG=Search">Health Checks</a>”, some as “<a href="http://www.google.com/search?hl=en&amp;q=risk+assessment+program+site%3Amicrosoft.com&amp;btnG=Search">Risk Assessment Programs</a>” (or, shortly, RAPs). These are basically services where one of our technology experts goes on the customer site and there he uses a custom, private Microsoft tool to gather a huge amount of data from the product we mean to look at (be it SQL, Exchange, AD or anything else….). The Health Check or RAP tool collects the data and outputs a draft of the report that will be delivered to the customer later on, with all the right sections and chapters. This is done so that every report of the same kind will look consistent, even if the engagement is performed by a different engineer in a different part of the world. The engineer will of course analyze the collected data and write recommendations about what is configured properly and/or about what could or should be changed and/or improved in the implementation to make it adhere to Best Practices. To make sure only the right people actually go onsite to do this job we have a strict internal accreditation process that must be followed; only accredited resources that know the product well enough and know exactly how to interpret the data that the tool collects are allowed to use it and to deliver the engagement, and present/write the findings to the customer.</p>
<p>So why am I telling you this here, and how have I been using my early knowledge of OpsMgr and Powershell for ?</p>
<p>I have used that to write the Operations Manager Health Check, of course!</p>
<p>We had a <a href="http://download.microsoft.com/download/f/9/7/f974f0df-66fd-47e9-a1ac-c6fdbe3c723a/Operations_Manager_Server_Health_Check.pdf">MOM 2005 Health Check </a>already, but since the technology has changed so much, from MOM to OpsMgr, we had to write a completely new tool. Jeff  (the original MOM2005 author, who does not have a blog that I can link to) and me are the main coders of this tool… and the tool itself is A POWERSHELL script. A longish one, of course (7000 lines, more or less), but nothing more than a Powershell script, at the end of the day. There are a few more colleagues that helped shape the features and tested the tool, including <a href="http://blogs.technet.com/kevinholman/">Kevin Holman</a>. Some of the <a href="http://blogs.technet.com/kevinholman/archive/2007/10/18/useful-operations-manager-2007-sql-queries.aspx">database queries on Kevin’s blog</a> are in fact what we use to extract some of the data (beware that some of those queries have recently been updated, in case you saved them and using your local copy!), while some other information are using internal and/or custom queries. Some other times we use OpsMgr cmdlets or go to the SDK service, but a lot of times we query the database directly (we really should use the SDK all the times, but for certain stuff direct database access is way faster). It took most of the past year to write it, test it, troubleshoot it, fix it, and deliver the first engagements as “beta” to some customers to help iron out the process&#8230; and now the delivery is available! If a year seems like a long time, you have to consider this is all work that gets done next to what we all have to normally do with customers, not replacing it (i.e. I am not free to sit on my butt all day and just write the tool&#8230; <a href="http://download.microsoft.com/download/e/9/d/e9df53f8-3069-4fe4-bdbd-0d7abd86488a/PremFieldEnginr_161107b.pdf">I still have to deliver services to customers day in day out, in the meantime</a>).</p>
<p>Occasionally, during this past calendar year, that is approaching its end, I have been willing and have found some extra time to disclose some bits and pieces, techniques and prototypes of how to use Powershell and OpsMgr together, <a href="http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/">such as innovative ways to use Powershell in OpsMgr against beta features</a>, but in general most of my early adopter’s investment went into the private tool for this engagement, and that is one of the reasons I couldn’t blog or write much about it, being it Microsoft Intellectual Property.</p>
<p>But it is also true that <a href="http://twitter.com/dani3l3/status/997620250">I did not care to write other stuff when I considered it too easy or it could be found in the documentation</a>. I like writing of ideas, thoughts, rants OR things that I discover and that are not well documented at the time I study them… so when I figure out things I might like leaving a trail for some to follow. But I am not here to spoon feed people like some in the bandwagon are doing. Now the bandwagon is busy blogging and writing continuously about some aspect of OpsMgr (known or unknown, documented or not), and the answer to <a href="http://twitter.com/gapingvoid/status/1082816395">the original question of Hugh</a> is, in my opinion, that it does not really matter what the bandwagon is doing right now. I was never here to do the same thing. I think <strong>that</strong> is my differentiator. I am not saying that what a bunch of colleagues and enthusiasts is doing is not useful: blogging and writing about various things they experiment with is interesting and it will be useful to people. But blogs are useful until a certain limit. I think that blogs are best suited for conversations and thoughts (rather than for &#034;howto&#039;s&#034;), and what I would love to see instead is: less marketing hype when new versions are announced and more real, official documentation.</p>
<p>But I think I should stop caring about what the bandwagon is doing, because that&#039;s just another ego trip at the end of the day. What I should more sensibly do, would be listening to <a href="http://freewillastrology.com/horoscopes/pisces.html">my horoscope</a> instead:</p>
<blockquote><p>[…] &#034;How do you slay the dragon?&#034; journalist Bill Moyers asked mythologist Joseph Campbell in an interview. By &#034;dragon,&#034; he was referring to the dangerous beast that symbolizes the most unripe and uncontrollable part of each of our lives. In reply to Moyers, Campbell didn&#039;t suggest that you become a master warrior, nor did he recommend that you cultivate high levels of sleek, savage anger. &#034;Follow your bliss,&#034; he said simply. Personally, I don&#039;t know if that&#039;s enough to slay the dragon &#8212; I&#039;m inclined to believe that you also have to take some defensive measures &#8212; but it&#039;s definitely worth an extended experiment. Would you consider trying that in 2009? […]</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/12/30/early-adoptions-health-checks-and-new-year-rants/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programmatically Check for Management Pack updates in OpsMgr 2007 R2</title>
		<link>http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/</link>
		<comments>http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/#comments</comments>
		<pubDate>Sat, 29 Nov 2008 22:10:21 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/</guid>
		<description><![CDATA[One of the cool new features of System Center Operations Manager 2007 R2 is the possibility to check and update Management Packs from the catalog on the Internet directly from the Operators Console: Even if the backend for this feature is not yet documented, I was extremely curious to see how this had actually been [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>One of the cool new features of <a href="http://technet.microsoft.com/en-us/opsmgr/dd239186.aspx">System Center Operations Manager 2007 R2</a> is the possibility to check and update <a href="http://www.microsoft.com/technet/prodtechnol/scp/opsmgr07.aspx">Management Packs from the catalog on the Internet</a> directly from the Operators Console:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb12.png" border="0" alt="Select Management Packs from Catalog" width="640" height="406" /></p>
<p>Even if the backend for this feature is not yet documented, I was extremely curious to see how this had actually been implemented. Especially since it took a while to have this feature available for OpsMgr, I had the suspicion that it could not be as simple as one downloadable XML file, like <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A24CEA3A-1920-4B18-8CF2-8BF78C94C917&amp;displaylang=en">the old MOM2005&#039;s MPNotifier</a> had been using in the past.</p>
<p>Therefore I observed the console&#039;s traffic through the lens of my proxy, and got my answer:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image18.png" border="0" alt="ISA Server Log" width="813" height="58" /></p>
<p>So that was it: a .Net Web Service.</p>
<p>I tried to ask the web service itself for discovery information, but failed:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image19.png" border="0" alt="WSDL" width="653" height="145" /></p>
<p>Since there is no WSDL available, but I badly wanted to interact with it, I had to figure out: what kind of requests would be allowed to it, how should they be written, what methods could they call and what parameters should I pass in the call. In order to get started on this, I thought I could just observe its network traffic. And so I did&#8230; I fired up <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=f4db40af-1e08-4a21-a26b-ec2f4dc4190d&amp;displaylang=en">Network Monitor</a> and captured the traffic:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/clip-image0025-thumb.jpg" border="0" alt="Microsoft Network Monitor 3.2" width="640" height="335" /></p>
<p><a href="http://blogs.technet.com/netmon/">Microsoft Network Monitor</a> is beautiful and useful for this kind of stuff, as it lets you easily identify which application a given stream of traffic belongs to, just like in the picture above. After I had isolated just the traffic from the Operations Console, I then saved those captures packets in CAP format and opened it again in <a href="http://www.wireshark.org/">Wireshark</a> for a different kind of analysis &#8211; &#034;Follow TCP Stream&#034;:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/clip-image0027-thumb.jpg" border="0" alt="Wireshark: Follow TCP Stream" width="640" height="450" /></p>
<p>This showed me the reassembled conversation, and what kind of request was actually done to the Web Service. That was the information I needed.</p>
<p>Ready to rock at this point, I came up with <a href="http://www.muscetta.org/Check-MPUpdates.zip"><strong>this Powershell script</strong></a> (to be run in OpsMgr Command Shell) that will:</p>
<p>1) connect to the web service and retrieve the complete MP list for R2 (this part is also useful on its own, as it shows how to interact with a SOAP web service in <a href="http://www.microsoft.com/powershell">Powershell</a>, invoking a method of the web service by issuing a specially crafted POST request. To give due credit, for this part I first looked at <a href="http://users.skynet.be/pascalbotte/rcx-ws-doc/perlpost.htm">this PERL code</a>, which I then adapted and ported to Powershell);</p>
<p>2) loop through the results of the &#034;Get-ManagementPack&#034; opsmgr cmdlet and compare each MP found in the Management Group with those pulled from the catalog;</p>
<p>3) display a table of all imported MPs with both the version imported in your Management Group AND the version available on the catalog:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb13.png" border="0" alt="Script output in OpsMgr Command Shell" width="596" height="480" /></p>
<p>Remember that this is just SAMPLE code, it is not meant to be used in production environment and it is worth mentioning again that OpsMgr2007 R2 this is BETA software at the time of writing, therefore this functionality (and its implementation) might change at any time, and the script will break. Also, at present, the MP Catalog web service still returns slightly older MP versions and it is not yet kept in sync and updated with MP Releases, but it will be ready and with complete/updated content by the time R2 gets released.</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/11/29/programmatically-check-for-management-pack-updates-in-opsmgr-2007-r2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>CentOS discovery in OpsMgr2007 R2 beta</title>
		<link>http://www.muscetta.com/2008/11/23/centos-discovery-in-opsmgr2007-r2-beta/</link>
		<comments>http://www.muscetta.com/2008/11/23/centos-discovery-in-opsmgr2007-r2-beta/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 14:51:58 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[management pack]]></category>
		<category><![CDATA[openpegasus]]></category>
		<category><![CDATA[openwsman]]></category>
		<category><![CDATA[R2]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[unsupported]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=361</guid>
		<description><![CDATA[Here we go again. Now that the OpsMgr2007 R2 beta is out, with an improved and revamped version of the System Center Cross Platform Extensions, I faced the issue of how to upgrade my test lab. I have to say that OpsMgr2007 R2 beta release notes explain the known issues, and I had no trouble [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Here we go again. Now that the <a href="http://technet.microsoft.com/en-us/opsmgr/dd239186.aspx" target="_blank">OpsMgr2007 R2 beta is out</a>, with an improved and revamped version of the <a href="http://blogs.msdn.com/scxplat/archive/2008/04/29/announcing-system-center-operations-manager-2007-cross-platform-extensions-and-connectors.aspx" target="_blank">System Center Cross Platform Extensions</a>, I faced the issue of how to upgrade my test lab.</p>
<p>I have to say that OpsMgr2007 R2 beta release notes explain the known issues, and I had no trouble whatsoever upgrading the windows part. It just took its time (I am running virtual machines in my test lab, that don&#039;t have the best performance), but it went smoothly and without a glitch. In a couple of hours I had everything upgraded: databases, RMS, reporting, agents, gateway. All right then. The new purple icons in System Center look cute, and <a href="http://contoso.se/blog/?p=304" target="_blank">the new UI has some great stuff</a>, such as a long-awaited way to update your management packs directly from the Internet, better display of Overrides (kind of what we used to rely on <a href="http://blogs.msdn.com/boris_yanushpolsky/archive/2007/08/09/override-explorer-v3-3.aspx" target="_blank">Override Explorer</a> for)&#8230; and  A LOT more new stuff that I won&#039;t be wasting my Sunday writing about since everybody else has already done it two days ago:</p>
<p><a href="http://twitter.com/opsmgr" target="_blank"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image4.png" border="0" alt="opsmgr aggregated feed on Twitter" width="630" height="480" /></a></p>
<p>Therefore let&#039;s get back to my upgrade, which is a lot more interesting (to me) than the marketing tam-tam <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>As part of the upgrade to R2, I had to first uninstall the Xplat beta refresh bits, which I had installed, including all Unix Management Packs. Including my <a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/" target="_blank">CentOS Management Pack</a> I had <a href="http://blogs.msdn.com/scxplat/archive/2008/05/06/another-first-experience-with-cpe.aspx" target="_blank">improvised</a>.</p>
<p>So this is the new start page of the integrated Discovery Wizard:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb.png" border="0" alt="Discovery Wizard" width="624" height="480" /></p>
<p>Looks nice and integrates the functionality of discovering and deploying Windows machines, SNMP Devices, and Unix/Linux machines.</p>
<p>Of course, my CentOS machine would not be discovered, and showed up as an unsupported platform. Of course my old Management Pack I had hacked together in XPlat Beta 1 did not work anymore. Therefore, I figured out I had to see what changes were there, and how to make it work again (of course it IS possible &#8211; It is NOT SUPPORTED, but I don&#039;t care, as long as it works).</p>
<p>Since the existing agent could not be discovered, the first step I took was logging on the Linux box, un-install the old agent, and install the new one:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb1.png" border="0" alt="XPlat Agent RPM Install on CentOS" width="617" height="480" /></p>
<p>There I tried to discover again, but of course it still failed.</p>
<p>At that point I started taking a look at the new layout of things on the unix side. Most stuff is located in the same directories where beta1 was installed, and there are a bunch of useful commands under <strong>/opt/microsoft/scx/bin/tools</strong>.<br />
You can check out the <a href="http://www.openpegasus.org/" target="_blank">Open Pegasus</a> version used:</p>
<p>[root@centos tools]# <strong>./scxcimconfig &#8211;version<br />
</strong>Version 2.7.0</p>
<p>Let&#039;s take a look at what SCX classes we have available:</p>
<p><strong>./scxcimcli nc -n root/scx -di |grep SCX | sort</strong></p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb2.png" border="0" alt="./scxcimcli nc -n root/scx -di |grep SCX | sort" width="640" height="439" /></p>
<p>Nice. That&#039;s the stuff we will be querying over WS-Man from the Management Server.</p>
<p>So let&#039;s look at the OS Discovery, and we test it from the OpsMgr 2007 box:</p>
<p><strong>winrm enumerate </strong><strong>http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/SCX_OperatingSystem?__cimnamespace=root/scx</strong><strong> -username:root -password:password -r:</strong><strong>https://centos:1270/wsman</strong><strong> -auth:basic -skipCACheck</strong></p>
<p>it returns results:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb3.png" border="0" alt="OS WS-Man Query" width="610" height="480" /></p>
<p>At first I assumed this worked like in Beta1, therefore I exported RedHat management pack and I made my own version of it, replacing the strings it is expecting to find to discover CentOS instead than Redhat.</p>
<p>While the MP was syntactically correct and would import fine, the Discovery wizard still didn&#039;t work.</p>
<p>I took one more look at the discoveries in the MP, and I found there are two more, targeted to Management Server, which is probably what gets used by the Discovery Wizard to understand what kind of agent kit needs to be deployed.</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb4.png" border="0" alt="MP XML - Discoveries" width="640" height="472" /></p>
<p>So basically this discovery checks for the returned value from the module to determine if the discovered platform is a supported one:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb5.png" border="0" alt="Discovery Settings" width="640" height="467" /></p>
<p>But how does the module get its data?</p>
<p>Look at the layout of the <strong>/AgentManagement/UnixAgents</strong> folder on the Management Server:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb6.png" border="0" alt="/AgentManagement/unixAgents " width="640" height="291" /></p>
<p>That&#039;s it: <strong>GetOSVersion.sh</strong> &#8211; a shell script. A nice, open, clear text, hackable shell script. Let&#039;s take a look at it:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb7.png" border="0" alt="Discovery Script Hack" width="640" height="392" /></p>
<p>So that&#039;s it, and how my modification looks like. What happens during the discovery wizard is that we probably copy the script over SCP to the box, execute it, look at a number of things, and return the discovery data we need.</p>
<p>If you do those steps manually, you see how the script returns something very similar to a <a href="http://technet.microsoft.com/en-us/magazine/cc983816.aspx" target="_blank">PropertyBag, just like discoveries done by VBScript on Windows machines</a>:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb8.png" border="0" alt="Discovery Script Output" width="640" height="393" /></p>
<p>So after modifying the script&#8230; here we go. The Wizard now thinks CentOS is Red Hat, and can install an agent on it:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb9.png" border="0" alt="Discovery Wizard" width="548" height="480" /></p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb10.png" border="0" alt="Deploying Agent" width="551" height="480" /></p>
<p>Only when the Management Server discovery finally considers the CentOS machine worth managing, then the other discoveries that use WS-Man queries start kicking in, like the old one did, and find the OS objects and all the other hosted objects. In order for this to work you don&#039;t only need to hack the shell script, but to have a hacked MP &#8211; the &#034;regular&#034; Red Har one won&#039;t find CentOS, which is and remains an UNSUPPORTED platform.</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" src="http://www.muscetta.com/wp-content/uploads/image-thumb11.png" border="0" alt="CentOS Health Model" width="640" height="454" /></p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION. The solution presented here IS NOT SUPPORTED by Microsoft.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/11/23/centos-discovery-in-opsmgr2007-r2-beta/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Protecting custom Resolution State in OpsMgr 2007</title>
		<link>http://www.muscetta.com/2008/09/13/protecting-custom-resolution-state-in-opsmgr-2007/</link>
		<comments>http://www.muscetta.com/2008/09/13/protecting-custom-resolution-state-in-opsmgr-2007/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:32:17 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[resolution state]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[unsupported]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=298</guid>
		<description><![CDATA[In System Center Operations Manager 2007, you can add and remove resolution states for your alerts at will. Other than states &#034;0&#034; (&#034;New&#034;) and &#034;255&#034; (&#034;Closed&#034;) you can create other 254 resolution states to suit your needs. This is a simple feature that was already present in previous MOM versions, and it is very useful [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>In System Center Operations Manager 2007, you can add and remove resolution states for your alerts at will. Other than states &#034;0&#034; (&#034;New&#034;) and &#034;255&#034; (&#034;Closed&#034;) you can create other 254 resolution states to suit your needs. This is a simple feature that was already present in previous MOM versions, and it is very useful to do a kind of tricks with your alerts. The amount of possible states you can create should be able to satisfy any kind of alert and incident management process you might have in place, and any kind of filtering or forwarding or escalation need you might want to perform by using resolution states.</p>
<p><img src="http://www.muscetta.com/wp-content/uploads/image.png" alt="image" width="810" height="350" /></p>
<p>By default, only OpsMgr Administrators can change these settings, with the exception of the two built-in states of &#034;New&#034; and &#034;Closed&#034;: those two states are REQUIRED if you want the product to continue working, therefore the GUI won&#039;t let you change, edit or delete them. Which is good.</p>
<p>This is not true for your own resolution states, which can be edited or even deleted any time. All that is really saved in an alert when you change an alert&#039;s resolution state is the NUMBER associated with it. In fact you even use that number when querying for alerts in the Command Shell:</p>
<p><img src="http://www.muscetta.com/wp-content/uploads/image1.png" alt="get-alert | where {$_.resolutionstate -eq 0}" width="718" height="122" /></p>
<p>That means that if by accident you delete a resolution state you have defined, you won&#039;t see its description anymore in the GUI. Also, if you try to re-organize your resolution state, you can easily change the IDs for existing ones&#8230; Sure, you need to have the permissions in order to change or delete them, but what if you have implemented your important Alert and Incident management process by using resolution states and you want a bit of extra protection from mistakes or unintended deletion for them?</p>
<p>Then you can protect them by making the product think they were &#034;built-in&#034; too, just like &#034;New&#034; and &#034;Closed&#034;.</p>
<p>How would you do this? In an UNSUPPORTED WAY: editing the database <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  In fact, those resolution states are written in a table in the database, called &#034;ResolutionState&#034; (who would have guessed it?), that looks like the following picture:</p>
<p><img src="http://www.muscetta.com/wp-content/uploads/image2.png" alt="dbo.ResolutionState" width="693" height="274" /></p>
<p>Can you see the &#034;IsPredefined&#034; column? That can be set to &#034;True&#034; or &#034;False&#034; and that value is used by the SDK service to tell the GUI if that Resolution State can be edited/deleted or not.</p>
<p>Of course changing the database directly IS NOT SUPPORTED by Microsoft. You do this at your own risk, and if it was me, I would *NEVER* touch, change or remove the default two states (&#034;New&#034; and &#034;Closed&#034;) as THAT really would BREAK the product. For example, Alerts that are not set to &#034;Closed&#034; (255) won&#039;t be ever groomed. And that is VERY BAD. NEVER, NEVER DO THAT.</p>
<p>On the other end, changing a custom Resolution State to make the product believe it is Predefined/Built-in has not had any negative impact in my (limited) testing so far, and has added the advantage of &#034;protecting&#034; my resolution state from unintended deletion, as shown below:</p>
<p><img src="http://www.muscetta.com/wp-content/uploads/image3.png" alt="image" width="623" height="162" /></p>
<p>As usual, do this at your own risk. Remember what&#039;s written in my <strong>Disclaimer</strong>:</p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MICROSOFT, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS HACK.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/09/13/protecting-custom-resolution-state-in-opsmgr-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I am the Empire</title>
		<link>http://www.muscetta.com/2008/07/31/i-am-the-empire/</link>
		<comments>http://www.muscetta.com/2008/07/31/i-am-the-empire/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 22:27:00 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[ariel]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Empire]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[lifestream]]></category>
		<category><![CDATA[maglietta]]></category>
		<category><![CDATA[microspotting]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[TShirt]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=282</guid>
		<description><![CDATA[I have been talking to Ariel last month, asking for a Microspotting T-Shirt since I had mentioned her earlier on my blog. I have been on holiday in the meantime… but the T-Shirt had arrived and was waiting for me in my letterbox in the office !! How cool is that??? So today I am [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/2719326262/"><img src="http://farm4.static.flickr.com/3159/2719326262_2f58e5da94.jpg" alt="I am the Empire" /></a></p>
<p class="flickr-yourcomment">I have been talking to <a href="http://www.flickr.com/photos/ariel/">Ariel</a> last month, asking for a <a href="http://www.microspotting.com/2008/06/microspotting-tshirts">Microspotting T-Shirt</a> since I had <a href="http://www.muscetta.com/2008/05/02/a-rant-about-openness/">mentioned her earlier on my blog</a>.</p>
<p>I have been on holiday in the meantime… but the T-Shirt had arrived and was waiting for me in my letterbox in the office !! How cool is that???</p>
<p>So today I am walking around the Rome office in it… and I am looking at people’s faces: you need to understand that Italian dress code is more or less the opposite of <a href="http://www.microspotting.com/2008/05/not-all-softies-believe-in-business-casual">how people usually dress in Redmond</a>&#8230; Italy is historically more formal,  and it would be the norm to dress fancy…  one would definitely look BAD here if he would show up in sandals in the office… and VERY bad going on sandals to a customer… <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/07/31/i-am-the-empire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Got a new PC (finally)</title>
		<link>http://www.muscetta.com/2008/06/27/got-a-new-pc-finally/</link>
		<comments>http://www.muscetta.com/2008/06/27/got-a-new-pc-finally/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 23:08:09 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[HyperV]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=280</guid>
		<description><![CDATA[So this is a screenshot from my new Quad-Core Intel Q6600, 8GB RAM with Windows 2008 Enterprise x64, running Hyper-V. I have bought it and installed it a few days ago, and migrated my home Active Directory off the old windows 2003 machine to Windows 2008. Yes, because I have an Active Directory at home. [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<div class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/2613086287/"><img class="flickr-photo" src="http://farm4.static.flickr.com/3095/2613086287_7c29deaf6e.jpg" alt="Got a new PC" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/2613086287/"></a></span></p>
</div>
<p class="flickr-yourcomment">So this is a screenshot from my new Quad-Core Intel Q6600, 8GB RAM with Windows 2008 Enterprise x64, running <a href="http://www.microsoft.com/Hyper-V">Hyper-V</a>.<br />
I have bought it and installed it a few days ago, and migrated my home <a href="http://www.microsoft.com/windowsserver2008/en/us/active-directory.aspx">Active Directory</a> off the old windows 2003 machine to Windows 2008. Yes, because I have an Active Directory at home. I know, I am probably nuts, but you already knew that much.</p>
<p>Today, I just updated Hyper-V to RTM version. Oh yeah, because Hyper-V has been Released To Manufacturing today! You can <a href="http://www.microsoft.com/Hyper-V">get it HERE</a>.</p>
<p>I am having lot of fun with this. I had not bought a new PC in about 7 years and could not really test anything on that old one anymore&#8230;<br />
I paid 8GB roughly 100euros, which is not a lot if you think about it. These days even standard &#034;budget&#034; PCs for just doing email and web surfing ship with 2 or 4GB&#8230;<br />
With that amount of RAM, I expect it to last several years like the previous one. The one I bought 7 years ago had 512MB when everybody was buying 128 or 256MB. Kinda the same story here.</p>
<p>Wonder what happens to the old PC? That glorious machine that has been my server for years has now been converted to the new kids&#039; PC and will go on for a few more years like that, I hope.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/06/27/got-a-new-pc-finally/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 5 Management Pack for OpsMgr SCX</title>
		<link>http://www.muscetta.com/2008/05/13/centos-5-management-pack-for-opsmgr-scx/</link>
		<comments>http://www.muscetta.com/2008/05/13/centos-5-management-pack-for-opsmgr-scx/#comments</comments>
		<pubDate>Tue, 13 May 2008 09:43:07 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[management pack]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[screenshot]]></category>
		<category><![CDATA[scx]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=277</guid>
		<description><![CDATA[As I mentioned here, I have been testing the SCX beta. Not having one of the &#034;supported&#034; platforms pushed me into playing with the provided Management Packs, and in turn I managed to use the MP for Red Hat Enterprise Linux 5 as a base, and replaced a couple of strings in the discoveries in [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions">As I mentioned here</a>, I have been testing the <a href="http://blogs.msdn.com/scxplat/">SCX</a> beta.</p>
<p>Not having one of the &#034;supported&#034; platforms pushed me into playing with the provided Management Packs, and in turn I managed to use the MP for Red Hat Enterprise Linux 5 as a base, and replaced a couple of strings in the discoveries in order to get a working <a href="http://www.centos.org">CentOS</a> 5 Management Pack.</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" src="http://www.muscetta.com/wp-content/uploads/centos-healthexplorer01-new.jpg" border="0" alt="CentOS_HealthExplorer01_NEW" width="997" height="681" /></p>
<p>I still have not looked into the &#034;hardware&#034; monitors and health model / service model, so those are not currently monitored. But it is a start.</p>
<p>A lot of people have asked me a lot of information and would like to get the file &#8211; both in the blog&#039;s comment, on the newsgroup, or via mail. I am sorry, but I cannot provide you with the file, because it has not been throughly tested and might render your systems unstable, and also because there might be licensing and copyright issues that I have not checked within Microsoft.</p>
<p>Keep also in mind that using CentOS as a monitored platform <strong>is NOT a SUPPORTED scenario/platform for SCX</strong>. I only used it because I did not have a Suse or Redhat handy that day, and because I wanted to understand how the Management Packs using WS-Man worked.</p>
<p>This said, should you wish to try to do the same &#034;MP Hacking&#034; I did,  <a href="http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/">I pretty much explained all you need to know in my previous post and its comments</a>, so that should not be that difficult.</p>
<p>Actually, I still think that the best way to figure out how things are done is by looking at the actual implementation, so I encourage you to look at the management packs and figure out how those work. There are a few mature tools out there that will help you author/edit Management Packs if you don&#039;t want to edit the XML directly: the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6c8911c3-c495-4a03-96df-9731c37aa6d7&amp;DisplayLang=en">Authoring Console</a>, and <a href="http://www.silect.com/solutions/opsmgr_Sol/opsmgr_Sol_studio2007_Lite.html">Silect MP Studio Lite</a>, for example. If you want to delve in the XML details, instead, then I suggest you read the <a href="http://download.microsoft.com/download/7/4/d/74deff5e-449f-4a6b-91dd-ffbc117869a2/OM2007_AuthGuide.doc">Authoring Guide</a> and peek at <a href="http://www.authormps.com/">Steve Wilson&#039;s AuthorMPs.com site</a>.</p>
<p><strong>Disclaimer<br />
</strong>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS PROGRAM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/05/13/centos-5-management-pack-for-opsmgr-scx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making Content Accessible to All</title>
		<link>http://www.muscetta.com/2008/05/10/making-content-accessible-to-all/</link>
		<comments>http://www.muscetta.com/2008/05/10/making-content-accessible-to-all/#comments</comments>
		<pubDate>Sat, 10 May 2008 07:32:45 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[commercial]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[reclame]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=275</guid>
		<description><![CDATA[&#034;[...] Technology, when it evolves around people&#039;s actual needs rather than the needs of the designer, that&#039;s when it starts to work [...]&#034; DAISY is a technology that promises to revolutionize the reading experience for people who have print disabilities like blindness or dyslexia. DAISY (Digital Accessible Information SYstem) XML is a universal standard format [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="wmode" value="transparent" /><param name="src" value="http://www.youtube.com/v/PJwBdVr_1LM&amp;hl=en" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://www.youtube.com/v/PJwBdVr_1LM&amp;hl=en" wmode="transparent"></embed></object></p>
<p><em><strong>&#034;[...] Technology, when it evolves around people&#039;s actual needs rather than the needs of the designer, that&#039;s when it starts to work [...]&#034;</strong></em></p>
<p>DAISY is a technology that promises to revolutionize the reading experience for people who have print disabilities like blindness or dyslexia. DAISY (Digital Accessible Information SYstem) XML is a universal standard format for reading and publishing digital talking books, and allows for new ways to deliver information quickly and efficiently using high quality synthetic speech or human voice. Microsoft, The DAISY Consortium (<a href="http://www.daisy.org">www.daisy.org</a>) and Sonata Software have worked together to build a &#034;Save as DAISY XML&#034; add-in for Microsoft Office Word. This free, downloadable XML-based add-in, available at <a href="http://sourceforge.net/projects/openxml-daisy">http://sourceforge.net/projects/openxml-daisy</a>, makes it possible for Microsoft Office Word (including XP, 2003 and 2007) users to convert Open XML-based content into DAISY XML.</p>
<p><a href="http://www.microsoft.com/presspass/presskits/DAISY/default.mspx">http://www.microsoft.com/presspass/presskits/DAISY/default.mspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/05/10/making-content-accessible-to-all/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing System Center Cross Plaform Extentions</title>
		<link>http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/</link>
		<comments>http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/#comments</comments>
		<pubDate>Sun, 04 May 2008 07:35:48 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[xplat]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[certificate]]></category>
		<category><![CDATA[connect]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[openpegasus]]></category>
		<category><![CDATA[openwsman]]></category>
		<category><![CDATA[redhat]]></category>
		<category><![CDATA[scx]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[suse]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[ws-man]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=274</guid>
		<description><![CDATA[I am testing the beta bits of the cross-platform extensions that were released on Microsoft Connect&#160; This post wants to describe my limited testing so far &#8211; I hope this can benefit/help everyone testing the beta for some stuff that might currently not be incredibly clear &#8211; unless you attended the MMS class, at least [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am testing the beta bits of the cross-platform extensions that were released on <a href="http://connect.microsoft.com/">Microsoft Connect</a>&nbsp; </p>
<p>This post wants to describe my limited testing so far &#8211; I hope this can benefit/help everyone testing the beta for some stuff that might currently not be incredibly clear &#8211; <a href="http://blogs.msdn.com/scxplat/archive/2008/05/01/cross-platform-extensions-overview-session-at-mms.aspx">unless you attended the MMS class</a>, at least <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )  </p>
<p>I started out with <a href="http://download.microsoft.com/download/7/7/6/7762e198-cad4-4fac-9946-e8978e90823c/OpsMgr2007-CrossPlat-WP_CD_April2008.pdf">the White Paper that has been posted on the web, which describes the architecture pretty well</a>, but from a higher level (with diagrams and the like). Then I downloaded the beta bits, which contain another document about setting the thing up. It is pretty well done, to be honest (especially if you consider that it is beta documentation for a beta product!), but it does not really go all the way down to troubleshooting things a lot, yet. I will try to cover some of that here.  </p>
<p>I installed the agent manually &#8211; it’s just a RPM package, not much that can go wrong with that. There is a reason why I did not use the push discovery and deployment of the agent, which you will figure out reading later on. Once installed, I tried to figure out how things were looking like on the linux machine. It is all pretty understandable, after all, if you look around on the machine (documented or not, linux and open source stuff is easy to figure out by reading configuration files and the like, and by searching on the web).  </p>
<p>Basically the “agent” is not properly an &#034;agent&#034; the way the windows agent is, since it does not really &#034;sends&#034; stuff to the Management Server on its own: It consists of a&nbsp; couple of services/daemons, based on existing opensource projects, but configured in their own folder, with their own name, and using different ports than a standard install of those,&nbsp; not to conflict with possible existing ones on those machines.  </p>
<p>The Management Service uses these services remotely (similar to doing agentless monitoring towards a windows box) using these services. The two services are:
<ul>
<li><b>scx-cimd</b> which implements the CIM daemon (<a href="http://www.openpegasus.org">openpegasus.org</a>)  </li>
<li><b>scx-wsmand</b> which implements Ws-Man daemon (<a href="http://www.openwsman.org">openwsman.org</a>)</li>
</ul>
<p>&nbsp;<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="245" alt="scx-services commands" src="http://www.muscetta.com/wp-content/uploads/image001.png" width="640" border="0"/> </p>
<p>It is easy to figure out how they are layed out. Even if undocumented, you look at the processes  </p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="130" alt="SCX processes" src="http://www.muscetta.com/wp-content/uploads/image002.png" width="640" border="0"/>  </p>
<p>and you can figure out WHERE they live (<b>/opt/microsoft/scx/bin/</b>….) and where their configuration files are located (/etc/opt/microsoft/scx/conf …).  </p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="169" alt="SCX Configuration" src="http://www.muscetta.com/wp-content/uploads/image003.png" width="640" border="0"/>  </p>
<p>The files are self explanatory, and the documentation of the opensource projects can be found on the Internet:&nbsp; </p>
<p>for <strong>wsmand</strong> </p>
<ul>
<li>at <a href="http://www.openwsman.org">openwsman.org</a> (for wsmand) </li>
</ul>
<p>for <strong>cimd</strong> </p>
<ul>
<li>at openpegasus site (<a href="http://www.openpegasus.org/documents.tpl?CALLER=doc.tpl&amp;dcat=">http://www.openpegasus.org/documents.tpl?CALLER=doc.tpl&amp;dcat=</a> )  </li>
<li>on the openpegasus wiki (<a href="http://wiki.opengroup.org/pegasus-wiki/doku.php?id=start">http://wiki.opengroup.org/pegasus-wiki/doku.php?id=start</a> )  </li>
<li>at the linux management IBM page <a href="http://www.ibm.com/developerworks/linux/library/os-ltc-systemsmanagement/">http://www.ibm.com/developerworks/linux/library/os-ltc-systemsmanagement/</a>&nbsp; </li>
</ul>
<p>&nbsp; </p>
<p>I still have to delve into them properly as I would like to, but I already figured out a bunch of interesting things by quickly looking at them.  </p>
<p>Agent Communication someone must have decided to “recycle” the <strong>1270</strong> port number that was used in MOM2005 <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Basically openwsman listens as a SSL listener (with basic auth – connected via PAM module with the “regular” unix /etc/passwd users, so you can authenticate as those without having to define specific users for the service). So all that happens is that the Management Server asks things/executes WS-Man queries and commands on this channel. The Management Server connects every time to the agent on port 1270 using SSL, authenticates as “root” (or as the specified &#034;Action Account&#034;) and does its stuff, or asks the agent to do it. So the communication is happening from the Management Server to the agent… not the other way around like it happens with Windows &#034;agents&#034;. That’s why it feels to me more like an “agentless” thing, at least for what concerns the “direction” of traffic and who does the actual querying.  </p>
<p>For the rest, the provided Management Packs have “normal” discoveries and “normal” monitors. Pretty much like the Windows Management Packs often discover thing by querying WMI, here they use WS-Man to run CIM queries against the Unix boxes.  </p>
<p>The Service Model is totally cool to actually *<b>SEE</b>* in action, don’t you think so ?  </p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="654" alt="Service Model" src="http://www.muscetta.com/wp-content/uploads/image004.png" width="451" border="0"/>  </p>
<p>&nbsp; </p>
<p>A few more debugging/troubleshooting information:  </p>
<p>I searched a bit and found the openwsman.org documentation and forum to be useful to figure some things out. For example I banged my head a few times before managing to actually TEST a query from windows to linux using WINRM. <a href="http://openwsman.org/openwsman-users-guide/vista-winrm-over-openwsman-setup">This document helped a lot</a>.  </p>
<p>Of course you have to solve some other things such as DNS resolution AND trusting the self-issued certificates that the agent uses, first. Once you have done that, you can run test queries from the Windows box towards the Unix ones by using WinRM.  </p>
<p>For example, this is how I tested what the discovery for a Linux RedHat Computer type should be returning (I read that by opening the MP in authoring console, as one would usually do for any MP):  </p>
<p><b>winrm enumerate http://schemas.microsoft.com/wbem/wscim/1/cim-schema/2/</b><b>SCX_OperatingSystem?__cimnamespace=root/scx</b><b> -username:root -password:password -r:https://centos:1270/wsman -auth:basic</b>  </p>
<p>If you need to test the query directly *<b>ON</b>* the linux box (querying the CIMD instead than WSMAND), the <b>WBEMEXEC</b> utility is packaged with the agent (under <b>/opt/microsoft/scx/bin/tools </b>). It is not as easy as some windows administrators (that have used WBEMTEST or WMI Tools in the past) would hope, but not even that bad. Just to run a few queries to the CIM daemon locally it is not really interactive, so you need to create a XML file that looks like the following (basically you build the RAW request the way the CIMD accepts it):  </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
</p>
<p>&lt;?xml version=&#034;1.0&#034; ?&gt; </p>
<p>&lt;CIM CIMVERSION=&#034;2.0&#034; DTDVERSION=&#034;2.0&#034;&gt; </p>
<p>&lt;MESSAGE ID=&#034;50000&#034; PROTOCOLVERSION=&#034;1.0&#034;&gt; </p>
<p>&lt;SIMPLEREQ&gt; </p>
<p>&lt;IMETHODCALL NAME=&#034;EnumerateInstanceNames&#034;&gt; </p>
<p>&lt;LOCALNAMESPACEPATH&gt; </p>
<p>&lt;NAMESPACE NAME=&#034;root&#034;/&gt; </p>
<p>&lt;NAMESPACE NAME=&#034;scx&#034;/&gt; </p>
<p>&lt;/LOCALNAMESPACEPATH&gt; </p>
<p>&lt;IPARAMVALUE NAME=&#034;ClassName&#034;&gt; </p>
<p>&lt;CLASSNAME NAME=&#034;SCX_OperatingSystem&#034;/&gt; </p>
<p>&lt;/IPARAMVALUE&gt; </p>
<p>&lt;/IMETHODCALL&gt; </p>
<p>&lt;/SIMPLEREQ&gt; </p>
<p>&lt;/MESSAGE&gt; </p>
<p>&lt;/CIM&gt; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>Once you have made such a file, you can execute the query in the file with the tool like the following:  </p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="296" alt="./wbemexec -d2 query.xml" src="http://www.muscetta.com/wp-content/uploads/image005.png" width="640" border="0"/>  </p>
<p>&nbsp; </p>
<p>As you can see from here, CIMD uses HTTP already. This differs from Windows&#039; WMI that uses RPC/DCOM. In a way, this is much simpler to troubleshoot, and more firewall-friendly.  </p>
<p>&nbsp; </p>
<p>I have not really found an activity or debug log for any of those components, yet… but in the end they are not doing anything ON THEIR OWN, unless asked by the MS…. So the “healthservice” logic is all on the MS anyway. Errors about failed discoveries, permissions of the Action Account user, and anything else will be logged by the HealthService on the Windows machine (the Management Server) that is actually performing monitoring towards the Unix box.  </p>
<p>It really is *<b>just</b>* getting the WMI and WinRM-equivalent layer on linux/Unix up and running– after that, everything is done from windows anyway!  </p>
<p>After this common management infrastructure has been provided, 3<sup>rd</sup> parties will be facilitated in writing *<b>just</b>* MPs, without having to worry about the TRANSPORT of information anymore.  </p>
<p>&nbsp; </p>
<p>As you have probably noticed from the screenshots and commandlines, I don’t have a “real” Redhat Enterprise Linux or “supported” linux distribution… Therefore I started my testing using CentOS 5 (which is very similar to RHEL 5) &#8211; the agent installed fine as you can see, but I was not getting anything really “discovered” &#8211; the MP had only found a “linux computer” but was not finding any “RedHat” or “SuSe” or any other &#034;Operating System&#034; instances… and if you are somewhat familiar with the way <a href="http://technet.microsoft.com/en-us/library/bb309476.aspx">Operations Manager targeting</a> works, <a href="http://blogs.technet.com/momteam/archive/2007/10/31/targeting-series-part-1-differences-between-2005-and-2007.aspx">you would understand that monitors are targeted at object classes</a>. <a href="http://support.microsoft.com/kb/938999">If I don&#039;t have any instance of those objects being discovered, NO MONITORING actually happens</a>, even if the infrastructure is in place and the pieces are talking to each other:  </p>
<p>&nbsp;<img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="93" alt="CentOS not discovered" src="http://www.muscetta.com/wp-content/uploads/image006.png" width="640" border="0"/>  </p>
<p>Therefore my machine was not being monitored.  </p>
<p>In the end, I actually even got it to work, but I had to create a new Management Pack (exporting and modifying the RHEL5 one as a base) that would actually search for different Property values and discover CentOS instead as if it were RedHat:  </p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="140" alt="CentOS Discovered" src="http://www.muscetta.com/wp-content/uploads/image007.png" width="640" border="0"/>&nbsp;</p>
<p>After importing my hacked Management Pack the machine started to be monitored. Here you can see Health Explorer in all of its glory:</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="680" alt="image008" src="http://www.muscetta.com/wp-content/uploads/image008.png" width="999" border="0"/> </p>
<p>Of course this is a hack I made just to have a test setup somewhat working and to familiarize myself with the SCX components. It is not guaranteed that my Management pack actually works on CentOS the way it is supposed to work and that there aren&#039;t other &#8211; more subtle &#8211; differences between RedHat and CentOS that will make it fail. I only modified a couple of Discoveries to let it discover the &#034;Operating System&#034; instance&#8230; everything else should follow, but not necessarily. One difference you see already in the screenshot above is that I am not yet seeing the hardware being monitored, so my hack is already only partially working and <strong>it is definitely something that won&#039;t be supported</strong>, so I cannot provide it here. Also, this is a beta, so I I think that the Management Packs will be re-released with following beta versions, and this change is something that would need to be re-done all over again. Also, the unsupported distribution is the reason why I installed the agent manually in the first place, as the &#034;Discovery Wizard&#034; would not really &#034;agree&#034; to go and let me install the agent remotely on an unsupported &#034;platform!&#034;. </p>
<p>But I could not wait to see this working, <a href="https://www.redhat.com/apps/webform.html?event_type=simple_form&amp;eid=871">while waiting two business days (we are on a weekend!) for confirmation that I am allowed to actually download a 30-day-unsupported-Trial of the &#034;real&#034; RedHat Enteprise Linux</a>, so I cheated <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Disclaimer</strong></p>
<p>The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS INFORMATION.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/05/04/testing-system-center-cross-plaform-extentions/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>A Rant about Openness</title>
		<link>http://www.muscetta.com/2008/05/02/a-rant-about-openness/</link>
		<comments>http://www.muscetta.com/2008/05/02/a-rant-about-openness/#comments</comments>
		<pubDate>Fri, 02 May 2008 08:32:09 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Live]]></category>
		<category><![CDATA[LiveID]]></category>
		<category><![CDATA[Novell]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[WebSite]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/05/02/a-rant-about-openness/</guid>
		<description><![CDATA[It is interesting to see that a bunch of open source projects written on and for the Microsoft platform grows and grows, and also nice to see that a lot of Microsoft employees are very active and aware of the open source ecosystem, rather than being stuck with only what the company makes. Phil Haack, [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>It is interesting to see that a bunch of open source projects written on and for the Microsoft platform grows and grows, and also nice to see that a lot of Microsoft employees are very active and aware of the open source ecosystem, rather than being stuck with <em>only</em> what the company makes. <a href="http://haacked.com/archive/2008/04/09/interview-with-brad-wilson-on-microsoft-and-open-source.aspx">Phil Haack, in a post about an interview to Brad Wilson,&#160; wisely writes</a>: </p>
<blockquote><p>&quot;[...] What I particularly liked about this post was the insight Brad provides on the diverse views of open source outside and inside of Microsoft as well as his own personal experience contributing to many OSS projects. It&#039;s hard for some to believe, but there are developers internal to Microsoft who like and contribute to various open source projects. [...]&quot; </p>
</blockquote>
<p>In fact, being made by Microsoft people or not, the list of open source software on CodePlex keeps growing too. Mentioning CodePlex and interviews, <a href="http://www.microspotting.com/2008/04/sara-ford-open-source">another interesting one is that of Sara Ford, Program Manager for CodePlex posted on Microspotting</a>. But Microspotting is awesome in general. My favorite quote by her: </p>
<blockquote><p>&quot;[...] Hey. My name is Ariel and I&#039;m the person you thought would never work at MSFT [...]&quot;. </p>
</blockquote>
<p>In fact, just as I do, she is <a href="http://www.microspotting.com/">running that blog on WordPress</a>, posting <a href="http://www.flickr.com/photos/ariel/">her photos on Flickr</a>, using a <a href="http://feeds.feedburner.com/microspotting">RSS feed on Feedburner</a> and in general using a bunch of things that are out there that might be seen as &quot;competing&quot; with what Microsoft makes. In fact, this attitude towards other products and vendors on the market is what I am mainly interested in. Should we only use flagship products? Sure, when they help us, but not necessarily. Who cares? People&#039;s blogs are not, as someone would like them to be, a coordinated marketing effort. This is about real people, real geeks, who just want to share and communicate personal ideas and thoughts. I had a blog before being at Microsoft, after all. Obviously I had exposure to competing products. <a href="http://toolbar.netcraft.com/site_report?url=www.muscetta.net">My server was running LAMP on Novell Netware in 2002 &#8211; after which I moved it to Linux</a>. It is not a big deal. And if I try to put things in perspective, in fact, this is turning out to be an advantage. I am saying this, as the latest news about interoperability comes from MMS (Microsoft Management Summit): and that is <a href="http://blogs.msdn.com/scxplat/archive/2008/04/29/announcing-system-center-operations-manager-2007-cross-platform-extensions-and-connectors.aspx">the announcement</a> that <a href="http://edge.technet.com/Media/Operations-Manager-with-Barry-Shilmover/">System Center Operations Manager will monitor Linux natively</a>. I find this to be extremely exciting, and a step in the right direction&#8230; to say it all I am LOVING this!!! But at the same time I see some other colleagues in technical support that are worrying and being scared by this &#8211; &quot;if we do monitor Linux and Unix, we are supposed to have at least some knowledge on those systems&quot;, they are asking. Right. We probably do. At the moment there are probably only a limited number of people that actually can do that, at least in my division. But this is because in the past <a href="http://www.muscetta.com/2006/05/29/specialization-is-bullshit/">they must have sacrificed their own curiosity</a> to <a href="http://www.muscetta.com/2006/11/05/more-on-specialization/">become &quot;experts&quot; in some very narrow and &quot;specialized&quot; thing</a>. <a href="http://www.muscetta.com/2007/12/27/simply-works/">Here we go</a>. On the opposite, I kept using Linux &#8211; even when other &quot;old school&quot; employees would call me names. All of a sudden, someone else realizes my advantage.&#160; &#8230;but <a href="http://blogs.msdn.com/johnmont/archive/2008/04/11/popfly-on-moonlight.aspx">a lot of geeks already understood the power of exploration</a>, and won&#039;t stop defining people by easy labels. Another cool quote I read the other day is what <a href="http://jimmy.schementi.com/">Jimmy Schementi</a> has written in his Flickr profile: </p>
<blockquote><p>&quot;[...] I try to do everything, and sometimes I get lucky and get good at something [...]&quot;. </p>
</blockquote>
<p>Reading on his blog it looks like he also gave up on trying to write a Twitter plugin for <strike>MSN</strike>Live Messenger (or maybe he never tried, but at least <a href="http://www.muscetta.com/2007/10/01/facebook-implemented-a-usersetstatus-api/">I wanted to do that</a>, instead) and <a href="http://blog.jimmy.schementi.com/2008/04/pidgin-and-twitter.html">wrote it for Pidgin instead</a>.&#160; Why did he do that ? I don&#039;t know, I suppose because it was quicker/easier &#8211; and there were API&#039;s and code samples to start from.</p>
<p>The bottom line, for me, is that geeks are interested in figuring out cool things (no matter what language or technology they use) and eventually communicating them. They tend to be pioneers of technologies. They try out new stuff. Open Source development is a lot about agility and &quot;trying out&quot; new things. Another passage of <a href="http://howsoftwareisbuilt.com/2008/04/08/interview-with-brad-wilson-software-developer-officelabs-microsoft/">Brad&#039;s interview</a> says: </p>
<blockquote><p>&quot;[...] That&#039;s true&#8211;the open source projects I contribute to tend to be the &#034;by developer, for developer&#034; kind, although I also consume things that are less about development [...] Like one tool that I&#039;ve used forever is the GIMP graphics editor, which I love a lot&quot;. </p>
</blockquote>
<p>That holds true, when you consider that a lot of these things are not really mainstream. Tools made &quot;by developer, for developer&quot; are usually a sort of experimental ground. Like <a href="http://www.twitter.com">Twitter</a>. Every geek is talking about Twitter these days, but <a href="http://twitter.com/Carnage4Life/statuses/799199971">you can&#039;t really say that it is mainstream</a>. Twitter has quite a bunch of interesting aspects, though, and that&#039;s why geeks are on it. Twitter lets me keep up-to-date quicker and better (and with a personal, conversational touch) even better than RSS feeds and blogs do. Also, there are a lot of Microsofties on Twitter. And the cool thing is that yo can really talk to everybody, at any level. Not just everybody &quot;gets&quot; blogs, social networks, and microblogging. Of course you cannot expect everybody to be on top of the tech news, or use experimental technologies. So in a way stuff like Twitter is &quot;by geeks, for geeks&quot; (not really just for developers &#8211; there&#039;s a lot of &quot;media&quot; people on Twitter). Pretty much in the same way, a lot of people I work with (at direct contact, everyday) only found out about LinkedIN during this year (2008!). I joined Orkut and LinkedIN in 2004. Orkut was in private beta, back then. A lot of this stuff never becomes mainstream, some does. But it is cool to discover it when it gets born. How long did it take for Social Networking to become mainstream? So long that when it is mainstream for others, I have seen it for so long that I am even getting tired of it.</p>
<p>For some reason, geeks love to be pioneers. This is well expressed in a <a href="http://blogs.msdn.com/chris_pratley/archive/2008/04/28/my-new-gig-is-office-labs.aspx">digression by Chris Pratley</a>:</p>
<blockquote><p>&quot;[...] some of them we will be putting out on officelabs.com for the general public (you folks!) to try so we can understand how &quot;normal&quot; people would use these tools. Now of course, as we bloggers and blog-readers know, we&#039;re not actually normal &#8211; you could even debate whether the blogosphere is more warped than the set of Microsoft employees, who comprise an interesting cross-section of job types, experiences, and cultures. But I digress. [...]&quot;</p>
</blockquote>
<p>But I have been digressing, too, all along. As usual. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/05/02/a-rant-about-openness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Popfly Virtual Earth Mashup on Moonlight</title>
		<link>http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/</link>
		<comments>http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 08:44:02 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[popfly]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/</guid>
		<description><![CDATA[Installed moonlight on Ubuntu from source by following these instructions (there are some typo&#039;s but they are understandable and correctable). All in all, even being still under heavy development, what Miguel de Icaza has achieved (with moonlight, just like with mono) is amazing. After I posted the above picture on Flickr, John Montgomery was amazed [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<div class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/2401024181/"><img class="flickr-photo" src="http://farm3.static.flickr.com/2215/2401024181_d9b74faf81.jpg" alt="Popfly Virtual Earth Mashup on Moonlight" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/2401024181/"></a></span></p>
</div>
<p class="flickr-yourcomment">Installed <a href="http://go-mono.org/moonlight">moonlight</a> on Ubuntu from source by following <a href="http://www.nino-net.org/2008/02/29/moon-use-silverlight-plugin-in-ubuntu-710">these instructions</a> (there are some typo&#039;s but they are understandable and correctable).</p>
<p>All in all, even being still under heavy development, what Miguel de Icaza has achieved (with moonlight, just like with <a href="http://go-mono.org">mono</a>) is amazing.</p>
<p>After I posted the above picture on Flickr, John Montgomery was amazed to see <a href="http://www.popfly.com/">PopFly</a> (his creature) working on moonlight, and <a href="http://blogs.msdn.com/johnmont/archive/2008/04/11/popfly-on-moonlight.aspx">he linked to me from his blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/04/12/popfly-virtual-earth-mashup-on-moonlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Conversation about Blogs with a customer</title>
		<link>http://www.muscetta.com/2008/03/28/conversation-about-blogs-with-a-customer/</link>
		<comments>http://www.muscetta.com/2008/03/28/conversation-about-blogs-with-a-customer/#comments</comments>
		<pubDate>Fri, 28 Mar 2008 14:24:17 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Funny]]></category>
		<category><![CDATA[gapingvoid]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/03/28/conversation-about-blogs-with-a-customer/</guid>
		<description><![CDATA[I usually don&#039;t like mentioning specific facts that happened to me at work. But work is part of life, so even if this is mostly a personal blog, I cannot help myself but write about certain things that make me think when they happen. When I end up having conversations such as this, I get [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I usually don&#039;t like mentioning specific facts that happened to me at work. But work is part of life, so even if this is mostly a personal blog, I cannot help myself but write about certain things that make me think when they happen.</p>
<p>When I end up having conversations such as this, I get really sad: I thought we had finally passed the arrogant period where we had to spoon-feed customers, and I thought we were now mature enough to consider them smart people and providing <a href="http://www.microsoft.com/powershell">cool, empowering technologies</a> for them to use. I also thought that pretty much everybody liked Microsoft finally opening up and actually talking TO people&#8230; not only talking them INTO buying something, something &#8211; but having real conversations.</p>
<p>I get sad when I find that people still don&#039;t seem to be accepting that, and wanting back the old model, instead. Kinda weird.</p>
<p>&nbsp;</p>
<p>The conversation goes as follows (words are not exactly those &#8211; we were speaking Italian and I sort of reconstructed the conversation &#8211; you should get the sense of it anyway):</p>
<p>&nbsp;</p>
<blockquote><p>[...]</p>
<p><strong>Me:</strong> &#034;The SDK service allows you to do quite a lot of cool stuff. Unfortunately not all of that functionality is completely or always easily exposed in the GUI. That is, for example: it is very EASY to define overrides, but it can get very tricky to find them back once set. That&#039;s why you can use <a href="http://blogs.msdn.com/boris_yanushpolsky/archive/2007/08/09/override-explorer-v3-3.aspx">this little useful tool</a> that the developer of that SDK service has posted on his blog&#8230;&#034; </p>
<p><strong>Cust:</strong> &#034;&#8230;but we can&#039;t just read blogs here and there!&#034; </p>
<p><strong>Me:</strong> &#034;Well, I mean, then you may have to wait for the normal release cycle. It might be that those improvements will make it in to the product. That might happen in months, if you are lucky, or maybe never. What&#039;s wrong if he publishes that on his blog, bypassing the bureaucracy crap, and makes your life easier with it RIGHT NOW?&#034; </p>
<p><strong>Cust:</strong> &#034;It is not official, I want it in the product!&#034; </p>
<p><strong>Me:</strong> &#034;I see, and even understand that. But right now that feature just isn&#039;t there. But you can use this tool to have it. Don&#039;t worry: it is not made by some random guy who wants to trojan your server! It is made by the very same developer who wrote the product itself&#8230;&#034; </p>
<p><strong>Cust:</strong> &#034;It is not supported, what if it breaks something?&#034; </p>
<p><strong>Me: </strong>&#034;So are all resource kit tools, in general. written by some dev guy in his free five minutes, and usually unsupported. Still very useful, though. Most of them. And they usually do work, you know that much, don&#039;t you?&#034; </p>
<p><strong>Cust:</strong> &#034;But why on a blog?&#034; </p>
<p><strong>Me:</strong> &#034;What&#039;s wrong with this? People are just trying to make customer&#039;s life easier by <a href="http://www.gapingvoid.com/Moveable_Type/archives/001607.html">being transparent and open and direct in their communication, just talking RIGHT to the customers. People talking to people</a>, bypassing the prehistoric bureaucracy structure of companies&#8230; the same happens on many other sites, just think <a href="http://isatools.org/">isatools.org</a> for example&#8230; those are just tools that a support guy like me has written and wants to share because they might be useful&#8230;&#034; </p>
<p><strong>Cust:</strong> &#034;But I can&#039;t follow/read all the blogs out there! I don&#039;t have time for it&#034; </p>
<p><strong>Me:</strong> &#034;Why not? I have thousands of feeds in my aggregator and&#8230;&#034; </p>
<p><strong>Cust:</strong> &#034;I don&#039;t have time and I don&#039;t want to read them, because I pay for support, so I don&#039;t expect this stuff to be in blogs&#034; </p>
<p><strong>Me:</strong> &#034;Well, I see, since you pay for support, you are paying ME &#8211; in fact I am working with you on this product precisely as part of that paid support. That&#039;s why I am here to tell you that this tool exists, in case you had not heard of it, so you actually know about it without having to read that yourself on any blog&#8230; does that sound like a deal? Where&#039;s the issue?&#034; </p>
<p><strong>Cust:</strong> &#034;Sgrunt. I want something official, I don&#039;t like this blog stuff&#034; </p>
<p>[...]</p>
</blockquote>
<p>&nbsp;</p>
<p>I thought this was particularly interesting, not because I want to make fun of this person. I do respect him and I think he just has a different point of view. But in my opinion this conversation shows (and made me think about) an aspect of that &#034;generation gap&#034; inside Microsoft that <a href="http://www.gapingvoid.com/Moveable_Type/archives/004459.html">Hugh talks about here</a>: </p>
<blockquote><p><em>&#034;[...]4.30 Hugh talks about a conversation he had with a few people inside Microsoft- how there’s a generation gap growing within the company, between the Old Guard, and the new generation of Microsofties, who see their company in much more open, organic terms.[...]&#034;</em> </p>
</blockquote>
<p>Basically this tells me that the generation gap is not happening only INSIDE Microsoft: it invests our customers too. Which makes it even more <a href="http://www.gapingvoid.com/Moveable_Type/archives/004181.html">difficult to talk to some of them, as we change</a>. Traditions are hard to change.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/03/28/conversation-about-blogs-with-a-customer/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ca(p)tching Cats and Dogs</title>
		<link>http://www.muscetta.com/2008/03/09/captching-cats-and-dogs/</link>
		<comments>http://www.muscetta.com/2008/03/09/captching-cats-and-dogs/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 08:36:22 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Asirra]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[CAPTCHA]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Funny]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[SPAM]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/03/09/captching-cats-and-dogs/</guid>
		<description><![CDATA[I read on Jeff Atwood&#039;s blog about most strong Captcha having been defeated. Also, on top of visitors getting annoyed by it, the Captcha plugin I am using has gone unmantained lately. And, one way or another, I am getting comment spam again. Which is something I really hate as you know what I would [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I read on <a href="http://www.codinghorror.com/blog/archives/001067.html">Jeff Atwood&#039;s blog about most strong Captcha having been defeated</a>. Also, on top of visitors getting annoyed by it,  <a href="http://www.boriel.com/2006/05/27/bye-bye-captcha/">the Captcha plugin I am using has gone unmantained</a> lately. And, one way or another, I am getting comment spam again. Which is something I really hate as you know <a href="http://www.43things.com/things/view/13248/transmit-spammers-to-a-deserted-island-where-they-can-cannibalize-each-other">what I would love to do to spammers</a>&#8230;</p>
<p>I am seriously considering giving <a href="http://research.microsoft.com/asirra/">Asirra</a> a try. It is an interesting project from Microsoft Research for an HIP (Human Interaction Proof) that uses info from <a href="http://www.petfinder.com/">petfinder.com</a> to let users set apart pictures of dogs from those of cats. There is also a <a href="http://research.microsoft.com/asirra/WordPressPlugin/">WordPress plugin</a>, in the best and newest &#034;<a href="http://www.microsoft.com/opensource/interop/default.mspx">we want to interoperate</a>&#034; fashion that we are finally getting at Microsoft (this has always been the way to go, IMHO, and BTW).</p>
<p>Anyway, what do you think ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/03/09/captching-cats-and-dogs/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Looking at OpsMgr2007 Alert trend with Command Shell</title>
		<link>http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/</link>
		<comments>http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 20:01:02 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[Alert]]></category>
		<category><![CDATA[Command Shell]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[trend]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/</guid>
		<description><![CDATA[It&#039;s friday night, I am quite tired and I can&#039;t be asked of writing a long post. But I have not written much all week, not even updated my Twitter, and now I want to finish the week with at least some goodies. So this is the turn of a couple of Powershell commands/snippets/scripts that [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>It&#039;s friday night, I am quite tired and I can&#039;t be asked of writing a long post. But I have not written much all week, not even updated my Twitter, and now I want to finish the week with at least some goodies. So this is the turn of a couple of <a href="http://www.microsoft.com/powershell">Powershell</a> commands/snippets/scripts that will count alerts and events generated each day: this information could help you understand the trends of events and alerts over time in a Management Group. It is nothing fancy at all, but they can still be useful to someone out there. In the past (MOM 2005) I used to gather this kind of information with SQL Queries against the operations database. But now, with Powershell, everything is exposed as objects and it is much easier to get information without really getting your hands dirty with the database <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><strong>#Number of Alerts per day</strong></p>
<p><em>$alerttimes = Get-Alert | Select-Object TimeRaised<br />
$array=@() </em></p>
<p><em>foreach ($datetime in $alerttimes){<br />
$array += $datetime.timeraised.date<br />
} </em></p>
<p><em>$array | Group-Object Date</em></p>
<p><strong>#Number of Events per day</strong></p>
<p><em>$eventtimes = Get-Event | Select-Object TimeGenerated<br />
$array=@() </em></p>
<p><em>foreach ($datetime in $eventtimes){<br />
$array += $datetime.timegenerated.date<br />
} </em></p>
<p><em>$array | Group-Object Date</em></p>
<p>Beware that these &#034;queries&#034; might take a long time to execute (especially the events one) depending on the amount of data and your retention policy.</p>
<p>This is of course just scratching the surface of the amount of amazing things you can do with Powershell in Operations Manager 2007. For this kind of information you might want to keep an eye on the official &#034;System Center Operations Manager Command Shell&#034; blog: <a href="http://blogs.msdn.com/scshell/" title="http://blogs.msdn.com/scshell/">http://blogs.msdn.com/scshell/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/01/25/looking-at-opsmgr2007-alert-trend-with-command-shell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Welcome www.powershell.it!</title>
		<link>http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/</link>
		<comments>http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 21:35:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/</guid>
		<description><![CDATA[I just read from Jeffrey Snover about this newly born Italian PowerShell community site. I just created an account for myself on the site&#8230; as you know I like PowerShell, so even if I usually prefer writing stuff in english, I will try to hang out there and see how can I contribute to it. [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://blogs.msdn.com/powershell/archive/2008/01/04/www-powershell-it-italian-powershell-community-website.aspx">just read from Jeffrey Snover</a> about this newly born <a href="http://www.powershell.it/">Italian PowerShell community site</a>.</p>
<p>I just created an account for myself on the site&#8230; as you know <a href="http://www.muscetta.com/category/powershell/">I like PowerShell</a>, so even if I usually prefer writing stuff in english, I will try to hang out there and see how can I contribute to it.</p>
<p>After all, I am italian&#8230; <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2008/01/04/welcome-wwwpowershellit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simply Works</title>
		<link>http://www.muscetta.com/2007/12/27/simply-works/</link>
		<comments>http://www.muscetta.com/2007/12/27/simply-works/#comments</comments>
		<pubDate>Thu, 27 Dec 2007 18:24:27 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Energy]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[lifestream]]></category>
		<category><![CDATA[Risk]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/12/27/simply-works/</guid>
		<description><![CDATA[Simply Works, uploaded by Daniele Muscetta on Flickr. I don&#039;t know about other people, but I do get a lot to think when the end of the year approaches: all that I&#039;ve done, what I have not yet done, what I would like to do, and so on&#8230; And it is a period when memories [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/2141526220/"><img src="http://farm3.static.flickr.com/2222/2141526220_7754fa3134.jpg" alt="Simply Works" class="flickr-photo" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/2141526220/">Simply Works</a>, uploaded by <a href="http://www.flickr.com/people/dani3l3/">Daniele Muscetta</a> on Flickr.</span></p>
<p class="flickr-yourcomment">I don&#039;t know about other people, but I do get a lot to think when the end of the year approaches: all that I&#039;ve done, what I have not yet done, what I would like to do, and so on&#8230;</p>
<p>And it is a period when memories surface.</p>
<p>I found the two old CD-ROMs you can see in the picture. And those are memories.<br />
missioncritical software was the company that invented a lot of stuff that became Microsoft&#039;s products: for example <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6f86937b-533a-466d-a8e8-aff85ad3d212&amp;displaylang=en">ADMT</a> and <a href="http://www.microsoft.com/systemcenter/opsmgr/default.mspx">Operations Manager</a>.</p>
<p>The black CD contains SeNTry, the &#034;enterprise event manager&#034;, what later became Operations Manager.<br />
On the back of the CD, the company motto at the time: &#034;software that works simply and simply works&#034;.<br />
So true. I might digress on this concept, but I won&#039;t do that right now.</p>
<p>I have already explained in my other blog <a href="http://blogs.msdn.com/dmuscett/archive/2005/09/02/459914.aspx">what I do for work</a>. Well, that was a couple of years ago anyway. Several things have changed, and we are moving towards offering services that are more measurable and professional. So, since it happens that in a certain job you need to be an &#034;expert&#034; and &#034;specialize&#034; in order to be &#034;seen&#034; or &#034;noticed&#034;.<br />
You know <a href="http://www.muscetta.com/2006/05/29/specialization-is-bullshit/">I don&#039;t really believe in specialization</a>. I have written it <a href="http://www.muscetta.com/2006/11/05/more-on-specialization/">all over the place</a>. But you need to make other people happy as well and let them believe what they want, so when you &#034;specialize&#034; they are happier. No, really, it might make a difference in your carrer <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In this regard, I did also mention my <a href="http://blogs.msdn.com/dmuscett/archive/2004/11/18/263280.aspx">&#034;meeting again&#034; with Operations Manager</a>.<br />
That&#039;s where Operations manager helped me: it let me &#034;specialize&#034; in systems and applications management&#8230; a field where you need to know a bit of everything anyway: infrastructure, security, logging, scripting, databases, and so on&#8230; <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
This way, everyone wins.</p>
<p>Don&#039;t misunderstand me, this does not mean I want to know everything. One cannot possibly know everything, and the more I learn the more I believe I know nothing at all, to be honest. I don&#039;t know everything, <a href="http://thedailywtf.com/Articles/Classic-WTF-Lock-In-Key-Security.aspx">so please don&#039;t ask me everything &#8211; I work with mainframes</a> <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
While that can be a great excuse to avoid neighbours and relatives annoyances with their PCs though, on the serious side I still believe that any intelligent individual cannot be locked into doing a narrow thing and know only that one bit just because it is common thought that you have to act that way.</p>
<p>If I would <a href="http://twitter.com/gapingvoid/statuses/535752142">stop where I have to stop</a> I would be the standard &#034;IT Pro&#034;. I would be fine, sure, but I would get bored soon. I would not learn anything. <a href="http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/">But I don&#039;t feel I am the standard &#034;IT Pro&#034;</a>. In fact, funnily enough, <a href="http://www.google.com/search?hl=en&amp;q=link:www.muscetta.com&amp;btnG=Search">on some other blogs out there I have been referenced as a &#034;Dev&#034;</a> (find it on your own, look at their blogrolls <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ). But I am not a Dev either then&#8230; I don&#039;t write code for work. I would love to, but I rarely actually do, other than some scripts. Anyway, I tend to escape the definition of the usual &#034;expert&#034; on something&#8230; mostly because I want to escape it. I don&#039;t see myself represented by those generalization.</p>
<p>As <a href="http://haacked.com/archive/2007/12/21/faceoff-haack-vs-hanselman-it-gets-real.aspx">Phil puts it</a>, when asked &#034;Are software developers &#8211; engineers or artists?&#034;:</p>
<blockquote><p>&#034;[...] Don’t take this as a copout, but a little of both. I see it more as craftsmanship. Engineering relies on a lot of science. Much of it is demonstrably empirical and constrained by the laws of physics. Software is less constrained by physics as it is by the limits of the mind. [...]&#034;</p></blockquote>
<p>Craftmanship. Not science.<br />
And stop calling me an &#034;engineer&#034;. I am not an engineer. I was even crap in math, in school!</p>
<p>Anyway, what does this all mean? In practical terms, it means that in the end, wether I want it or not, I do get considered an &#034;expert&#034; on MOM and OpsMgr&#8230; and that I will mostly work on those products for the next year too. But that is not bad, because, as I said, working on that product means working on many more things too. Also, I can point to different audiences: those believing in &#034;experts&#034; and those going beyond schemes. It also means that I will have to continue teaching a couple of scripting classes (both VBScript and PowerShell) that nobody else seems to be willing to do (because they are all *expert* in something narrow), and that I will still be hacking together my other stuff (my facebook apps, my wordpress theme and plugins, my server, etc) and even continue to have strong opinions in those other fields that I find interesting and where I am not considered an *expert* <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Well, I suppose I&#039;ve been ranting enough for today&#8230;and for this year <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /><br />
I really want to wish everybody again a great beginning of 2008!!! What are you going to be busy with, in 2008 ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/12/27/simply-works/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Monitoring Syslog with OpsMgr 2007</title>
		<link>http://www.muscetta.com/2007/11/09/monitoring-syslog-with-opsmgr-2007/</link>
		<comments>http://www.muscetta.com/2007/11/09/monitoring-syslog-with-opsmgr-2007/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 12:45:05 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/11/09/monitoring-syslog-with-opsmgr-2007/</guid>
		<description><![CDATA[I had missed it&#8230; finally guidance on how to collect and monitor UNIX syslog in System Center Operations Manager 2007 has been published! This is much more sysadmin-oriented than what was availble before (that remais of course still relevant, but more from a Management Pack developer&#039;s point of view, who wants to know how things [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I had missed it&#8230; finally guidance on <a href="http://support.microsoft.com/kb/942863">how to collect and monitor UNIX syslog in System Center Operations Manager 2007</a> has been published!</p>
<p>This is much more sysadmin-oriented than <a href="http://blogs.msdn.com/komal/archive/2007/10/05/syslog-module-enhanced.aspx">what was availble before</a> (that remais of course still relevant, but more from a Management Pack developer&#039;s point of view, who wants to know how things work &#034;behind the hood&#034;).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/11/09/monitoring-syslog-with-opsmgr-2007/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Live ID to authenticate to WordPress</title>
		<link>http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/</link>
		<comments>http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 21:39:23 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[LiveID]]></category>
		<category><![CDATA[Passport]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WebSite]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/</guid>
		<description><![CDATA[Yesterday I&#039;ve been hacking a bit with the Windows Live ID SDK and I wrote a very small and simple plugin for WordPress that enables you to login in to WordPress with your passport Live ID. I had read in various places that such a plugin would be welcome&#8230; I looked around and found none [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Yesterday I&#039;ve been hacking a bit with the <a href="http://msdn2.microsoft.com/en-us/library/bb676633.aspx">Windows Live ID SDK</a> and I wrote a very small and simple plugin for <a href="http://www.wordpress.org/">WordPress</a> that enables you to login in to WordPress with your <span style="text-decoration: line-through;">passport</span> Live ID.<br />
I had read <a href="http://wordpress.org/extend/ideas/topic.php?id=689">in various</a> <a href="http://microsoft.blognewschannel.com/archives/2007/08/17/windows-live-id-cardspace-info-cards-available-for-websites">places</a> that such a plugin would be welcome&#8230; I looked around and found none yet (if anyone has instead already written something like this and I missed it I will happily waste the simple stuff I did  for something more advanced/well written&#8230; just let me know <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ).<br />
I took a look at <a href="http://mvolo.com/blogs/serverside/archive/2007/08/12/IIS-Authentication-plugin-for-the-Wordpress-PHP-blogging-engine.aspx">a similar experiment</a>, and eventually even found that there is <a href="http://verselogic.net/projects/wordpress/wordpress-openid-plugin">some conceptually similar plugin written to work with OpenID</a>. The wordpress openid plugin is much more complex and much more advanced than what I did, tough. It will let you log in with just ANY OpenID user, it will automatically create a user for you on that wordpress installation and associate it with your ID, even just for the purpose of commenting, etc.</p>
<p>But in my blog I don&#039;t require or need people to actually log in to do anything. I actually like anonymous/free comment. A CAPTCHA takes care of spammers and I am fine with it so far. Probably for a big site with a lot of users it might make sense, but for my blog so far it doesn&#039;t. But there&#039;s one thing for which this is instead useful: I have always been worried, when logging in through HTTP (thus, without SSL) to my blog from networks I don&#039;t manage or completely trust, that my password could be sniffed over the wire and stolen. Live ID solves my problem by letting Microsoft validate my identity: I have associated my Live ID to the blog&#039;s main user account(=myself), the one writing this post. So the plugin in its current form <a href="http://www.muscetta.com/wp-content/plugins/liveauth/auth.php">is used as a replacement of the login form</a> (the <a href="http://www.muscetta.com/wp-login.php">standard wp-login.php wordpress form</a> CAN still be used if you like, of course, you just don&#039;t HAVE to. Also the use of xmlrpc will still require local user/pwd combination.). Anyway, this new form will authenticate you thorugh Live ID and then check if your Live ID is associated to any local user. If it is, it will log you on to wordpress with that account. Otherwise it will inform you that you are successfully logged on to passport Live, but unfortunately there is no corresponding local account for you, and that it would need to be set up. Setting it up is as difficult as adding a line to the database&#8230; probably adding a form or a property page would be nice, but in my case I just did it with a query:</p>
<p>INSERT INTO `wordpress`.`wp-usermeta` (<br />
`umeta_id` ,<br />
`user_id` ,<br />
`meta_key` ,<br />
`meta_value`<br />
)<br />
VALUES (<br />
NULL , &#039;1&#039;, &#039;LiveID&#039;, &#039;f11fa1d3e82c68776f94a3a5c459b70b&#039;<br />
);</p>
<p>which adds an extra &#034;property&#034; for the first user (admin) called &#039;LiveID&#039; which contains your Live ID (the one above is not my real one, in case you were wondering). When you are authenticated by LiveID and you get back this value, the plugin checks in this table which WordPress userid in the database has been associated with this Live ID and &#8211; if it finds one &#8211; it authenticates you as that user. Of course you should not have duplicates.</p>
<p>My code is mostly based on <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=8BA187E5-3630-437D-AFDF-59AB699A483D&amp;displaylang=en">the SDK PHP Sample</a>, with some modification to integrate it in WordPress as a plugin. Of course I removed the file that is used as &#034;user database&#034; and used wordpress DB instead.</p>
<p>There&#039;s a ton of things that could be improved. I just did not put any more effort and time in it. As you might know if you read this blog, I am not a full time developer. Actually I shouldn&#039;t write code at all for work and I am mainly considered an &#034;infrastructure&#034; guy. Anyway, I would like to code more and even if I am not supposed to, I always try to find stimulating situations that require a bit of integration, thinking out of the box, some scripting, etc&#8230;</p>
<p><strong>[updated: november 3rd 2007]</strong> You can download the sample plugin &#034;AS-IS&#034; here: <strong><a href="http://www.muscetta.com/wp-content/uploads/liveauth.zip">liveauth.zip</a></strong> . This has only been tested and only works with WordPress 2.3.x serie (but should also work with earlier versions &#8211; not tested) <a href="http://www.muscetta.com/wp-content/uploads/liveauth.zip"><br />
</a><br />
<strong>[updated: march 30th 2008]</strong> <a href="http://wordpress.org/development/2008/03/wordpress-25-brecker/">WordPress 2.5</a> has changed the way the authentication cookie is generated, therefore here is an updated version of the plugin that works with the new secure cookies: <strong><a href="http://www.muscetta.com/wp-content/uploads/liveauth02.zip">liveauth02.zip</a></strong><br />
I should really invest some more time in this and clear up the code. I should also make an interface to make the configuration easier, and maybe make a version that works on both 2.3 and 2.5 branches. I am not sure when I will have time for that, though&#8230;</p>
<p><strong>[updated: april 20th 2008]</strong> I have released version 0.3c of the plugin which now finally includes a simple configuration page, and should work on both WordPress 2.3 (and older) and on the 2.5 brach. Please visit the new Windows <strong><a href="http://www.muscetta.com/live-id-wordpress-plugin/">Live ID Authentication WordPress Plugin Page</a></strong>.<a href="http://www.muscetta.com/wp-content/uploads/liveauth.zip"><br />
</a></p>
<p><strong>Disclaimer:</strong><br />
The information in this weblog is provided &#034;AS IS&#034; with no warranties, and confers no rights. This weblog does not represent the thoughts, intentions, plans or strategies of my employer. It is solely my own personal opinion. All code samples are provided &#034;AS IS&#034; without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.<br />
THIS WORK IS NOT ENDORSED AND NOT EVEN CHECKED, AUTHORIZED, SCRUTINIZED NOR APPROVED BY MY EMPLOYER, AND IT ONLY REPRESENT SOMETHING WHICH I&#039;VE DONE IN MY FREE TIME. NO GUARANTEE WHATSOEVER IS GIVEN ON THIS. THE AUTHOR SHALL NOT BE MADE RESPONSIBLE FOR ANY DAMAGE YOU MIGHT INCUR WHEN USING THIS PROGRAM.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/11/02/using-live-id-to-authenticate-to-wordpress/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Live Photo Gallery and Flickr</title>
		<link>http://www.muscetta.com/2007/10/25/live-gallery-and-flickr/</link>
		<comments>http://www.muscetta.com/2007/10/25/live-gallery-and-flickr/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 10:48:21 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Vista]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/10/25/live-gallery-and-flickr/</guid>
		<description><![CDATA[I actually read this (Live Photo Gallery  allowing you to post to Flickr) a couple of days ago in an internal mail, and &#8211; even tough I Love Flickr - I have been extremely quiet and cautious and I did not blog about it. In fact I felt like waiting about blogging this GREAT new, because I [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I actually read this (<a href="http://get.live.com/betas/photogallery_betas">Live Photo Gallery</a>  allowing you to post to <a href="http://www.flickr.com">Flickr</a>) a couple of days ago in an internal mail, and &#8211; even tough I Love <a href="http://www.flickr.com/photos/dani3l3">Flickr</a> - I have been extremely quiet and cautious and I did not blog about it. In fact I felt like waiting about blogging this GREAT new, because I thought that it was internal-only, confidential information, and I was worried that someone would tell me off <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<p>In the end it turns out that I did not have to wait or be worried, since <a href="http://blogs.msdn.com/pix/archive/2007/10/18/do-you-use-flickr-then-check-out-windows-live-photo-gallery-beta.aspx">the cat was already out of the bag</a>!!!</p>
<p>[As a side note, it happens a lot of times that stuff gets public much earlier than when I actually read that internally. In those internal communication it very often is still considered "confidential" when the whole world is speaking about it.... I don't get this whole "confidentiality" thing in these days of <a href="http://www.gapingvoid.com/Moveable_Type/archives/001607.html">porous membranes</a>...]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/10/25/live-gallery-and-flickr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Security Fixes ISO images</title>
		<link>http://www.muscetta.com/2007/10/25/security-fixes-iso-images/</link>
		<comments>http://www.muscetta.com/2007/10/25/security-fixes-iso-images/#comments</comments>
		<pubDate>Thu, 25 Oct 2007 08:51:28 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/10/25/security-fixes-iso-images/</guid>
		<description><![CDATA[I learn now from Robert Hensing that Microsoft provides ISO images of DVD containing the security fixes for those who can&#039;t do an online update due to bandwidth and other constraints. It has probably been there for ages, only I had missed it. And if I have missed it, I am quite sure that a [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://blogs.technet.com/robert_hensing/archive/2007/10/24/getting-microsoft-updates-offline.aspx">I learn now from Robert Hensing</a> that <a href="http://support.microsoft.com/kb/913086">Microsoft provides ISO images of DVD containing the security fixes</a> for those who can&#039;t do an online update due to bandwidth and other constraints. It has probably been there for ages, only I had missed it. And if I have missed it, I am quite sure that a lot of other people have missed it too. So, it does not hurt to &#034;echo&#034; it <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/10/25/security-fixes-iso-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft in the Open</title>
		<link>http://www.muscetta.com/2007/10/18/microsoft-in-the-open/</link>
		<comments>http://www.muscetta.com/2007/10/18/microsoft-in-the-open/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 10:31:26 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Open]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/10/18/microsoft-in-the-open/</guid>
		<description><![CDATA[Two of Microsoft’s Shared Source licenses have been approved by the OSI. Read more on port25! (yes, I did read this yesterday, but I was teaching and then travelling so I did not make it to blog).<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Two of Microsoft’s Shared Source licenses <a href="http://opensource.org/node/207">have been approved by the OSI</a>. <a href="http://port25.technet.com/archive/2007/10/16/microsoft-out-in-the-open.aspx">Read more on port25</a>! (yes, I did read this yesterday, but I was teaching and then travelling so I did not make it to blog).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/10/18/microsoft-in-the-open/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.Net Framework CODE is going to be available!</title>
		<link>http://www.muscetta.com/2007/10/04/net-framework-code-is-going-to-be-available/</link>
		<comments>http://www.muscetta.com/2007/10/04/net-framework-code-is-going-to-be-available/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 06:01:11 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[MS Italy Blogs]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/10/04/net-framework-code-is-going-to-be-available/</guid>
		<description><![CDATA[I am amazed and excited to read that Microsoft has decided to release the source code of the .Net libraries. Scott Guthrie writes: &#034;[...] One of the things my team has been working to enable has been the ability for .NET developers to download and browse the source code of the .NET Framework libraries, and [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am amazed and excited to <a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx">read that Microsoft has decided to release the source code of the .Net libraries</a>.</p>
<p>Scott Guthrie writes:</p>
<blockquote><p><em>&#034;[...] One of the things my team has been working to enable has been the ability for .NET developers to download and browse the source code of the .NET Framework libraries, and to easily enable debugging support in them. [...] VS 2008 will include support to automatically retrieve the appropriate .NET Framework source files on demand from Microsoft.  This means that the source code for the ASP.NET GridView and BaseDataBoundControl classes above do not have to already be installed on the machine before we started the debugger.  Instead, when we use F11 to step into their implementation VS can automatically download the source files from Microsoft and open it within the IDE. [...]&#034;</em></p></blockquote>
<p>WOW. This is so cool, and a further step in the right direction.</p>
<p>Thanks to <a href="http://blogs.technet.com/alead_msft/archive/2007/10/03/codice-sorgente-delle-librerie-del-framework-net-aperto.aspx">Alessandro</a> for having picked this up, as I read it on his blog, and I thought it was an information worth spreading!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/10/04/net-framework-code-is-going-to-be-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu on Virtual PC 2007</title>
		<link>http://www.muscetta.com/2007/09/26/ubuntu-on-virtual-pc-2007/</link>
		<comments>http://www.muscetta.com/2007/09/26/ubuntu-on-virtual-pc-2007/#comments</comments>
		<pubDate>Wed, 26 Sep 2007 17:30:34 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/26/ubuntu-on-virtual-pc-2007/</guid>
		<description><![CDATA[Ubuntu on Virtual PC 2007, uploaded by Daniele Muscetta on Flickr. This was a VMWare &#034;virtual appliance&#034; with Ubuntu that I was using for testing. As I mostly use Virtual PC or Virtual Server, I found it annoying having to switch to VMWare player to use that specific machine, and I could not be asked [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<style type="text/css">    .flickr-photo { border: solid 2px #000000; }  .flickr-yourcomment { }  .flickr-frame { text-align: left; padding: 3px; }  .flickr-caption { font-size: 0.8em; margin-top: 0px; }</style>
<p class="flickr-frame"><a href="http://www.flickr.com/photos/dani3l3/1442745259/" title="photo sharing"><img src="http://farm2.static.flickr.com/1258/1442745259_35ae73bd8c.jpg" alt="Ubuntu on Virtual PC 2007" class="flickr-photo" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/1442745259/">Ubuntu on Virtual PC 2007</a>, uploaded by <a href="http://www.flickr.com/people/dani3l3/">Daniele Muscetta</a> on Flickr.</span>
</p>
<p class="flickr-yourcomment">This was a VMWare &#034;virtual appliance&#034; with Ubuntu that I was using for testing. As I mostly use Virtual PC or Virtual Server, I found it annoying having to switch to VMWare player to use that specific machine, and I could not be asked to install a new one. So I converted the .VMDK to .VHD format (the other way around than it is described on <a href="http://www.techlog.nl/archive/2007/08/29/convert_virtual_disks_from_vhd">this article</a> ).</p>
<p>After that, I had to change GRUB&#039;s configuration to inform it that the SCSI disk (/dev/sda1) was all of a sudden become an IDE one (/dev/hda1), and then I also had to reconfigure X.</p>
<p>After that it runs like a charme!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/26/ubuntu-on-virtual-pc-2007/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Windows Server 2008 Release Candidate available!!</title>
		<link>http://www.muscetta.com/2007/09/25/windows-server-2008-release-candidate-available/</link>
		<comments>http://www.muscetta.com/2007/09/25/windows-server-2008-release-candidate-available/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 13:10:54 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/25/windows-server-2008-release-candidate-available/</guid>
		<description><![CDATA[It can be downloaded from here. The Italian Technet team has a nice post about it (in Italian). Go download it, and enjoy your testing!<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>It can be downloaded from <a href="http://www.microsoft.com/technet/prodtechnol/beta/lhs/default.mspx">here</a>. The Italian Technet team has <a href="http://blogs.technet.com/italy/archive/2007/09/25/disponibile-la-release-candidate-0-di-windows-server-2008.aspx">a nice post about it</a> (in Italian). Go download it, and enjoy your testing!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/25/windows-server-2008-release-candidate-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Live Install on 2003 Server ?</title>
		<link>http://www.muscetta.com/2007/09/13/windows-live-install-on-2003-server/</link>
		<comments>http://www.muscetta.com/2007/09/13/windows-live-install-on-2003-server/#comments</comments>
		<pubDate>Thu, 13 Sep 2007 18:40:31 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/13/windows-live-install-on-2003-server/</guid>
		<description><![CDATA[I used to have Windows Live Writer and Windows Live Messenger on my Windows 2003 Server box. Now, this new fantastic integrated setup says it won&#039;t install on this operating system. Ridiculous. You read the release notes, and in fact it only says Windows XP and Vista. I see. Well, I happen to use a [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<style type="text/css">    .flickr-photo { border: solid 2px #000000; }  .flickr-yourcomment { }  .flickr-frame { text-align: left; padding: 3px; }  .flickr-caption { font-size: 0.8em; margin-top: 0px; }</style>
<p class="flickr-frame"><a href="http://www.flickr.com/photos/dani3l3/1367258774/" title="photo sharing"><img src="http://farm2.static.flickr.com/1182/1367258774_0fb46fdf80.jpg" alt="Windows Live Install on 2003 Server ?" class="flickr-photo" /></a></p>
<p>I used to have <a href="http://get.live.com/betas/writer_betas">Windows Live Writer</a> and <a href="http://get.live.com/betas/messenger_betas">Windows Live Messenger</a> on my <a href="http://www.microsoft.com/windowsserver2003/default.mspx">Windows 2003 Server</a> box. Now, <a href="http://windowslivewire.spaces.live.com/blog/cns!2F7EB29B42641D59!224.entry">this new fantastic integrated setup</a> says it won&#039;t install on this operating system. Ridiculous. You read the release notes, and in fact it only says Windows XP and Vista.</p>
<p>I see.</p>
<p>Well, I happen to use a Windows 2003 Server at home &#8211; the same machine for day to day use (like writing this post or checking private email) and doing some study/testing. I don&#039;t have loads of machines. I don&#039;t actually have money for a new machine (even if I would really need a new one to test stuff).<br />
I try to do more with less.</p>
<p>Well, if this does not install, what am I supposed to do ?<br />
I want to chat with people, which means I&#039;ll keep using <a href="http://www.pidgin.im">Pidgin</a> on this machine. That way I also have my GTalk, ICQ and Yahoo buddies all in one place. And it eats up much less memory that the &#034;real&#034; live messenger. And without advertisements. How nice.</p>
<p>I am sorry when my employer does this kind of stupid things. This is not interoperability. It does not even work on OUR operating systems!</p>
<p>As for Windows Live Writer, <a href="http://haacked.com/archive/2007/07/29/cleanup-the-crap-that-windows-live-writer-injects-with-this.aspx">read Phil&#039;s post</a>. It seems like FrontPage, all over again.<br />
For writing this post I&#039;ve used <a href="http://www.flickr.com">Flickr</a>.<br />
Since I happen to post quite a bunch of photos or images on my blog, I find it ideal. The ONLY thing Flickr is missing, when used as a blogging tool, is the ability to post tags/categories too. Otherwise it would be perfect.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/13/windows-live-install-on-2003-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ITPro vs. Dev: there is no such a thing.</title>
		<link>http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/</link>
		<comments>http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/#comments</comments>
		<pubDate>Tue, 11 Sep 2007 19:05:49 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/</guid>
		<description><![CDATA[Dave Winer wisely writes: [...] I&#039;ve been pushing the idea that every app should be a platform for a long time, that in addition to a user interface, every app should have a programmatic interface. For me the idea came from growing up using Unix in the 70s, where every app is a toolkit and [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.scripting.com/stories/2007/09/10/shouldEveryAppBeAPlatform.html">Dave Winer wisely writes</a>:</p>
<blockquote><p><em>[...] I&#039;ve been pushing the idea that every app should be a platform for a long time, that in addition to a user interface, every app should have a programmatic interface. For me the idea came from growing up <strong>using Unix</strong> in the 70s, <strong>where every app is a toolkit and the operating system is a scripting language</strong>. Wiring things together is an integral part of being a Unix user. It&#039;s why programmers like Unix so much [...]</em></p></blockquote>
<p>It is entirely true. The limits are blurry, IMHO. In the Unix world it is common to find full-fledged &#034;applications&#034; which have been written by the ground up by people that were doing SysAdmin tasks, and those &#034;applications&#034; are usually just&#8230; scripts. Simple shell scripts, or something more evolved (PERL, PHP, Python) it does not really matter.</p>
<p>I am so tired of the division traditionally made in the Microsoft world between &#034;Developers&#034; and &#034;IT Professionals&#034;. We even have separate sites for the two audiences: <a href="http://msdn.microsoft.com">MSDN</a> and <a href="http://technet.microsoft.com">Technet</a>. There are separate &#034;TechED&#034; events: for&#034;<a href="http://www.mseventseurope.com/teched/07/developers/Content/Pages/Default.aspx">Devs</a>&#034; and for &#034;<a href="http://www.mseventseurope.com/teched/07/itforum/Content/Pages/Default.aspx">IT Pros</a>&#034;. There are blogs that are divided among the two &#034;audiences&#034;&#8230;</p>
<p>There aren&#039;t two different audiences, really. There are people, with various degrees of expertise. There is no such a thing as a &#034;developer&#034; if he doesn&#039;t know a bit how the underlying system works. His code is gonna suck. And there is not such a thing such a &#034;IT Pro&#034; that builds and integrates and manages systems if he does not have the palest idea of how things work &#034;behind the GUI&#034;. He&#039;s gonna screw things up regardless of how many step-by-step (click-by-click ?) procedures you spoon feed him.</p>
<p>That&#039;s why automation and integration are best done by people who know how to write a bit code.</p>
<p>The <a href="http://www.microsoft.com/powershell">PowerShell</a> <a href="http://blogs.msdn.com/PowerShell/">folk</a> GET IT.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/09/11/itpro-vs-dev-there-is-no-such-a-thing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Open Source Projects and Microsoft</title>
		<link>http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/</link>
		<comments>http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 12:16:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/</guid>
		<description><![CDATA[This CNet article about CodePlex has some VERY interesting points: [...] Bayarsaikhan has posted the top 25 most active open-source projects on Microsoft&#039;s Codeplex site. Looking at the list, it looks like Microsoft developers spend their time doing much the same as the rest of the Java/other world: play games and make the Web world pretty [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://news.com.com/8301-10784_3-9761998-7.html">This CNet article about CodePlex</a> has some VERY interesting points:</p>
<blockquote><p><em>[...] Bayarsaikhan </em><a href="http://www.plentyofcode.com/2007/08/most-active-open-source-projects-in.html" class="external-link"><font color="#0048c0"><em>has posted</em></font></a><em> the top 25 most active open-source projects on </em><a href="http://www.codeplex.com/"><font color="#20328e"><em>Microsoft&#039;s Codeplex</em></font></a><em> site. Looking at the list, it looks like Microsoft developers spend their time doing much the same as the rest of the Java/other world: play games and make the Web world pretty with AJAX. You can see the top project interests below in the Codeplex tag cloud.</em></p>
<p><em>Codeplex is interesting to me for several reasons, but primarily because it demonstrates something that I&#039;ve argued for many years now: </em><a href="http://asay.blogspot.com/2005/06/windows-as-open-source-platform.html" class="external-link"><font color="#0048c0"><em>open source on the Windows platform is a huge opportunity for Microsoft</em></font></a><em>. It is something for the company to embrace, not despise.</em></p>
<p><em>And it does several things well (better than Sourceforge, in my opinion) [...]</em></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/24/open-source-projects-and-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tafiti</title>
		<link>http://www.muscetta.com/2007/08/23/tafiti/</link>
		<comments>http://www.muscetta.com/2007/08/23/tafiti/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 15:30:57 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Search]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Tree]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/23/tafiti/</guid>
		<description><![CDATA[Tafiti, uploaded by Daniele Muscetta on Flickr. www.tafiti.com/#p=0&#38;q=%22Daniele%20Muscetta%22 Try it out.<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<style type="text/css">      .flickr-photo { border: solid 2px #000000; }  .flickr-yourcomment { }  .flickr-frame { text-align: left; padding: 3px; }  .flickr-caption { font-size: 0.8em; margin-top: 0px; }</style>
<p class="flickr-frame"><a href="http://www.flickr.com/photos/dani3l3/1214899138/" title="photo sharing"><img src="http://farm2.static.flickr.com/1085/1214899138_6ca27a6f53.jpg" alt="Tafiti" class="flickr-photo" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/1214899138/">Tafiti</a>, uploaded by <a href="http://www.flickr.com/people/dani3l3/">Daniele Muscetta</a> on Flickr.</span></p>
<p class="flickr-yourcomment"><a href="http://www.tafiti.com/#p=0&amp;q=%22Daniele%20Muscetta%22">www.tafiti.com/#p=0&amp;q=%22Daniele%20Muscetta%22</a></p>
<p>Try it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/23/tafiti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to get a funky-colored Logon Desktop</title>
		<link>http://www.muscetta.com/2007/08/20/how-to-get-a-funky-colored-logon-desktop/</link>
		<comments>http://www.muscetta.com/2007/08/20/how-to-get-a-funky-colored-logon-desktop/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 11:32:07 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[colors]]></category>
		<category><![CDATA[registry]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/20/how-to-get-a-funky-colored-logon-desktop/</guid>
		<description><![CDATA[aka &#8211; how to (mis)use the information in a KB article to make your logon screen on Windows 2003 Server look like a candy shop: http://support.microsoft.com/?id=906510<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>aka &#8211; how to (mis)use the information in a KB article to make your logon screen on Windows 2003 Server look like a candy shop: <a href="http://support.microsoft.com/?id=906510">http://support.microsoft.com/?id=906510</a></p>
<p><a href="http://www.muscetta.com/wp-content/uploads/funky_logon_screen.jpg" rel="lightbox[210]"><img class="alignnone size-medium wp-image-255" title="Candy Colored Logon Screen" src="http://www.muscetta.com/wp-content/uploads/funky_logon_screen-300x203.jpg" alt="" width="300" height="203" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/20/how-to-get-a-funky-colored-logon-desktop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Live ID Web Authentication 1.0 SDK !</title>
		<link>http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/</link>
		<comments>http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/#comments</comments>
		<pubDate>Thu, 16 Aug 2007 14:28:50 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Hotmail]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[LiveID]]></category>
		<category><![CDATA[Passport]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/</guid>
		<description><![CDATA[Check this out: Windows Live ID Team has published on the web the SDK that lets you liveID (or &#034;passport&#034;)-enable your applications! http://msdn2.microsoft.com/en-us/library/bb676633.aspx There are even code samples in six different languages: C#, Java, PHP, Python, Ruby e Perl! You can download them from http://go.microsoft.com/fwlink/?LinkId=91761 Wow! Having time, it would be cool to write a [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Check this out:</p>
<p>Windows Live ID Team has published on the web the SDK that lets you liveID (or &#034;passport&#034;)-enable your applications!</p>
<p><a href="http://msdn2.microsoft.com/en-us/library/bb676633.aspx">http://msdn2.microsoft.com/en-us/library/bb676633.aspx</a></p>
<p>There are even code samples in six different languages: C#, Java, PHP, Python, Ruby e Perl! You can download them from <a href="http://go.microsoft.com/fwlink/?LinkId=91761">http://go.microsoft.com/fwlink/?LinkId=91761</a></p>
<p>Wow! Having time, it would be cool to write a WordPress plugin using Passport authentication to authenticate/identify users that want to comment&#8230; mumble mumble&#8230;.. <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Interoperability. Wow.</p>
<p>More info at the Live ID starting Page: <a href="http://dev.live.com/blogs/liveid/archive/2006/05/18/8.aspx">http://dev.live.com/blogs/liveid/archive/2006/05/18/8.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/16/windows-live-id-web-authentication-10-sdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#039;t touch the Surface!</title>
		<link>http://www.muscetta.com/2007/08/13/dont-touch-the-surface/</link>
		<comments>http://www.muscetta.com/2007/08/13/dont-touch-the-surface/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 14:29:54 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Funny]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/13/dont-touch-the-surface/</guid>
		<description><![CDATA[I am sorry I only read this blog post by Eileen Brown today, not when she posted it. It got lost somewhere among loads of other feeds. Anyway I am sorry I read it so late, because, by now, commenting on that post is not possible anymore. Hope she does get the pingback at least&#8230; Anyway, the post [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am sorry I only read <a href="http://blogs.technet.com/eileen_brown/archive/2007/06/28/touching-microsoft-surface-or-not.aspx">this blog post by Eileen Brown</a> today, not when she posted it. It got lost somewhere among loads of other feeds. Anyway I am sorry I read it so late, because, by now, commenting on that post is not possible anymore. Hope she does get the pingback at least&#8230;</p>
<p>Anyway, the post goes about <a href="http://www.microsoft.com/surface">Microsoft Surface</a>. Which is something really cool. Eileen goes saying that she&#039;s worried if her cat would jump on the touch-screen table doing some damage to her information / data /accounts&#8230;. when I first saw the technology presented, I actually thought sort of the same thing&#8230;. what about my son going to the table with his hands dirty of chocolate paste ?? <a href="http://blogs.msdn.com/dmuscett/archive/2005/01/06/347523.aspx">I have blogged in the past about the danger he poses&#8230;</a></p>
<p>Since kids these days do use the computers, having to replace keyboards because they are full of biscuits&#039;crumbles or because they spilled fruit juice on them is quite common. Just less expensive than the special touch-screen, at the moment&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/13/dont-touch-the-surface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Powershell and RegExp: a &quot;match&quot; made my day.</title>
		<link>http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/</link>
		<comments>http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/#comments</comments>
		<pubDate>Thu, 09 Aug 2007 18:45:31 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[ISA]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/</guid>
		<description><![CDATA[Today I was working with a customer and friend (Claudio Latini, who I thank for the permission to post this, which is also work of his brain &#8211; especially the regular expression you&#039;ll see reading on!). We are running several projects and activities together and, among several other things, he&#039;s in the process of migrating his users from [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Today I was working with a customer and friend (Claudio Latini, who I thank for the permission to post this, which is also work of his brain &#8211; especially the regular expression you&#039;ll see reading on!).</p>
<p>We are running several projects and activities together and, among several other things, he&#039;s in the process of migrating his users from Exchange 2003 to Exchange 2007. In this infrastructure, he has some ISA Server that publish both the Exchange2003 and the Exchange2007 frontends.</p>
<p>Now he wanted to know HOW MANY and WHICH ONES of his users actually have a PocketPC or other WIndows Mobile device and were actively connecting to the old FrontEnd. You give out mobile devices to people but those things are usually less &#034;managed&#034; &#8211; when compared to corporate PCs, at least. So you loose a bit control of the thing&#8230; usually people with mobile devices using ActiveSync in companies are managers, and especially since some of them might be on holiday at the moment, it was important to know WHO were the people that had to be told to reconfigure their device to point to the new name/server BEFORE he would start complaining about ActiveSync not working anymore&#8230;</p>
<p>So how do you figure out who&#039;s connecting ?</p>
<p>I am NO Exchange expert whatsoever&#8230; but a thing that came in handy was the thing that an ISA Server was reverse-publishing the frontend server. I know ISA (and firewalls/proxies in general) much better than Exchange, so I can help on that side. In the log files, ActiveSync Connections looked like the following URL, passing most parameters in the POST request: <a title="http://www.company.com/exchange?User=Mario&amp;DeviceID=186hkjw6gjw76463uh2g5gi2j3h&amp;Bla=bla" href="http://www.muscetta.org/Admin">http://www.company.com/exchange?User=Mario&amp;DeviceID=186hkjw6gjw76463uh2g5gi2j3h&amp;Bla=bla</a> (and on an unrelated note: yes, if you try to crawl this link, you are a bot <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</p>
<p>So we exported ISA logs (there are several tools for this, including &#034;<a href="http://www.isatools.org/tools/ISA_Extract_Logs_v1.8.zip">Extract logs</a>&#034;, but we did not use a script, we just used a filter for the correct publishing rule in the &#034;Monitoring &#8211; Logging&#034; tag in ISA Server Console and then copied and pasted those log lines) and tried to see if <a href="http://www.microsoft.com/powershell">PowerShell</a> could help tackle the issue.</p>
<p>Here we load our sample log (in a real log you would have much more information &#8211; each single line wrapping several console rows; I cut it short to the URL to make it more readable.</p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">PS&gt;</span> get-content log.txt    

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Gino&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Gino&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Antonio&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla

http://www.company.com/exchange?User=Mario&#038;DevideID=186hkjw6gjw76463uh2g5gi2j3h&#038;Bla=bla</pre>
<p>We know Get-Content does not just display the file, it loads the file into a string array.</p>
<p>So we can cycle through the file and try to extract (using a regexp) the string after &#034;User=&#034; and before the first ampersand (&#034;&amp;&#034;), which translates in the following regular expression:</p>
<p><strong>&#034;User=(?&lt;nome&gt;.*?)&amp;&#034;</strong></p>
<p>(the regexp has been the most difficult thing to figure out, but it is very worth the hassle once you&#039;ve done it&#8230;)</p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">PS&gt;</span> get-content log.txt | foreach {$_ -match "User=(?<span>&lt;</span>nome&gt;.*?)&amp;" | out-null; $matches}
Name                           Value
----                           -----
nome                           Mario
0                              User=Mario&amp; nome                           Gino
0                              User=Gino&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Gino
0                              User=Gino&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Antonio
0                              User=Antonio&amp;
nome                           Mario
0                              User=Mario&amp;
nome                           Mario
0                              User=Mario&amp;</pre>
<p>This seems to work. Now we only have to get the Named Captures called &#034;nome&#034; (containing the user name):</p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">PS&gt;</span> <strong>get-content log.txt | foreach {$_ -match "User=(?<span>&lt;</span>name&gt;.*?)&amp;" | out-null; $matches["name"]}
</strong>Mario
Gino
Antonio Antonio
Gino
Antonio
Antonio
Mario
Mario
Mario
Mario
Antonio
Antonio
Mario
Antonio
Antonio
Mario
Antonio
Antonio
Mario
Antonio
Antonio
Mario
Mario</pre>
<p>Awesome. Now sort them and remove duplicates. Which is one more command in our pipeline:</p>
<p><strong>get-content log.txt | foreach {$_ -match &#034;User=(?&lt;nome&gt;.*?)&amp;&#034; | out-null; $matches["nome"]} | sort-object -uniq</strong></p>
<pre style="color: #eeedf0; background-color: #012456"><span style="background-color: #012456; color: #00ff00;">P&gt;</span> get-content log.txt | foreach {$_ -match "User=(?<span>&lt;</span>name&gt;.*?)&amp;" | out-null; $matches["name"]} | sort-object -uniq
Antonio
Gino
Mario     

<span style="background-color: #012456; color: #00ff00;">PS&gt;</span>
<span style="background-color: #012456; color: #00ff00;">PS&gt;</span></pre>
<p>Now you can call those three users and tell them to modify their ActiveSync configuration <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/08/09/powershell-and-regexp-a-match-made-my-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The &quot;WOW&quot; starts *NOW*!</title>
		<link>http://www.muscetta.com/2007/07/27/the-wow-starts-now/</link>
		<comments>http://www.muscetta.com/2007/07/27/the-wow-starts-now/#comments</comments>
		<pubDate>Fri, 27 Jul 2007 05:21:48 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/07/27/the-wow-starts-now/</guid>
		<description><![CDATA[I&#039;m speechless. Read it on your own: http://www.microsoft.com/opensource/ . Wow.<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I&#039;m speechless. Read it on your own: <a href="http://www.microsoft.com/opensource/">http://www.microsoft.com/opensource/</a> . Wow.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/07/27/the-wow-starts-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IronPython and Visual Studio Shell</title>
		<link>http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/</link>
		<comments>http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/#comments</comments>
		<pubDate>Fri, 08 Jun 2007 17:47:03 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[IronPython]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/</guid>
		<description><![CDATA[I read on the IronPython Mailing List about this cool integration with Visual Studio Shell! Also, further in the same thread, you can find out that the current CTP of ASP.NET (ASP.NET Futures) also includes ironPython integration. Look at this:<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://lists.ironpython.com/pipermail/users-ironpython.com/2007-June/005045.html">I read on the IronPython Mailing List about this cool integration with Visual Studio Shell</a>! Also, further in the same thread, you can find out that <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=9323777E-FE78-430C-AD92-D5BE5B5EAD98&amp;displaylang=en">the current CTP of ASP.NET (ASP.NET Futures) also includes ironPython integration</a>. Look at this:</p>
<p><a href="http://msdn2.microsoft.com/en-us/vstudio/bb510103.vss_IronPython_large.jpg" title="IronPython running in VS Shell" rel="lightbox[188]"><img src="http://farm2.static.flickr.com/1213/536136720_869f05cb29.jpg" alt="IronPython running in VS Shell" height="389" width="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/06/08/ironpython-and-visual-studio-shell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This blog in C#</title>
		<link>http://www.muscetta.com/2007/05/30/this-blog-in-c/</link>
		<comments>http://www.muscetta.com/2007/05/30/this-blog-in-c/#comments</comments>
		<pubDate>Wed, 30 May 2007 10:18:21 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/30/this-blog-in-c/</guid>
		<description><![CDATA[I have been busy trying to write a new frontend for this blog that uses .Net. I already blogged about it here. In the last couple of weeks I have been adding stuff &#8211; permalinks using mod_rewrite, I finally show the comments properly, I have added categories and category archives (as in http://www.muscetta.net/dotnet/tag/coding). There is [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I have been busy trying to write <a href="http://www.muscetta.net/dotnet/Blog.aspx">a new frontend for this blog that uses .Net</a>. I already blogged about it <a href="http://www.muscetta.com/2007/05/01/wordpressnet/">here</a>. In the last couple of weeks I have been adding stuff &#8211; permalinks using mod_rewrite, I finally show the comments properly, I have added categories and category archives (as in <a href="http://www.muscetta.net/dotnet/tag/coding">http://www.muscetta.net/dotnet/tag/coding</a>). There is even an <a href="http://www.muscetta.net/dotnet/Feed.aspx">RSS Feed</a>.</p>
<p>The layout is still crap, but I sort of like it being so light weight, so that is not on my priority list so far. Moreover, I am a crap designer.</p>
<p>Before that, tough, I still have to add important functionalities like the possibility to POST comments (which needs a new CAPTCHA, etc, so it will take me a while), and I am having issues with text encoding (it does not show the accented characters properly, yet).</p>
<p>But I am having fun doing it.</p>
<p>[Edit of December 2009 - I killed the above experiment. I had fun doing it, but there is not time for all, it needs a lot of work to keep it running/update it with every wordpress update, and mod_mono is wasting too many resources on the server.]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/30/this-blog-in-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Death by right-click -&gt; Delete ? Nope. PowerShell.</title>
		<link>http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/</link>
		<comments>http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/#comments</comments>
		<pubDate>Wed, 30 May 2007 09:55:42 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/</guid>
		<description><![CDATA[So at one stage I was testing the RSS reader capabilities of Outlook 2007, and I imported an OPML file with roughly 500 feeds! Of course I was NOT interested in reading ALL of them, and it was causing quite a bit of work to do on my machine to fetch them all and sync [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>So at one stage I was testing the RSS reader capabilities of Outlook 2007, and I imported an OPML file with roughly 500 feeds! Of course I was NOT interested in reading ALL of them, and it was causing quite a bit of work to do on my machine to fetch them all and sync the content in my mailbox&#8230;</p>
<p>So I figured out it was possible to remove the subscription (from the Tools menu -&gt; Account Settings -&gt; RSS Feeds) but the folders were left there. Now, I didn&#039;t want to have those 500 folders in my mailbox, and I did not even want to die by right-clicking, pressing &#034;delete&#034;, confirming&#8230;. all of this 500 times! No way.</p>
<p>So I wrote this little PowerShell script, I guess it *might* be helpful to someone at one stage, who knows ?</p>
<p>[System.Reflection.Assembly]::LoadWithPartialName(&#039;Microsoft.Office.Interop.Outlook&#039;)<br />
$oApp = New-Object -COM &#039;Outlook.Application&#039;<br />
$rss = $oApp.GetNamespace(&#034;MAPI&#034;).GetDefaultFolder(&#034;olFolderRssFeeds&#034;)<br />
forach ($folder in $rss.Folders)<br />
{<br />
$folder.Delete()<br />
}</p>
<p>Please note that if you don&#039;t have the Office Interop Assemblies installed on your machine, you can&#039;t use the first line. As a result, you will have to change the third line hardcoding the number that represents the RSSFeeds folder, so it would become:</p>
<p>$rss = $oApp.GetNamespace(&#034;MAPI&#034;).GetDefaultFolder(25)</p>
<p>Note: I found out (later, of course) that there is a much more general post on this subject (that is, automating Outlook through PowerShell): <a href="http://www.leeholmes.com/blog/GettingThingsDoneOutlookTaskAutomationWithPowerShell.aspx">http://www.leeholmes.com/blog/GettingThingsDoneOutlookTaskAutomationWithPowerShell.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/30/death-by-right-click-delete-nope-powershell/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Popfly</title>
		<link>http://www.muscetta.com/2007/05/19/microsoft-popfly/</link>
		<comments>http://www.muscetta.com/2007/05/19/microsoft-popfly/#comments</comments>
		<pubDate>Sat, 19 May 2007 07:26:24 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Places]]></category>
		<category><![CDATA[popfly]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/19/microsoft-popfly/</guid>
		<description><![CDATA[You can build complex web-mashups in minutes. Read on an interesting review at programmableweb.com and, obviously, more info at the official site http://www.popfly.ms<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.popfly.ms" title="Microsoft Popfly"><img src="http://farm1.static.flickr.com/204/504146344_4b0ad07f51.jpg" alt="Microsoft Popfly" height="375" width="500" /></a></p>
<p>You can build complex web-mashups in minutes.</p>
<p>Read on <a href="http://blog.programmableweb.com/2007/05/19/microsoft-popfly/">an interesting review at programmableweb.com</a> and, obviously, more info at the <a href="http://www.popfly.ms">official site http://www.popfly.ms</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/19/microsoft-popfly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Italian Microsoft Bloggers</title>
		<link>http://www.muscetta.com/2007/05/11/italian-microsoft-bloggers/</link>
		<comments>http://www.muscetta.com/2007/05/11/italian-microsoft-bloggers/#comments</comments>
		<pubDate>Fri, 11 May 2007 18:11:37 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/11/italian-microsoft-bloggers/</guid>
		<description><![CDATA[Some days ago some of my colleagues (most of them in Milan) who have a blog, decided to gather together to talk to each other and to share experiences about blogging, technology, Microsoft, etc. What they basically did for now was to make a list of all italian Microsoft blogger. I could not attend, as [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Some days ago some of my colleagues (most of them in Milan) who have a blog, decided to gather together to talk to each other and to share experiences about blogging, technology, Microsoft, etc.<br />
What they basically did for now was to make <a href="http://vincos.spaces.live.com/Blog/cns!1BE30B71856FFF9D!2724.entry">a list of all italian Microsoft blogger</a>.</p>
<p>I could not attend, as it turns out I am the only guy in Rome, among all of them.<br />
That is strange. What is also strange is being all of a sudden in a list of *Microsoft* bloggers. I had never thought of myself like a *Microsoft* Blogger. Sure enough I work at Microsoft, but as my <a href="http://www.muscetta.com/disclaimer/">disclaimer</a> says it clear <em>&#034;The content of this site are my own personal opinions and do not represent my employer’s view in anyway.&#034;</em>. I just feel like I am myself. And I also have a blog. <a href="http://reports.internic.net/cgi/whois?whois_nic=muscetta.com&#038;type=domain">MUSCETTA.COM</a> has been online for 5 years now, and I have only been working for Microsoft for less than three years now.<br />
For sure, I do blog about technology, also Microsoft technology. Of course, I also talk and write and blog about NON-Microsoft technology. In the past I did try to get an <a href="http://blogs.msdn.com/dmuscett">official blog (which I called a &#034;corporate blog&#034;)</a> but then <a href="http://blogs.msdn.com/dmuscett/archive/2006/06/09/623680.aspx">I preferred to keep using my own domain</a>, just because a lot of what you find here is often personal, politically incorrect and even &#8211; yes, I am gonna write it &#8211; open source.</p>
<p>Don&#039;t get me wrong, I love being at this company, because there&#039;s a lot of brilliant people and you cannot find anywhere in any other company such a huge mix of techies that rock so much and are so passionate about what they do! Those other bloggers in that list are this kind of people.</p>
<p>This said, this will stay my random and personal thoughts&#039; basket. I like being in the community, but don&#039;t take my word for &#034;official&#034; please. Those you find written here are just my ramblings written from the couch after dinner.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/11/italian-microsoft-bloggers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Create a Script-Based Unit Monitor in OpsMgr2007 via the GUI</title>
		<link>http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/</link>
		<comments>http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/#comments</comments>
		<pubDate>Thu, 10 May 2007 20:31:40 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA["Management Packs"]]></category>
		<category><![CDATA[authoring]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[management pack]]></category>
		<category><![CDATA[monitor]]></category>
		<category><![CDATA[MP]]></category>
		<category><![CDATA[MPs]]></category>
		<category><![CDATA[opsmgr]]></category>
		<category><![CDATA[scom]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/</guid>
		<description><![CDATA[Warning for people who landed here: this post is VERY OLD. It was written in the early days of struggling with OpsMgr 2007, and when nobody really knew how to do things. I found that this way was working &#8211; and it surely does &#8211; but what is described here is NOT the recommended way [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><span style="color: red;"><strong>Warning for people who landed here: this post is VERY OLD. It was written in the early days of struggling with OpsMgr 2007, and when nobody really knew how to do things.<br />
I found that this way was working &#8211; and it surely does &#8211; but what is described here is NOT the recommended way to do things nowadays. This post was only meant to fill in a gap I was feeling existed, back in 2007.<br />
But as time passes, and documentation gets written, knowledge improves.<br />
Therefore, I recommend you read the newly released Composition chapter of the MP Authoring Guide instead<br />
<a href="http://technet.microsoft.com/en-us/library/ff381321.aspx">http://technet.microsoft.com/en-us/library/ff381321.aspx</a> &#8211; and start building your custom modules to embed scripts as <a href="http://blogs.technet.com/brianwren">Brian Wren</a> describes in there, so that you can share them between multiple rules and monitors.</strong></span><br />
This said, below is the original post.</p>
<p><!--  .flickr-photo { border: solid 2px #000000; } .flickr-yourcomment { } .flickr-frame { text-align: left; padding: 3px; } .flickr-caption { font-size: 0.8em; margin-top: 0px; }  --></p>
<p class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/492786198/"><img class="flickr-photo" src="http://farm1.static.flickr.com/221/492786198_d85d81a5b4.jpg" alt="Create a Script-Based Unit Monitor in OpsMgr2007 via the GUI" /></a><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/492786198/"></a></span></p>
<p class="flickr-yourcomment">There is not a lot of documentation for System Center Operations Manager 2007 yet.<br />
It is coming, but there&#039;s a lot of things that changed since the previous release and I think some more would only help. Also, a lot of the content I am seeing is either too newbie-oriented or too developer-oriented, for some reason.</p>
<p>I have not yet seen a tutorial, webcast or anything that explains how to create a simple unit monitor that uses a VBS script using the GUI.</p>
<p>So this is how you do it:</p>
<p>Go to the <strong>&#034;Authoring&#034;</strong> space of OpsMgr 2007 Operations Console.<br />
Select the <strong>&#034;Management Pack objects&#034;</strong>, then <strong>&#034;Monitors&#034;</strong> node. Right click and choose <strong>&#034;Create a monitor&#034;</strong> -&gt; <strong>&#034;Unit Monitor&#034;</strong>.</p>
<p>You get the &#034;Create a monitor&#034; wizard open:<br />
<a href="http://www.flickr.com/photos/dani3l3/492786202/"><img src="http://farm1.static.flickr.com/202/492786202_861b4818fa.jpg" alt="wizard02" width="500" height="444" /></a></p>
<p>Choose to create a two-states unit monitor based on a script. Creating a three- state monitor would be pretty similar, but I&#039;ll show you the most simple one.<br />
Also, choose a Management pack that will contain your script and unit monitor, or create a new management pack.<br />
<a href="http://www.flickr.com/photos/dani3l3/492786204/"><img src="http://farm1.static.flickr.com/220/492786204_57fb878a47.jpg" alt="wizard03" width="500" height="444" /></a></p>
<p>Choose a &#034;monitor target&#034; (object classes or instances &#8211; see this webcast about targeting rules and monitors: <a href="http://www.microsoft.com/winme/0703/28666/Target_Monitoring_Edited.asx">www.microsoft.com/winme/0703/28666/Target_Monitoring_Edit&#8230;</a> ) and the aggregate rollup monitor you want to roll the state up to.</p>
<p>Choose a schedule, that is: how often would you like your script to run. For demonstration purposes I usually choose a very short interval such a two or three minutes. For production environments, tough, choose a longer time range.<br />
<a href="http://www.flickr.com/photos/dani3l3/492786208/"><img src="http://farm1.static.flickr.com/231/492786208_b48ef74259.jpg" alt="wizard04" width="500" height="444" /></a></p>
<p>Choose a name for your script, complete with a .VBS extension, and write the code of the script in the rich text box:<br />
<a href="http://www.flickr.com/photos/dani3l3/492786212/"><img src="http://farm1.static.flickr.com/196/492786212_60a675bdf5.jpg" alt="wizard05" width="500" height="444" /></a></p>
<p>As the sample code and comments suggest, you should use a script that checks for the stuff you want it to check, and returns a &#034;Property Bag&#034; that can be later interpreted by OpsMgr workflow to change the monitor&#039;s state.<br />
This is substantially different than scripting in MOM 2005, where you could only launch scripts as responses, loosing all control over their execution.</p>
<p>For demonstration purpose, use the following script code:<br />
<em> </em></p>
<p><em>On Error Resume Next<br />
Dim oAPI, oBag<br />
Set oAPI = CreateObject(&#034;MOM.ScriptAPI&#034;)<br />
Set oBag = oAPI.CreateTypedPropertyBag(StateDataType)<br />
Const FOR_APPENDING = 8<br />
strFileName = &#034;c:\testfolder\testfile.txt&#034;<br />
strContent = &#034;test &#034;<br />
Set objFS = CreateObject(&#034;Scripting.FileSystemObject&#034;)<br />
Set objTS = objFS.OpenTextFile(strFileName,FOR_APPENDING)<br />
If Err.Number &lt;&gt; 0 Then<br />
Call oBag.AddValue(&#034;State&#034;,&#034;BAD&#034;)<br />
Else<br />
Call oBag.AddValue(&#034;State&#034;,&#034;GOOD&#034;)<br />
objTS.Write strContent<br />
End If<br />
Call oAPI.Return(oBag)</em><em><br />
</em></p>
<p>[edited on 29th of May as <a href="http://ianblythmanagement.wordpress.com/2007/05/27/scripting-in-2007/">pointed out by Ian</a>: if you cut and paste the example script you might need to change the apostrophes (“) as that causes the script to fail when run - it is an issue with the template of this blog.] [edited on 30th of May: I fixed the blog so that now post content shows just plain, normal double quotes instead than fancy ones. It seems like a useful thing when from time to time I post code...]</p>
<p>The script will try to write into the file c:\testfolder\testfile.txt.<br />
If it finds the file and manages to write (append text) to it, it will return the property &#034;State&#034; with a value of &#034;GOOD&#034;.<br />
If it fails (for example if the file does not exist), it will return the property &#034;State&#034; with a value of &#034;BAD&#034;.</p>
<p>In MOM 2005 you could only let script generate Events or Alerts directly as a mean to communicate their results back to the monitoring engine. In OpsMgr 2007 you can let your script spit out a property bag and then continue the monitoring workflow and decide what to do depending on the script&#039;s result.</p>
<p><a href="http://www.flickr.com/photos/dani3l3/492786214/"><img src="http://farm1.static.flickr.com/225/492786214_96af0cc463.jpg" alt="wizard06" width="500" height="444" /></a></p>
<p>So the next step is to go and check for the value of the property we return in the property bag, to determine which status the monitor will have to assume.</p>
<p>We use the syntax <strong>Property[@Name='State']</strong> in the parameter field, and we search for a content that means an unhealthy condition:</p>
<p><a href="http://www.flickr.com/photos/dani3l3/492787088/"><img src="http://farm1.static.flickr.com/217/492787088_3b3107fb59.jpg" alt="wizard07" width="500" height="444" /></a></p>
<p>Or for the healty one:<br />
<a href="http://www.flickr.com/photos/dani3l3/492787092/"><img src="http://farm1.static.flickr.com/207/492787092_a8559eecf5.jpg" alt="wizard08" width="500" height="444" /></a></p>
<p>Then we decide which status will the monitor have to assume in the healty and unhealty conditions (Green/Yellow or Green/Red usually)<br />
<a href="http://www.flickr.com/photos/dani3l3/492787094/"><img src="http://farm1.static.flickr.com/223/492787094_fac28573d3.jpg" alt="wizard09" width="500" height="444" /></a></p>
<p>Optionally, we can decide to raise an Alert when the status changes to unhealthy, and close it again when it goes back to healty.</p>
<p><a href="http://www.flickr.com/photos/dani3l3/492787098/"><img src="http://farm1.static.flickr.com/194/492787098_72d6ad227f.jpg" alt="wizard10" width="500" height="444" /></a></p>
<p>Now our unit monitor is done.<br />
All we have to do is waiting it gets pushed down to the agent(s) that should execute it, and wait for its status to change.<br />
In fact it should go to the unhealthy state first.<br />
To test that it works, just create the text file it will be searching for, and wait for it to run again, and the state should be reset to Healthy.</p>
<p>Have fun with more complex scripts!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/10/create-a-script-based-unit-monitor-in-opsmgr2007-via-the-gui/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
<enclosure url="http://www.microsoft.com/winme/0703/28666/Target_Monitoring_Edited.asx" length="126" type="video/x-ms-asf" />
		</item>
		<item>
		<title>Luca is loving Purble Place</title>
		<link>http://www.muscetta.com/2007/05/05/luca-is-loving-purble-place/</link>
		<comments>http://www.muscetta.com/2007/05/05/luca-is-loving-purble-place/#comments</comments>
		<pubDate>Sat, 05 May 2007 13:57:31 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[Luca]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/05/luca-is-loving-purble-place/</guid>
		<description><![CDATA[Purble Place is a new educational game that ships with Windows Vista (even with Starter and Home Basic editions) that can help teach colors, shapes, and pattern recognition. My kid absolutely LOVES it, especially the section of the game where you have to make and decorate cakes .<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<style type="text/css">      .flickr-photo { border: solid 2px #000000; }  .flickr-yourcomment { }  .flickr-frame { text-align: left; padding: 3px; }  .flickr-caption { font-size: 0.8em; margin-top: 0px; }</style>
<p class="flickr-frame"><a href="http://www.flickr.com/photos/dani3l3/484997159/" title="photo sharing"><img src="http://farm1.static.flickr.com/215/484997159_89e5df3169.jpg" alt="Luca is loving Purble Place" class="flickr-photo" /></a></p>
<p class="flickr-yourcomment"><a href="http://en.wikipedia.org/wiki/Purble_Place">Purble Place</a> is a new educational game that ships with <a href="http://www.microsoft.com/windows/products/windowsvista/editions/default.mspx">Windows Vista</a> (even with Starter and Home Basic editions) that can help teach colors, shapes, and pattern recognition.</p>
<p>My kid absolutely LOVES it, especially the section of the game where you have to make and decorate cakes <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/05/luca-is-loving-purble-place/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress.Net</title>
		<link>http://www.muscetta.com/2007/05/01/wordpressnet/</link>
		<comments>http://www.muscetta.com/2007/05/01/wordpressnet/#comments</comments>
		<pubDate>Tue, 01 May 2007 08:14:41 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/05/01/wordpressnet/</guid>
		<description><![CDATA[WordPress.Net, uploaded by Daniele Muscetta on Flickr. It has been quite a while that I wanted to experiment a bit more with ASP.Net but I don&#039;t have a windows machine on the internet. Not one that performs enough anyway. My server runs linux. I have had mono running on it for a while, but its [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><!-- .flickr-photo { border: solid 2px #000000; } .flickr-yourcomment { } .flickr-frame { text-align: left; padding: 3px; } .flickr-caption { font-size: 0.8em; margin-top: 0px; } --></p>
<div class="flickr-frame"><a title="photo sharing" href="http://www.flickr.com/photos/dani3l3/479584212/"><img class="flickr-photo" src="http://farm1.static.flickr.com/222/479584212_c5acb5300c.jpg" alt="WordPress.Net" /></a></p>
<p><span class="flickr-caption"><a href="http://www.flickr.com/photos/dani3l3/479584212/">WordPress.Net</a>, uploaded by <a href="http://www.flickr.com/people/dani3l3/">Daniele Muscetta</a> on Flickr.</span></p>
</div>
<p class="flickr-yourcomment">It has been quite a while that I wanted to experiment a bit more with <a href="http://www.asp.net">ASP.Net</a> but I don&#039;t have a windows machine on the internet. Not one that performs enough anyway. My server runs linux. I have had <a href="http://www.mono-project.com">mono</a> running on it for a while, but its support was not complete with the <a href="http://www.debian.org/releases/sarge">old release of Debian</a>, so part of my mono and mod_mono installation were a custom compile and they were breaking from time to time, each time some library got updated. So I did run a &#034;Hello World&#034; page with it, but nothing more, because it was a bit of a mess to mantain and, moreover, because I had not yet figured out how to have it connect with mysql instead than with MS SQL Server.<br />
Also, I did not have any real project or idea to implement in my mind.</p>
<p>Now that I have upgraded to <a href="http://www.debian.org/releases/etch">Debian Etch</a>, mono support seems to be much more out-of-the-box and stable on this release. I also got an idea of what to do with it, so I finally gave it a try.</p>
<p>As a starter, I am trying to re-publish my blog, historically running at <a href="http://www.muscetta.com">www.muscetta.com</a>, on my other <a href="http://www.muscetta.net">muscetta.NET</a> domain (it makes sense to use a .NET domain, right?). But this is not a new site, it is a republish of the same content, but done using C# &#8211; just pointing at the same wordpress&#039; mysql database. Connection to MySQL is done with <a href="http://dev.mysql.com/doc/refman/5.1/en/connector-net-ref-mysqlclient.html">MySql.Data (the ADO.Net driver for MySQL)</a>.</p>
<p>I still need to implement a lot of things/features, such as comment posting (you can only read them now), some layout/styling/framing to make it look nicer, some sidebar/blogroll, feeds, and a many other things. I am not aiming at a complete rewrite (for example I won&#039;t do an administrative interface or a webservice so far), but just a republish/frontend to the visitors.<br />
I don&#039;t know when I will have time to continue writing it, but all in all I am glad it works so far, and I had fun doing it.</p>
<p>Writing ASP.Net for mono on linux in the absence of Frontpage server extentions and WebDAV and the remote debugger is proving slightly more challenging than just dragging and dropping controls in Visual Studio and let it do a lot of work with you. You have to write the code, upload it, and see if it works. No debugging, no intellisense. Just the hard old way of trial and error, which makes development slower, but you learn a hell of a lot more that way. Of course you need  to keep the <a href="http://msdn2.microsoft.com/en-us/Library">MSDN library</a> handly <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>[Edit of December 2009 - I killed the above experiment. I had fun doing it, but there is not time for all, it needs a lot of work to keep it running/update it with every wordpress update, and mod_mono is wasting too many resources on the server.]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/05/01/wordpressnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MOM2005 vs. OpsMgr2007 and ITIL ?</title>
		<link>http://www.muscetta.com/2007/04/27/mom2005-vs-opsmgr2007-and-itil/</link>
		<comments>http://www.muscetta.com/2007/04/27/mom2005-vs-opsmgr2007-and-itil/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 13:05:30 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[OpsMgr2007]]></category>
		<category><![CDATA[System Center Operations Manager 2007]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[ITIL]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/04/27/mom2005-vs-opsmgr2007-and-itil/</guid>
		<description><![CDATA[&#160; MOM has always been a great tool out of the box because it sort of FORCED you to implement an Incident Management Process to deal with Alerts, as described here:http://ianblythmanagement.wordpress.com/2006/07/27/mom-2005-and-itil-part-1/In fact, Alerts had to be actually set to &#034;Resolved&#034;, and this had to be done manually. I have now been wondering for a while: [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>MOM has always been a great tool out of the box because it sort of FORCED you to implement an Incident Management Process to deal with Alerts, as described here:<br /><a href="http://ianblythmanagement.wordpress.com/2006/07/27/mom-2005-and-itil-part-1/">http://ianblythmanagement.wordpress.com/2006/07/27/mom-2005-and-itil-part-1/</a><br />In fact, Alerts had to be actually set to &#034;Resolved&#034;, and this had to be done manually. </p>
<p>I have now been wondering for a while: &#034;How is OpsMgr2007 going to affect this?&#034; I refer to the fact that now OpsMgr2007 does something customers have been asking for a while: it can auto-resolve alerts as soon as the incident/issue is fixed, by monitoring the state of the component rather than waiting for people to resolve it!  </p>
<p>Practically, people were often the bottleneck, due to a missing Incident Management Process. MOM has tried for nearly 8 years to push them to implement one&#8230; and I feel that it finally gave up even trying. </p>
<p>All the other stuff described in the other <a href="http://ianblythmanagement.wordpress.com/2006/07/27/mom-2005-and-itil-part-2/">two</a> <a href="http://ianblythmanagement.wordpress.com/2006/07/27/mom-2005-and-itil-part-3/">articles</a> of Ian&#039;serie do still apply.  </p>
<p>For Capacity Management nothing substantially changes.<br />Availability Management is greatly improved, with the generic &#034;availability report&#034; and the state roll-up feature provided by the new Health Service and the new ways object are discovered and instantiated and the way their health models work.  </p>
<p>Problem Management can also still be done, and Alert tuning will be still required (but it should be slightly easier now, with the improved &#034;overrides&#034; kind of thing).<br />Service Level Management can also be done &#8211; this will actually be done much better: if the system <strong>knows</strong> you&#039;ve fixed the incident and it closes the alert for you, SLA calculations will be done on the REAL down/up-times of services, not on people keeping the Alerts open forever like I have seen in many places.<br />This means it will be done better, WITHOUT relying on people.  </p>
<p>All in all there are substantial changes in OpsMgr2007, most of them are for the good&#8230;. but still, I think, I will be missing the fact that people have to actively look at their consoles and manage Alerts the way they were asked to do before. I will miss all the talks I used to do about &#034;you HAVE to manage your Alerts/Incidents&#034;, now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/04/27/mom2005-vs-opsmgr2007-and-itil/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Don&#039;t talk about yourself.</title>
		<link>http://www.muscetta.com/2007/04/25/dont-talk-about-yourself/</link>
		<comments>http://www.muscetta.com/2007/04/25/dont-talk-about-yourself/#comments</comments>
		<pubDate>Wed, 25 Apr 2007 07:24:06 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/04/25/dont-talk-about-yourself/</guid>
		<description><![CDATA[I just read this post in which Hugh MacLeod writes critically about Microsoft people writing about themselves and showing off, hoping in the power of an artificially created network to impress people (or that&#039;s I get it, at least &#8211; maybe it isn&#039;t completely that way), instead of letting people talk about the products because [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I just read <a href="http://www.gapingvoid.com/Moveable_Type/archives/003901.html">this post</a> in which Hugh MacLeod writes critically about Microsoft people writing about themselves and showing off, hoping in the power of an artificially created network to impress people (or that&#039;s I get it, at least &#8211; maybe it isn&#039;t completely that way), instead of letting people talk about the products because they believe they are just cool. He concludes: &#034;[...] [First Rule of Marketing:] If you want to be interesting, don&#039;t talk about yourself. Amen. [...]&#034; </p>
<p>You should have OTHER people talk about YOUR stuff because it is really cool. </p>
<p>Self-promotion does usually the opposite effect on peopple these days. </p>
<p>I am not into this: I just talk about technology when I feel like to, and I talk about other stuff when I want to talk about other stuff. And when I talk about technology it is usually about what interests me at that point, be it Microsoft or not. I talk of MOM as well as of Linux, of C# just as much as of Ruby. It depends what I&#039;m hacking with at that point in time. I like cool technology, it does not matter if it comes from one side or another. I even like to integrate them when it makes sense (and it makes sense a lot of times). But I&#039;ve already written about this <a href="http://blogs.msdn.com/dmuscett/archive/2005/04/28/412959.aspx">here</a> in the past. So I&#039;ll stop this rant here.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/04/25/dont-talk-about-yourself/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MOM 2005 Alerts to RSS feed</title>
		<link>http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/</link>
		<comments>http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/#comments</comments>
		<pubDate>Thu, 22 Mar 2007 18:07:00 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[MOM2005]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/</guid>
		<description><![CDATA[I am an RSS Addict, you know that.So I wanted an RSS Feed to show MOM Alerts. I have been thinking of it for a while, last year (or was it the year before?). It seemed like a logical thing to me: alerts are created (and can be resolved &#8211; that is, expire), generally get [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>I am an RSS Addict, you know that.So I wanted an RSS Feed to show MOM Alerts. I have been thinking of it for a while, last year (or was it the year before?).<br />
It seemed like a logical thing to me: alerts are created (and can be resolved &#8211; that is, expire), generally get sorted by the date and the time when they have been created, the look pretty much like a list. Also, many people like to receive mail notification when new alerts are generated.<br />
So, if the alert can be sent to you (push), you could also get to it(pull).<br />
Pretty much the same deal with receiving a mail or reading a newsgroup, or syndicating a feed.</p>
<p>At the time I looked around but it seemed like no one had something like this already done.<br />
So I wrote a very simple RSS feed generator for MOM Alerts.<br />
I did it quite an amount of time ago, just as an exercise.<br />
Then, after a while, I figured out that the <a href="http://www.microsoft.com/technet/mom/2005/downloads/tools/reskit.mspx">MOM 2005 Resource Kit</a> had been updated to include such a utility!</p>
<p>Wow, I thought, they finally added what I have been thinking for a while. Might it be because I mentioned it on an private Mailing list ? Maybe. Maybe not. Who cares. Of course, if it is included in the resource kit it must be way cooler than the one I made, I though.<br />
I really thought something along these lines, but never actually had the time to try it out.<br />
I think I just sort of assumed it must have been cooler than the one I made, since it was part of an official package, while I am not a developer. So I basically forgot about the one I wrote, dismissing it as being crap without looking too much into it anymore.<br />
Until today.<br />
Today I actually tried to use the alert to RSS tool included in the resource kit, because a customer asked if there was any other way to get notified, other than receiving notification or using the console (or the console notifier).<br />
So I looked at the resource kit&#039;s Alert-to-RSS Utility.<br />
My experience with it:<br />
1) it is provided in source code form &#8211; which is ok if it was ALSO provided as source. Instead it is ONLY provided as source, and most admins don&#039;t have Visual Studio installed or don&#039;t know how to compile from the command line;<br />
2) Even when they wanted to compile it, it includes a bug which makes it impossible to compile &#8211; solution <a href="http://groups.google.it/group/microsoft.public.mom/browse_thread/thread/79257d4472479fe0/2c21222bb33cb163?lnk=st&#038;q=MOM+Alert+RSS&#038;rnum=1#2c21222bb33cb163">in this newsgroup discussion</a>;<br />
3) if you don&#039;t want to mess about with code since you are using a resource Kit tool (as opposed to something present in the SDK) you can even get it already compiled by someone from somewhere on the net, but that choice is about trust.</p>
<p>Anyway, one way or another, after it is finally set up&#8230;. surprise surprise!!!<br />
It does NOT show a LIST of alerts (as I was expecting).<br />
It shows a summary of how many alerts you have. basically it is an RSS feed made of a single item, and this single item tells you how many alerts you have. What is one supposed to do with such a SUMMARY? IMHO, it is useless the way it is. It is even worse than one of those feed that only contains the excerpt of the article, rather than the full article.<br />
Knowing that I have 7 critical errors and 5 warning without actually knowing ANYTHING of them is pointless.<br />
It might be useful for a manager, but not for a sysadmin, at least.</p>
<p>So I thought my version, even if coded crap, might be useful to someone because it gives you a list of alerts (those that are not resolved) and each one of them tells you the description of the alert, the machine tat generated it, and includes links to the actual alert in the web console, so you can click, go there, and start troubleshooting from within your aggregator!<br />
My code does this. Anyway, since I am a crap coder, since I wrote it in only fifteen minutes more than a year ago, and since I don&#039;t have time to fix it and make it nicer&#8230; it has several issues, and could be improved in a million ways, in particular for the following aspects:</p>
<ol>
<li>is currently depends on the SDK Database views &#8211; it could use the MOM Server API&#039;s or the webservice instead;</li>
<li>it uses SQL Security to connect to the DB &#8211; by default MOM does not allow this &#8211; it is suggested for the SQL instance hosting &#034;OnePoint&#034; to only use Windows Integrated Authentication.. so to make my code work you have to switch back to Mixed mode, and create a login in SQL that has permission to read the database. This is due to the fact that I&#039;ve coded this in five minutes and I don&#039;t know how to use delegation &#8211; if I was able to use delegation, I would&#8230; so that the end user accessing IIS would be the one connecting to the DB. If anybody wants to teach me how to do this, I will be most grateful.</li>
<li>it could accept parameters as URL variables, so to filter out only events for a specific machine, or a specific resolution state, etc etc</li>
<li>At present it uses <a href="http://rss-net.sourceforge.net/">RSS.Net</a> to generate the feed. It could made independent from it, but I don&#039;t really see why, and I quite like that library.</li>
</ol>
<p>The code is just an ASP.Net page and its codebehind, no need to compile, but of course you need to change a couple of lines to match your webconsole address.<br />
Also, you need to get <a href="http://rss-net.sourceforge.net/">RSS.NET</a> and copy its library (RSS.Net.dll) in the /bin subfolder of the website directory where you place the RSSFeed generator page. I see that I wrote this with version 0.86, but any version should do, really.</p>
<p>Here is what it will look like:</p>
<p><a title="Photo Sharing" href="http://www.flickr.com/photo_zoom.gne?id=430556283&#038;size=o"><img width="500" height="375" alt="AlertToRSS" src="http://farm1.static.flickr.com/173/430556283_6eb615a080.jpg" /></a></p>
<p>And here&#039;s the code of the page (two files):</p>
<p><strong>Default.aspx</strong></p>
<p>&lt;%@ Page Language=&#034;C#&#034; AutoEventWireup=&#034;true&#034; CodeFile=&#034;Default.aspx.cs&#034; Inherits=&#034;_Default&#034; %&gt;</p>
<p><strong>Default.aspx.cs</strong></p>
<p>using System;<br />
using System.Data;<br />
using System.Data.SqlClient;<br />
using System.Configuration;<br />
using System.Web;<br />
using Rss;</p>
<p>public partial class _Default : System.Web.UI.Page<br />
{<br />
protected void Page_Load(object sender, EventArgs e)<br />
{<br />
string webconsoleaddress = &#034;<a href="http://192.168.0.222:1272/AlertDetail.aspx?v=a&#038;sid=">http://192.168.0.222:1272/AlertDetail.aspx?v=a&#038;sid=&#034;</a> // must change to match your address</p>
<p>// Inizializza il Feed<br />
RssChannel rssChannel = new RssChannel();<br />
rssChannel.Title = &#034;MOM Alerts&#034;<br />
rssChannel.PubDate = DateTime.Now;<br />
rssChannel.Link = new Uri(&#034;<a href="http://192.168.0.222:1272/rss/">http://192.168.0.222:1272/rss/&#034;);</a> // must change to match your address<br />
rssChannel.LastBuildDate = DateTime.Now;<br />
rssChannel.Description = &#034;Contains the latest Alerts&#034;</p>
<p>// query &#8211; you might want to change the severity<br />
string mySelectQuery = &#034;SELECT ComputerName, Name, Severity, TimeRaised, RepeatCount, GUID FROM dbo.SDKAlertView WHERE Severity &gt; 10 AND ResolutionState &lt; 255&#034;</p>
<p>// SQL Connection – must change SQL server, user name and password<br />
SqlConnection conn = new SqlConnection(&#034;Data Source=192.168.0.222;Initial Catalog=OnePoint;User ID=rss;Password=rss&#034;);<br />
SqlDataReader rdr = null;</p>
<p>try<br />
{<br />
conn.Open();<br />
SqlCommand cmd = new SqlCommand(mySelectQuery, conn);<br />
rdr = cmd.ExecuteReader();<br />
while (rdr.Read())<br />
{<br />
RssItem rssItem = new RssItem();<br />
string titleField = rdr[1].ToString();<br />
rssItem.Title = titleField;<br />
string url = webconsoleaddress + rdr[5];<br />
rssItem.Link = new Uri(url.ToString());<br />
string description = &#034;&lt;![CDATA[ &lt;p&gt;&lt;a xhref=\"" + rssItem.Link + "\"&gt;" + rdr[1] + &#034; &lt;/a&gt;&lt;/p&gt;&lt;br&gt;&#034; + &#034;&lt;br&gt;Computer: &#034; + rdr[0] + &#034;&lt;br&gt;Repeat Count: &#034; + rdr[4] + &#034;&lt;BR&gt;Original ALert Time: &#034; + rdr[3];<br />
rssItem.Description = description;<br />
rssChannel.Items.Add(rssItem);<br />
}</p>
<p>// Finalizza il feed<br />
RssFeed rssFeed = new RssFeed();<br />
rssFeed.Channels.Add(rssChannel);<br />
Response.ContentType = &#034;text/xml&#034;<br />
Response.ExpiresAbsolute = DateTime.MinValue;<br />
rssFeed.Write(Response.OutputStream);<br />
}<br />
finally<br />
{<br />
if (rdr != null)<br />
{<br />
rdr.Close();<br />
}</p>
<p>if (conn != null)<br />
{<br />
conn.Close();<br />
}<br />
}<br />
}<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/03/22/mom-2005-alerts-to-rss-feed/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Phrogram &#8211; Kids Programming Language</title>
		<link>http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/</link>
		<comments>http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/#comments</comments>
		<pubDate>Sun, 25 Feb 2007 20:11:03 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/</guid>
		<description><![CDATA[It was since the old times of LOGO that I did not see an effort to bring kids closer to computer programming. This is what makes Phrogram (previously called KPL &#8211; kids&#039; Programming Language) unique today. On the KPL site you can also read that &#034;KPL isn&#039;t just for kids any more&#034;. This means it [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>It was since the old times of <a title="LOGO" href="http://el.media.mit.edu/Logo-foundation/logo/index.html">LOGO</a> that I did not see an effort to bring kids closer to computer programming. This is what makes <a title="Phrogran" href="http://phrogram.com/">Phrogram</a> (previously called <a href="http://www.kidsprogramminglanguage.com/">KPL &#8211; kids&#039; Programming Language</a>) unique today. On the KPL site you can also read that &#034;KPL isn&#039;t just for kids any more&#034;. This means it has evolved and it is now as complete as a programming language as one of the many other you can choose among to create your full-blown applications and games.</p>
<p>Anyhow, this means that people <strong>might</strong> choose it because it is easy and straightforward to build up complex programs (especially games), but it also still primarly is a very attractive tool to teach the youngest generations how does programming work.</p>
<p>I learned the very basics of programming&#8230; in BASIC ,in fact, on my first Commodore64. What does a kid try to do ? Write a game. I also did. It was painful back then when you had to use instructions such as PEEK and POKE to &#034;draw&#034; the bitmaps making up your sprites and let them move by moving those bits around&#8230; at the elementary school it wasn&#039;t exactly crystal clear to me why did it work, and how. I actually had my issues with much simpler stuff, like figuring out what on earth a multi-dimensional array was, and stuff like that. LOGO simplified all of that, as you finally could just draw on your computer by moving the Turte simply asking her to move back, forward, right, left, and so on&#8230;</p>
<p>Of course twenty years have passed, CPU capacity has massively improved, object oriented programming has become mainstream&#8230;.. so that now, with KPL/Phrogram you can write a real Arcade videogame that uses DirectX 3D graphics with just a bunch of lines of code! This absolutely ROCKS!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/02/25/phrogram-kids-programming-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My colleague and friend Feliciano started a Security-related Blog</title>
		<link>http://www.muscetta.com/2007/01/16/my-colleague-and-friend-feliciano-started-a-security-related-blog/</link>
		<comments>http://www.muscetta.com/2007/01/16/my-colleague-and-friend-feliciano-started-a-security-related-blog/#comments</comments>
		<pubDate>Tue, 16 Jan 2007 09:58:00 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/01/16/my-colleague-and-friend-feliciano-started-a-security-related-blog/</guid>
		<description><![CDATA[Surely he will write more about security @microsoft than I do. Here he goes: http://blogs.technet.com/feliciano_intini/default.aspxWelcome to the blogging scene, Feliciano! Keep up the great work! Note: The blog above is written in italian, and it is addressed to italian IT Professionals having to deal with security.<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>Surely he will write more about security @microsoft than I do. Here he goes: <a href="http://blogs.technet.com/feliciano_intini/default.aspx">http://blogs.technet.com/feliciano_intini/default.aspx</a><br />Welcome to the blogging scene, Feliciano! Keep up the great work!</p>
<p>Note: The blog above is written in italian, and it is addressed to italian IT Professionals having to deal with security.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/01/16/my-colleague-and-friend-feliciano-started-a-security-related-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Out-Flickr!!</title>
		<link>http://www.muscetta.com/2007/01/10/out-flickr/</link>
		<comments>http://www.muscetta.com/2007/01/10/out-flickr/#comments</comments>
		<pubDate>Wed, 10 Jan 2007 15:02:28 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Live]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2007/01/10/out-flickr/</guid>
		<description><![CDATA[This is soooo cool! An &#034;Out-Flickr&#034; script for PowerShell: http://abhishek225.spaces.live.com/blog/cns!13469C7B7CE6E911!285.entry<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>This is soooo cool! An &#034;Out-Flickr&#034; script for PowerShell:</p>
<p><a href="http://abhishek225.spaces.live.com/blog/cns!13469C7B7CE6E911!285.entry">http://abhishek225.spaces.live.com/blog/cns!13469C7B7CE6E911!285.entry</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2007/01/10/out-flickr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Out-Blog!</title>
		<link>http://www.muscetta.com/2006/11/24/out-blog/</link>
		<comments>http://www.muscetta.com/2006/11/24/out-blog/#comments</comments>
		<pubDate>Fri, 24 Nov 2006 11:21:19 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[dotNet]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[WebSite]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2006/11/24/out-blog/</guid>
		<description><![CDATA[[Edited again 25th November -&#160;Jachym gave me some suggestions and insights on the use of parameters, and I slightly changed/fixed the original code I had posted yesterday. There&#160;are still some more things that could be improved, of course, but I'll leave them to the future, next time I'll have time fot it (who knows when [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><span style="color: black">[Edited again 25th November -&nbsp;<a href="http://blog.vyvojar.cz/jachymko/">Jachym</a> gave me some suggestions and insights on the use of parameters, and I slightly changed/fixed the original code I had posted yesterday. There&nbsp;are still some more things that could be improved, of course, but I'll leave them to the future, next time I'll have time fot it (who knows when that will be?)]</span></p>
<p><span style="color: black">This one is a post regarding my first test writing a cmdlet for PowerShell. After a few days since having change my blog&#039;s title to <strong><em>&#034;$daniele.rant | Out-Blog&#034;</em></strong> (where Out-Blog was a fantasy cmdlet name, and the title just meant to mimick PowerShell syntax in a funny way), I stumbled across this wonderful blog post: </span><span style="color: #669966; text-decoration: underline"><a href="http://blog.boschin.it/archive/2006/09/21/4375.aspx">http://blog.boschin.it/archive/2006/09/21/4375.aspx</a></span>&nbsp;<span style="color: black">that describes how to use the assemblies of &#034;Windows Live Writer&#034;. Then I saw the light: I could actually implement an &#034;Out-Blog&#034; cmdlet. I am not sure what this could be useful for&#8230; but I thought it was funny to experiment with. I followed the HOW TO information on this other blog post to guide me through the coding: </span><span style="color: #669966; text-decoration: underline"><a href="http://www.proudlyserving.com/archives/2005/10/lets_all_write_1.html">http://www.proudlyserving.com/archives/2005/10/lets_all_write_1.html</a></span></p>
<p><span style="color: #669966; text-decoration: underline"></span><span style="font-size: 10pt">The result is the&nbsp;</span><span style="font-size: 10pt; color: black">code that follows. you see is pretty much Boschin&#039;s code wrapped into a cmdlet class. Nothing fancy. Just a&nbsp;test. I thought someone might find it interesting. It is provided &#034;AS IS&#034;, mainly for educational purpose (MINE, only&nbsp;mine&#8230;. I&#039;m the one whose education is being improved, not you <img src='http://www.muscetta.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> )</span></p>
<p><span style="font-size: 10pt; font-family: trebuchet ms"></span></p>
<p><img src="http://static.flickr.com/119/304859662_fa52bac956.jpg"/>&nbsp;</p>
<p>&nbsp;</p>
</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> System; </p>
<p><span style="color: blue">using</span> System.Collections.Generic; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> System.Text; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> System.Management.Automation; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.BlogClient.Clients; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.BlogClient; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.CoreServices; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.CoreServices.Settings; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> WindowsLive.Writer.Extensibility.BlogClient; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">using</span> Microsoft.Win32; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">namespace</span> LiveWriterCmdlet </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Cmdlet</span>(<span style="color: maroon">"out"</span>, <span style="color: maroon">"blog"</span>, SupportsShouldProcess=<span style="color: blue">true</span>)] </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">sealed</span> <span style="color: blue">class</span> <span style="color: teal">OutBlogCmdlet</span> : <span style="color: teal">Cmdlet </span></p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 0, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> Title </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _title; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _title = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _title; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position=1,Mandatory=<span style="color: blue">true</span>,ValueFromPipeline=<span style="color: blue">true</span>,ValueFromPipelineByPropertyName=<span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> Text </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _text; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _text = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _text; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 2, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> BlogApiEndPoint </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _blogapiendpoint; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _blogapiendpoint = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _blogapiendpoint; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 3, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> UserName </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _username; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _username = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _username; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 4, Mandatory = <span style="color: blue">true</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> Password </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _password; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _password = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _password; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 6, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> ProxyAddress </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxyaddress; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxyaddress = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _proxyaddress; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 7, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">ValidateNotNullOrEmpty</span>] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">int</span> ProxyPort </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxyport; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxyport = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">int</span> _proxyport; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 8, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> ProxyUserName </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxyusername; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxyusername = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _proxyusername; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 9, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: blue">string</span> ProxyPassword </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _proxypassword; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _proxypassword = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">string</span> _proxypassword; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">[</span><span style="color: teal">Parameter</span>(Position = 10, Mandatory = <span style="color: blue">false</span>, ValueFromPipeline = <span style="color: blue">false</span>, ValueFromPipelineByPropertyName = <span style="color: blue">true</span>)] </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">public</span> <span style="color: teal">SwitchParameter</span> Published </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">get</span> { <span style="color: blue">return</span> _published; } </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">set</span> { _published = <span style="color: blue">value</span>; } </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">private</span> <span style="color: blue">bool</span> _published; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> BeginProcessing() </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">base</span>.BeginProcessing(); </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">ApplicationEnvironment</span>.Initialize(); </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">if</span> ((ProxyAddress != <span style="color: blue">null</span>) | (ProxyAddress != <span style="color: maroon">&#034;&#034;</span>)) </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.ProxyEnabled = <span style="color: blue">true</span>; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Hostname = ProxyAddress; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Port = ProxyPort; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Username = ProxyUserName; </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.Password = ProxyPassword; </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">else</span> </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">WebProxySettings</span>.ProxyEnabled = <span style="color: blue">false</span>; </p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">protected</span> <span style="color: blue">override</span> <span style="color: blue">void</span> ProcessRecord() </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: blue">if</span> (ShouldProcess(Text)) </p>
<p><span style="font-size: 10pt; font-family: courier new">{ </span></p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">ISettingsPersister</span> persister = <span style="color: blue">new</span> <span style="color: teal">RegistrySettingsPersister</span>(<span style="color: teal">Registry</span>.CurrentUser, <span style="color: maroon">@&#034;Software\Windows Live Writer&#034;</span>); </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">IBlogCredentials</span> credentials = <span style="color: blue">new</span> <span style="color: teal">BlogCredentials</span>(<span style="color: blue">new</span> <span style="color: teal">SettingsPersisterHelper</span>(persister)); </p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">IBlogCredentialsAccessor</span> credentialsAccessor = <span style="color: blue">new</span> <span style="color: teal">BlogCredentialsAccessor</span>(<span style="color: maroon">&#034;dummy-value&#034;</span>, credentials); </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">credentials.Username = UserName; </span></p>
<p><span style="font-size: 10pt; font-family: courier new">credentials.Password = Password; </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">MovableTypeClient</span> client = <span style="color: blue">new</span> <span style="color: teal">MovableTypeClient</span>(<span style="color: blue">new</span> <span style="color: teal">Uri</span>(BlogApiEndPoint), credentialsAccessor, <span style="color: teal">PostFormatOptions</span>.Unknown); </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new"></span><span style="color: teal">BlogPost</span> MyPost = <span style="color: blue">new</span> <span style="color: teal">BlogPost</span>(); </p>
<p><span style="font-size: 10pt; font-family: courier new">MyPost.Title = Title; </span></p>
<p><span style="font-size: 10pt; font-family: courier new">MyPost.Contents = Text; </span></p>
<p><span style="font-size: 10pt; font-family: courier new">client.NewPost(</span><span style="color: maroon">&#034;dummy-value&#034;</span>, MyPost, Published); </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">WriteVerbose(</span><span style="color: maroon">&#034;Posted Successfully.&#034;</span>); </p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p>&nbsp;</p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
<p><span style="font-size: 10pt; font-family: courier new">} </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/11/24/out-blog/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Email talk on Port25</title>
		<link>http://www.muscetta.com/2006/11/20/email-talk-on-port25/</link>
		<comments>http://www.muscetta.com/2006/11/20/email-talk-on-port25/#comments</comments>
		<pubDate>Mon, 20 Nov 2006 12:06:13 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Networking]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>
		<category><![CDATA[SPAM]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/2006/11/20/email-talk-on-port25/</guid>
		<description><![CDATA[Interesting interview to Eric Allman on Port25. He talks of the future of email, of SenderID, of sendmail&#8230; of openness and interoperation. Very interesting. With the change in licensing of SenderID, let&#039;s how quick this gets picked up by Wietse Venema&#8230;<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p><a href="http://port25.technet.com/archive/2006/11/17/sendmail-sender-id-and-25-years-of-email-sam-interviews-eric-allman.aspx">Interesting interview to Eric Allman on Port25</a>.<br />
He talks of the future of email, of SenderID, of sendmail&#8230; of openness and interoperation.<br />
Very interesting.<br />
With the change in licensing of SenderID, <a href="http://www.imc.org/ietf-mxcomp/mail-archive/msg04103.html">let&#039;s how quick this gets picked up by Wietse Venema</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.muscetta.com/2006/11/20/email-talk-on-port25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft-Novell deal</title>
		<link>http://www.muscetta.com/2006/11/05/microsoft-novell-deal/</link>
		<comments>http://www.muscetta.com/2006/11/05/microsoft-novell-deal/#comments</comments>
		<pubDate>Sun, 05 Nov 2006 08:39:24 +0000</pubDate>
		<dc:creator>Daniele Muscetta</dc:creator>
				<category><![CDATA[Cross Platform]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Blogs]]></category>
		<category><![CDATA[Choice]]></category>
		<category><![CDATA[Cross Post]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Interop]]></category>

		<guid isPermaLink="false">http://www.muscetta.com/?p=148</guid>
		<description><![CDATA[[aka: Linux is less Free and more O$$ every day] News of this Microsoft-Novell deal are all over the web. I&#039;d like to comment by cross-posting: this post in particular hides a pearl of wisdom: &#034;[...] But what does this mean to the end user?&#160; Probably not very much.&#160; SLED&#160;aficionados will continue to praise Novell [...]<hr /><a href="http://www.muscetta.com/about-me/">About Daniele Muscetta</a><hr />]]></description>
			<content:encoded><![CDATA[<p>[aka: Linux is less Free and more O$$ every day]</p>
<p><a href="http://blogs.zdnet.com/BTL/?p=3878">News of</a> <a href="http://community.zdnet.co.uk/blog/0,1000000567,10004431o-2000331777b,00.htm">this Microsoft-Novell</a> <a href="http://news.com.com/2061-10795_3-6132156.html">deal are</a> <a href="http://www.internetfinancialnews.com/financialblogtalk/news/ifn-6-20061103MicrosoftandNovellViolatetheGPL.html">all over the web</a>.</p>
<p>I&#039;d like to comment by cross-posting: <a href="http://blogs.zdnet.com/BTL/?p=3878">this post</a> in particular hides a pearl of wisdom:</p>
<p><em>&#034;[...] But what does this mean to the end user?&nbsp; Probably not very much.&nbsp; </em></p>
<p><em>SLED&nbsp;aficionados will continue to praise Novell while espousing the virtues of free Linux&nbsp;– pretending all the while&nbsp;that Novell is not just as anxious to turn a profit on enterprise versions of their Linux products as Microsoft is to push its Windows wares.&nbsp; </em> </p>
<p><em>Others in the Linux camp will criticize Novell as a &#039;turncoat&#039; to the Linux movement — never mind that everyone&nbsp;pushing their&nbsp;own Linux dis
