<rss version="2.0"><channel><title>thespot4sap.com</title><link>http://www.thespot4sap.com/reblogger/feed.aspx</link><description>sap blog aggregator feed from thespot4sap.com</description><ttl>60</ttl><item><title>From Water Distribution to Product Allocation</title><link>http://www.thespot4sap.com/Other-SAP/re-146470_From-Water-Distribution-to-Product-Allocation.aspx</link><description>The &lt;a href="http://apolemia.blogspot.com/2008/12/similar-control-system.html"&gt;water distribution control system&lt;/a&gt; is quite similar to gATP product allocation. What is available in vanilla PAL is something like the open loop control system.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_LUNtiAx0Y3E/SVaj-_17_MI/AAAAAAAAAOQ/7OBj0Uk-YAY/s1600-h/diag1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 247px;" src="http://3.bp.blogspot.com/_LUNtiAx0Y3E/SVaj-_17_MI/AAAAAAAAAOQ/7OBj0Uk-YAY/s400/diag1.jpg" border="0" alt=" "id="BLOGGER_PHOTO_ID_5284591515450735810" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A common development in PAL implementations is to use sales forecast to create the allocation plan. By frequently updating the allocation plan, PAL will become a feedback controller. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_LUNtiAx0Y3E/SValM6s6V1I/AAAAAAAAAOg/BwUr2uH14Cg/s1600-h/diag5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 339px;" src="http://2.bp.blogspot.com/_LUNtiAx0Y3E/SValM6s6V1I/AAAAAAAAAOg/BwUr2uH14Cg/s400/diag5.jpg" border="0" alt=" "id="BLOGGER_PHOTO_ID_5284592854100498258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The key piece of technology to have a good control system is the controller. In this case the controller is the logic that calculates the bucket capacities from the sales forecast and user defined constraints. It is a bit amazing that SAP APO, probably the most advanced supply chain planning system, left this key piece of technology out of the software. It is up to the people doing the implementation to build the controller. And that is something &lt;strike&gt;hard&lt;/strike&gt; interesting to do.</description><author>Apolemia                                                                                            </author><pubDate>Sat, 27 Dec 2008 00:00:00 GMT</pubDate><category>Other SAP</category></item><item><title>Get-CommandPlugin</title><link>http://www.thespot4sap.com/SAPscript/re-146302_Get-CommandPlugin.aspx</link><description>&lt;P class=PostHeader&gt;One of the nifty new CTP3 features is command and parameter meta data on functions. In V1, you had to parse a function yourself to extract the parameters. In CTP2, you could use the tokenizer API to parse the function, but extracting parameters this was is error prone. In CTP3, and in V2, you can actually get a dictionary of parameters on the FunctionInfo object.&lt;/P&gt;
&lt;P class=PostHeader&gt;Check it out: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;Get-Command -type Function | Foreach-Object { $_.Parameters } &lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;amp;nbsp;&lt;/P&gt;
&lt;P class=PostHeader&gt;This opens up a lot of possibilities. One of the possibilities I really like is that you can now use the parameter metadata to determine if two functions fit together. This means that I can use a number of different functions as plugins for another function.&lt;/P&gt;
&lt;P class=PostHeader&gt;One example of how you might want to use this is making a central script that runs all of your diagnostic scripts.&lt;/P&gt;
&lt;P class=PostHeader&gt;Suppose I had several functions that worked against a remote machine: &lt;BR&gt;Get-InformationAboutProcessor -computer &lt;BR&gt;Get-InformationAboutFreeDiskSpace -computer &lt;BR&gt;Get-InformationAboutLocalUsers -computer &lt;BR&gt;etc etc etc&lt;/P&gt;
&lt;P class=PostHeader&gt;If I had a core function, Get-Information, which had a parameter -computer, then I can consider any command named Get-InformationAbout* with a parameter name of computer a potential plugin to Get-Information. I could have downloaded the scripts from several locations, and put them in many different modules, and, as long as they were there when I ran Get-Information, the same command would collect the data. Get-Information could then do the summarization of the information and send me an email with the information.&lt;/P&gt;
&lt;P class=PostHeader&gt;Thanks to splatting (which gives you a dictionary of all of the parameters to the current function ($psBoundParameters) and allows you to "splat" any dictionary to the dictionary provides the arguments to another command), writing a command like Get-Information is trivial. In fact, it is only one pipeline:&lt;/P&gt;
&lt;P class=PostHeader&gt;&lt;I&gt;&lt;/I&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE&gt;    function Get-Information($computer) {
        $myInvocation.MyCommand |
            Get-CommandPlugin -preposition About -parameter Computer |
            Foreach-Object { &amp;amp;amp; $_ @psBoundParameters }
    }&lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;amp;nbsp;&lt;/P&gt;
&lt;P class=PostHeader&gt;For more developer-oriented types, this should remind you of an interface, but it's actually quite a bit cooler in my opinion. First and foremost, you don't have to go out of your way to use a command signature as an interface, you just simply write the command. You also don't have to compile the interface, which saves time and code space. Another perk is that while an interface states that a property is of a certain type, this technique allows PowerShell to coerce the data to a different type in each plugin command. But the really interesting possibility is what the plugins can do with the bound parameters. If the command plugin is a simple function, or has a parameter that takes ValueFromPipelineByRemainingArgs, then the function will be able to get all of the parameters passed to the parent function. I find that this is a good way to write functions you expect others to extend.&lt;/P&gt;
&lt;P class=PostHeader&gt;This final possibility is both empowering and risky. The empowering example is that you could write the plugin function to use more of the main functions parameters, which does something interfaces never could do cleanly: provide additional information. The risky example is that if the main function has a parameter including sensitive information (let's say credentials), then the underlying functions would have this information as well. As such, &lt;B&gt;&lt;I&gt;I would recommend only using Get-CommandPlugin with plugins you know, trust, and have inspected, or with parameters that do not contain sensitive information.&lt;/I&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=PostHeader&gt;I'm reminded of a quote from a Marvel Movie: "With Great Power Comes Great Responsibility." Get-CommandPlugin has great power. Please script responsibly.&lt;/P&gt;&lt;BR&gt;
&lt;P class=CmdletSynopsis&gt;&lt;B&gt;Synopsis:&lt;/B&gt; &lt;BR&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;Finds all of the commands that have a signature similar to command &lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;amp;nbsp;&lt;/P&gt;&lt;BR&gt;
&lt;P class=CmdletDescription&gt;&lt;B&gt;Detailed Description:&lt;/B&gt; &lt;BR&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;Searches all of the commands for a similar signature to a base command &lt;BR&gt;The signature of a command will be considered to be the command name + a keyword + additional text + &lt;BR&gt;correct parameter names &lt;BR&gt;For example, if you have a function, Get-Code -URL, then the plugins to Get-Code -preposition From would be: &lt;BR&gt;Get-CodeFromSourceA -url &lt;BR&gt;Get-CodeFromSourceB -url &lt;BR&gt;etc &lt;BR&gt;By using this command, it is possible to essential use a script and it's parameters as an ad-hoc interface. &lt;BR&gt;This means you can write a command which does some operation, and then searches the currently loaded commands &lt;BR&gt;for any plugins. &lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;amp;nbsp;&lt;/P&gt;&lt;BR&gt;
&lt;P&gt;Here's Get-CommandPlugin: &lt;I&gt;&lt;/I&gt;
&lt;BLOCKQUOTE&gt;&lt;PRE class=CmdletDefinition&gt;function Get-CommandPlugin {
           
        &amp;amp;lt;#
        .Synopsis
            Finds all of the commands that have a signature similar to command
        .Description
            Searches all of the commands for a similar signature to a base command
            The signature of a command will be considered to be the command name + a keyword + additional text + 
            correct parameter names
            For example, if you have a function, Get-Code -URL, then the plugins to Get-Code -preposition From would be:
            Get-CodeFromSourceA -url
            Get-CodeFromSourceB -url
            etc
            By using this command, it is possible to essential use a script and it's parameters as an ad-hoc interface.
            This means you can write a command which does some operation, and then searches the currently loaded commands
            for any plugins.
        .Example
            # Declares a Get-Code function, which finds all plugins and passes its parameters down to those commands
            # also declares Get-CodeFromA, which will print "hi" and the $url, and Get-CodeFromB, which will prnt "bye" and the $url
             function Get-Code($url) { 
                $myInvocation.MyCommand |
                    Get-CommandPlugin -preposition "From" |
                    Foreach-Object {
                        &amp;amp;amp; $_ @psBoundParameters
                    }
            }

            function Get-CodeFromA($url) {
                "hi"
                $url
            }
            function Get-CodeFromB($url) {
                "bye"
                $url
            }           
        .Link
            Get-Command
                    
        #&amp;amp;gt;
        param(
        [Parameter(ValueFromPipeline=$true,
            Position=0)]
        $command,        
        [Parameter(Position=1)]
        [Alias("Keyword")]
        [string]
        $preposition,
        
        [Parameter(Position=2)]
        [string[]]
        $parameters
        )
process {

            if ($command -isnot [Management.Automation.CommandInfo]) {
                $realC = Get-Command $command | Select-Object -First 1
            } else {
                $realC = $command
            }
            if (-not $parameters) {
                $parameters = $realC.Parameters.Keys
            }
            Get-Command "$realC$preposition*" | Where-Object {
                $potentialPlugin = $_
                $isPlugin = $false
                foreach ($p in $parameters) {
                    if ($potentialPlugin.Parameters.Keys -notcontains $p) {
                        return $false
                    }
                }
                return $true
            }
        
}

}
    &lt;/PRE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;&amp;amp;nbsp;&lt;/P&gt;&lt;BR&gt;
&lt;P class=Postfooter&gt;Hope this Helps,&lt;/P&gt;
&lt;P class=Postfooter&gt;James Brundage [MSFT]&lt;/P&gt;
&lt;P style="FONT-SIZE: xx-small"&gt;Automatically generated with &lt;A href="http://blogs.msdn.com/powershell/archive/tags/Write-CommandBlogPost/default.aspx" mce_href="http://blogs.msdn.com/powershell/archive/tags/Write-CommandBlogPost/default.aspx"&gt;Write-CommandBlogPost&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9252302" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Thu, 25 Dec 2008 00:00:00 GMT</pubDate><category>SAPscript</category></item><item><title>Au bureau sans être au bureau</title><link>http://www.thespot4sap.com/SAP-XI/re-146217_Au-bureau-sans-%c3%aatre-au-bureau.aspx</link><description>&lt;P&gt;Exceptionnellement, j’étais au bureau hier, mais, devant le risque d’encombrements, je vais rester, aujourd’hui, à mon domicile. En cette veille de Noël, j’hésite à faire les quelques kilomètres qui me séparent du siège de Microsoft France quand de nombreuses possibilités sont mises à ma disposition pour éviter ce déplacement.&lt;/P&gt;
&lt;P&gt;Dans le même temps, les échos du siège de Microsoft à Redmond démontrent que pour ceux qui y travaillent, le trajet est encore plus complexe. À l’heure qu’il est la &lt;A href="http://images.earthcam.com/spaceneedle/live.php" target=_blank mce_href="http://images.earthcam.com/spaceneedle/live.php"&gt;caméra&lt;/A&gt; posté en haut de &lt;A href="http://search.live.com/images/results.aspx?q=%22space+needle%22" target=_blank mce_href="http://search.live.com/images/results.aspx?q=%22space+needle%22"&gt;Space Needle&lt;/A&gt; ne permet pas de distinguer grand chose, mais les rues étaient dégagées lors de ma précédente visite, ce qui n’était pas le cas sur des photos prises en dehors du centre ville. Dans ces conditions de circulation, la direction conseille de rester chez soi et le service informatique présente des informations pour faciliter le travail à distance.&lt;/P&gt;
&lt;P&gt;De manière classique, il existe la possibilité d’ouvrir un canal VPN de manière à être connecté sur le réseau interne. Je n’utilise désormais que très peu fréquemment cette possibilité compte tenu des autres moyens qui sont mis à ma disposition. Il y a quelques applications “lourdes” qui nécessitent ce niveau de connexion, mais je ne les utilisent pas régulièrement. Dans un futur proche, la technologie DirectAccess de Windows Server 2008 R2 me permettra de passer insensiblement d’Internet au réseau interne.&lt;/P&gt;
&lt;P&gt;Mon utilisation la plus classique et la plus fréquente consiste à utiliser Outlook en mode “RPC sur http” grâce aux services offerts nativement par &lt;A href="http://www.microsoft.com/france/exchange/default.mspx" target=_blank mce_href="http://www.microsoft.com/france/exchange/default.mspx"&gt;Exchange&lt;/A&gt; depuis Exchange 2003 et Outlook 2003. Je relève, ainsi, mon courrier à travers Internet depuis mon ordinateur professionnel habituel. Si je souhaite consulter rapidement mes messages depuis l’ordinateur de la maison, j’utilise Outlook Web Access (OWA). Mon téléphone portable me permet également soit en Wifi, soit par le réseau GSM de consulter certains dossier que je synchronise. En effet, des règles exécutées sur le serveur Exchange répartissent les messages dans certains dossier en fonctions de différents critères, permettant, ainsi, de ne copier sur le téléphone que ceux des projets en cours ou demandant des réponses rapides.&lt;/P&gt;
&lt;P&gt;Pour le suivi de la note de frais que j’ai déposé hier (les justificatifs physiques sont, me semble-t-il, encore indispensable du point de vue fiscal), différents sites Web sont accessibles depuis Internet. Sans en avoir la certitude absolue, je suppose que ces sites Web sont protégés par Microsoft &lt;A href="http://www.microsoft.com/france/isaserver/default.mspx" target=_blank mce_href="http://www.microsoft.com/france/isaserver/default.mspx"&gt;Internet Security and Acceleration&lt;/A&gt; (ISA) Server.&lt;/P&gt;
&lt;P&gt;La consultation, néanmoins, de certains site internes ou l’accès à certains serveurs de partage de fichiers n’est pas faisable aujourd’hui directement, mais des serveurs passerelles sont utilisables qui utilisent les services TS Gateway, TS Web Access, Remote Desktop et TS RemoteApp de Windows Server 2008 fondés sur le protocole Remote Desktop Protocol (RDP). Dans le même esprit, Remote Access Portal me donne accès à des applications internes via &lt;A href="http://www.microsoft.com/france/forefront/edgesecurity/iag/default.mspx" target=_blank mce_href="http://www.microsoft.com/france/forefront/edgesecurity/iag/default.mspx"&gt;Intelligent Application Gateway&lt;/A&gt; (IAG).&lt;/P&gt;
&lt;P&gt;En dehors de la messagerie qui est orientée “communication asynchrone”, j’utilise &lt;A href="http://office.microsoft.com/fr-fr/products/FX101729051036.aspx" target=_blank mce_href="http://office.microsoft.com/fr-fr/products/FX101729051036.aspx"&gt;Office Communicator&lt;/A&gt; pour signaler ma disponibilité et permettre une communication synchrone, par messagerie instantanée, voix ou vidéo. Si j’utilise mon ordinateur personnel à la maison ou un ordinateur d’un kiosque public, je peux utiliser Communicator Web Access qui ne nécessite qu’un simple navigateur.&lt;/P&gt;
&lt;P&gt;Que ce soit pour des conférences avec mes collègues de Microsoft ou des clients, j’utilise les services de &lt;A href="http://office.microsoft.com/fr-fr/livemeeting/FX101729061036.aspx" mce_href="http://office.microsoft.com/fr-fr/livemeeting/FX101729061036.aspx"&gt;Microsoft Office Live Meeting&lt;/A&gt;. De la simple conférence téléphonique jusqu’à la réunion permettant de partager des applications de mon poste, Live Meeting évite des déplacements inutiles. Bien que n’ayant pas de &lt;A href="http://www.microsoft.com/france/office/UC/officeroundTable.mspx" target=_blank mce_href="http://www.microsoft.com/france/office/UC/officeroundTable.mspx"&gt;RoundTable&lt;/A&gt; à la maison, je peux bénéficier de l’équipement des salles de réunions situées au bureau pour mieux interagir avec mes interlocuteurs.&lt;/P&gt;
&lt;P&gt;Ces moyens facilitent beaucoup la vie et permettent, néanmoins, de conserver un attachement avec le reste des collègues, sentiment qu’il était difficile d’entretenir, il y a de cela que quelques années.&lt;/P&gt;
&lt;P&gt;Je vous souhaite, en attendant l’arrivée du père Noël, de bonnes fêtes de fin d’année !&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9251711" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Wed, 24 Dec 2008 00:00:00 GMT</pubDate><category>SAP XI</category></item><item><title>Microcode: PowerShell + XNA: New-SpriteFont</title><link>http://www.thespot4sap.com/SAPscript/re-146226_Microcode--PowerShell--XNA--New-SpriteFont.aspx</link><description>&lt;p class="PostHeader"&gt;As I said in a previous post, I've started to explore the wild world of &lt;a href="http://creators.xna.com"&gt;XNA&lt;/a&gt;. XNA just released version 3, which allows you to make games for Windows, Xbox, and Zune. The SDK is free, and you can download it &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&amp;amp;amp;displaylang=en"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p class="PostHeader"&gt;&lt;a href="http://blogs.msdn.com/mediaandmicrocode/archive/2008/12/24/microcode-powershell-scripting-tricks-get-font.aspx"&gt;The last post introduced Get-Font&lt;/a&gt;, a quick function that lets me see what fonts are on the system. I wrote this function to save me the potential future headache of making a typo in my SpriteFont file, and in this post I'll show you New-SpriteFont, which uses Get-Font and emits a Sprite Font file with a number of parameters for any font on my system.&lt;/p&gt;  &lt;p class="PostHeader"&gt;New-SpriteFont was fairly straightforward. I simply check for any font that is named what I say, and throw an error if one is not found. Then I copied a sprite font file from the sample Platformer project into my function, and added a parameter for each part of the XML I wanted to parameterize in a script. Since font names cannot contain characters that would trouble XML (and I've already checked to make sure the font exists), I don't need to worry about escaping my XML for the font name. Almost everything else was an integer, except for style. The only interesting curve ball that the spritefont XML threw me was that it used a lowercase true. True will read as &amp;amp;quot;True&amp;amp;quot;, and since XML is case-sensitive (even though PowerShell is not), I coerced the switch parameter into a string and then turned the string into a lowercase string.&lt;/p&gt;  &lt;p class="PostHeader"&gt;Then I tacked on some inline help, and I had a New-SpriteFont that did the trick. I'm using &lt;a href="http://blogs.msdn.com/powershell/archive/2008/12/24/write-commandblogpost.aspx"&gt;Write-CommandBlogPost&lt;/a&gt; to write up New-SpriteFont for public consumption. Enjoy!&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletSynopsis"&gt;&lt;b&gt;Synopsis:&lt;/b&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Creates a New XNA SpriteFont &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletSyntax"&gt;&lt;b&gt;Syntax:&lt;/b&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;New-SpriteFont [[-font] [&amp;amp;lt;Object&amp;amp;gt;]] [[-size] [&amp;amp;lt;Int32&amp;amp;gt;]] [[-spacing] [&amp;amp;lt;Int32&amp;amp;gt;]] [[-style] [&amp;amp;lt;Object&amp;amp;gt;]] [&amp;amp;lt;CommonParameters&amp;amp;gt;] &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletDescription"&gt;&lt;b&gt;Detailed Description:&lt;/b&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Generates an XNA SpriteFont file. Allows you to specify the font name, size, spacing, style, and if kerning is used or not &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="Examples"&gt;Examples: &lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="CmdletExample"&gt;    -------------------------- EXAMPLE 1 --------------------------





# Create a simple New sprite font
New-SpriteFont
    &lt;/pre&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;pre class="CmdletExample"&gt;    -------------------------- EXAMPLE 2 --------------------------





# Create a sprite font using the font Garamond and a fontsize of 12
New-SpriteFont &amp;amp;quot;Garamond&amp;amp;quot; 12
    &lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p class="CmdletParameters"&gt;Command Parameters: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;table&gt;&lt;colgroup&gt;&lt;col /&gt;&lt;col /&gt;&lt;/colgroup&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;th&gt;Name&lt;/th&gt;

        &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;font&lt;/td&gt;

        &lt;td&gt;The font name of the XNA sprite font to use (default Lucida Console)&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;size&lt;/td&gt;

        &lt;td&gt;The font size of the XNA Sprite Font (default 14)&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;spacing&lt;/td&gt;

        &lt;td&gt;The spacing between the fonts (default 0)&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;useKerning&lt;/td&gt;

        &lt;td&gt;If set, the XNA sprite font will use kerning&lt;/td&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;style&lt;/td&gt;

        &lt;td&gt;The style of the font (e.g. Regular, Bold, Italic)&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;Here's New-SpriteFont: &lt;i&gt;&lt;/i&gt;

  &lt;blockquote&gt;
    &lt;pre class="CmdletDefinition"&gt;function New-SpriteFont {
           
    &amp;amp;lt;#
    .Synopsis
        Creates a New XNA SpriteFont
    .Description
        Generates an XNA SpriteFont file.  Allows you to specify the font name, size, spacing, style, and if kerning is used or not
    .Parameter font
        The font name of the XNA sprite font to use (default Lucida Console)
    .Parameter size
        The font size of the XNA Sprite Font (default 14)
    .Parameter spacing
        The spacing between the fonts (default 0)
    .Parameter useKerning
        If set, the XNA sprite font will use kerning
    .Parameter style
        The style of the font (e.g. Regular, Bold, Italic)
    .Link
        Get-Font
    .Example
        # Create a simple New sprite font
        New-SpriteFont
    .Example
        # Create a sprite font using the font Garamond and a fontsize of 12
        New-SpriteFont &amp;amp;quot;Garamond&amp;amp;quot; 12
    #&amp;amp;gt;
param($font = &amp;amp;quot;Lucida Console&amp;amp;quot;,
    [int]$size = 14,
    [int]$spacing = 0,
    [switch]$useKerning,
    $style = &amp;amp;quot;Regular&amp;amp;quot;)
if (-not (Get-Command Get-Font -ErrorAction SilentlyContinue )) { throw $error[0] }
    $checkedFont = Get-Font $font
    if (-not $checkedFont) {
        throw &amp;amp;quot;The font name $font is not valid. Pick a new one a-hole.&amp;amp;quot;
    }
@&amp;amp;quot;
&amp;amp;lt;?xml version=&amp;amp;quot;1.0&amp;amp;quot; encoding=&amp;amp;quot;utf-8&amp;amp;quot;?&amp;amp;gt;
&amp;amp;lt;!--
This file contains an xml description of a font, and will be read by the XNA
Framework Content Pipeline. Follow the comments to customize the appearance
of the font in your game, and to change the characters which are available to draw
with.
--&amp;amp;gt;
&amp;amp;lt;XnaContent xmlns:Graphics=&amp;amp;quot;Microsoft.Xna.Framework.Content.Pipeline.Graphics&amp;amp;quot;&amp;amp;gt;
  &amp;amp;lt;Asset Type=&amp;amp;quot;Graphics:FontDescription&amp;amp;quot;&amp;amp;gt;

    &amp;amp;lt;!--
    Modify this string to change the font that will be imported.
    --&amp;amp;gt;
    &amp;amp;lt;FontName&amp;amp;gt;$font&amp;amp;lt;/FontName&amp;amp;gt;

    &amp;amp;lt;!--
    Size is a float value, measured in points. Modify this value to change
    the size of the font.
    --&amp;amp;gt;
    &amp;amp;lt;Size&amp;amp;gt;$size&amp;amp;lt;/Size&amp;amp;gt;

    &amp;amp;lt;!--
    Spacing is a float value, measured in pixels. Modify this value to change
    the amount of spacing in between characters.
    --&amp;amp;gt;
    &amp;amp;lt;Spacing&amp;amp;gt;$spacing&amp;amp;lt;/Spacing&amp;amp;gt;

    &amp;amp;lt;!--
    UseKerning controls the layout of the font. If this value is true, kerning information
    will be used when placing characters.
    --&amp;amp;gt;
    &amp;amp;lt;UseKerning&amp;amp;gt;$($useKerning.ToString().ToLower())&amp;amp;lt;/UseKerning&amp;amp;gt;

    &amp;amp;lt;!--
    Style controls the style of the font. Valid entries are &amp;amp;quot;Regular&amp;amp;quot;, &amp;amp;quot;Bold&amp;amp;quot;, &amp;amp;quot;Italic&amp;amp;quot;,
    and &amp;amp;quot;Bold, Italic&amp;amp;quot;, and are case sensitive.
    --&amp;amp;gt;
    &amp;amp;lt;Style&amp;amp;gt;$style&amp;amp;lt;/Style&amp;amp;gt;

    &amp;amp;lt;!--
    If you uncomment this line, the default character will be substituted if you draw
    or measure text that contains characters which were not included in the font.
    --&amp;amp;gt;
    &amp;amp;lt;!-- &amp;amp;lt;DefaultCharacter&amp;amp;gt;*&amp;amp;lt;/DefaultCharacter&amp;amp;gt; --&amp;amp;gt;

    &amp;amp;lt;!--
    CharacterRegions control what letters are available in the font. Every
    character from Start to End will be built and made available for drawing. The
    default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
    character set. The characters are ordered according to the Unicode standard.
    See the documentation for more information.
    --&amp;amp;gt;
    &amp;amp;lt;CharacterRegions&amp;amp;gt;
      &amp;amp;lt;CharacterRegion&amp;amp;gt;
        &amp;amp;lt;Start&amp;amp;gt;&amp;amp;amp;#32;&amp;amp;lt;/Start&amp;amp;gt;
        &amp;amp;lt;End&amp;amp;gt;&amp;amp;amp;#126;&amp;amp;lt;/End&amp;amp;gt;
      &amp;amp;lt;/CharacterRegion&amp;amp;gt;
    &amp;amp;lt;/CharacterRegions&amp;amp;gt;
  &amp;amp;lt;/Asset&amp;amp;gt;
&amp;amp;lt;/XnaContent&amp;amp;gt;
&amp;amp;quot;@    

}    &lt;/pre&gt;
  &lt;/blockquote&gt;
&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p class="Postfooter"&gt;Hope this Helps,&lt;/p&gt;

&lt;p class="Postfooter"&gt;James Brundage [MSFT]&lt;/p&gt;

&lt;p style="font-size: xx-small"&gt;Automatically generated with &lt;a href="http://blogs.msdn.com/powershell/archive/tags/Write-CommandBlogPost/default.aspx"&gt;Write-CommandBlogPost&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9251648" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Wed, 24 Dec 2008 00:00:00 GMT</pubDate><category>SAPscript</category></item><item><title>Microcode: PowerShell Scripting Tricks: Get-Font</title><link>http://www.thespot4sap.com/SAPscript/re-146229_Microcode--PowerShell-Scripting-Tricks--Get-Font.aspx</link><description>&lt;p class="PostHeader"&gt;I've started to explore the wild world of &lt;a href="http://creators.xna.com"&gt;XNA&lt;/a&gt;. XNA just released version 3, which allows you to make games for Windows, Xbox, and Zune. The SDK is free, and you can download it &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&amp;amp;amp;displaylang=en"&gt;here&lt;/a&gt;. It comes with a nifty little platformer game (think a 3-screen Super Mario Brothers), which helps a lot with the process of learning XNA.&lt;/p&gt;  &lt;p class="PostHeader"&gt;XNA involves a lot of little resource files, including one called a SpriteFont. The format for a SpriteFont file is really simple XML, so I decided to make a quick PowerShell function that would create a sprite font file. I could be very lazy, and simply accept whatever font name they gave me on faith, but I'm sure I would be very frustrated the first time I typed New-SpriteFont Arrial, and spent the next 15 minutes of my life wondering why my project wasn't compiling when all that was wrong was an extra 'r'. To save myself this future pain, I've made Get-Font, so New-SpriteFont can check what fonts exist before creating the file.&lt;/p&gt;  &lt;p class="PostHeader"&gt;Making Get-Font wasn't all that hard. I simply used my Get-Type function to find all of the types named fonts (Get-Type | Where-Object { .Name -eq &amp;amp;quot;Fonts&amp;amp;quot; } | Select FullName) and then explored static member properties. I wrote Get-Font in the Windows PowerShell Integrated Scripting Editor, so I added a check to load up the right assembly (which I also found out by using Get-Type) in case I was trying to use Get-Font from the PowerShell console. All told, Get-Font took about 5 minutes to write, and ended up being a quick PowerShell lesson for my girlfriend. I added inline help, and then I was done. Here's Get-Font. I'll show New-SpriteFont in a separate post.&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletName"&gt;Get-Font&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletSynopsis"&gt;&lt;b&gt;Synopsis:&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Gets the fonts currently loaded on the system &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletSyntax"&gt;&lt;b&gt;Syntax:&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Get-Font [[-font] [&amp;amp;lt;Object&amp;amp;gt;]] [&amp;amp;lt;CommonParameters&amp;amp;gt;] &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletDescription"&gt;&lt;b&gt;Detailed Description:&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Uses the type System.Windows.Media.Fonts static property SystemFontFamilies,    &lt;br /&gt;to retrieve all of the fonts loaded by the system. If the Fonts type is not found,     &lt;br /&gt;the PresentationCore assembly will be automatically loaded &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="Examples"&gt;Examples: &lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="CmdletExample"&gt;    -------------------------- EXAMPLE 1 --------------------------





# Get All Fonts
Get-Font
    &lt;/pre&gt;
&lt;/blockquote&gt;

&lt;blockquote&gt;
  &lt;pre class="CmdletExample"&gt;    -------------------------- EXAMPLE 2 --------------------------





# Get All Lucida Fonts
Get-Font *Lucida*
    &lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p class="CmdletParameters"&gt;Command Parameters: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;table&gt;&lt;colgroup&gt;&lt;col /&gt;&lt;col /&gt;&lt;/colgroup&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;th&gt;Name&lt;/th&gt;

        &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;font&lt;/td&gt;

        &lt;td&gt;A wildcard to search for font names&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;Here's Get-Font: &lt;i&gt;&lt;/i&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="CmdletDefinition"&gt;function Get-Font {
           
    &amp;amp;lt;#
    .Synopsis
        Gets the fonts currently loaded on the system
    .Description
        Uses the type System.Windows.Media.Fonts static property SystemFontFamilies,
        to retrieve all of the fonts loaded by the system.  If the Fonts type is not found,
        the PresentationCore assembly will be automatically loaded
    .Parameter font
        A wildcard to search for font names
    .Example
        # Get All Fonts
        Get-Font
    .Example
        # Get All Lucida Fonts
        Get-Font *Lucida*
    #&amp;amp;gt;
    param($font = &amp;amp;quot;*&amp;amp;quot;)
if (-not (&amp;amp;quot;Windows.Media.Fonts&amp;amp;quot; -as [Type])) {
        Add-Type -AssemblyName &amp;amp;quot;PresentationCore&amp;amp;quot;
    }       

    [Windows.Media.Fonts]::SystemFontFamilies |
        Where-Object { $_.Source -like &amp;amp;quot;$font&amp;amp;quot; } 

}
    &lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p class="Postfooter"&gt;Hope this Helps,&lt;/p&gt;

&lt;p class="Postfooter"&gt;James Brundage [MSFT]&lt;/p&gt;

&lt;p style="font-size: xx-small"&gt;Automatically generated with &lt;a href="http://blogs.msdn.com/powershell/archive/tags/Write-CommandBlogPost/default.aspx"&gt;Write-CommandBlogPost&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9251628" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Wed, 24 Dec 2008 00:00:00 GMT</pubDate><category>SAPscript</category></item><item><title>Microsoft BizSpark – ????? ????????? ??? ???, ??? ?????? ?????? ?? ??????????? ????????? ??? ??????????? ???????? ????????</title><link>http://www.thespot4sap.com/BizTalk/re-146231_Microsoft-BizSpark-%e2%80%93--------------.aspx</link><description>&lt;P&gt;BizSpark ??? ????????????? ?????????, ??????????????? ?????????? ?????????-????????????? ?? ? ??????? 3 ??? ????? ????????? ???????????:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;?????? ? ???????????&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;???????? ??? ???????, ?????????? ? ????????????. ??????????????? ???????? ??&amp;amp;nbsp; Expression Studio (1 ????????), Visual Studio Team System c MSDN Premium ? Team Foundation Server (??????????? ??????) ?? ??? ??????? ??????????&lt;/LI&gt;
&lt;LI&gt;???????? ?? ???????????? ????????????? ??? ?????????? ? ???? ???????? ??????? ???? SaaS ? ????????-????????, ????????? ?? ???? ???????????? ???????????.&amp;amp;nbsp; ??????????????? ???????? ??&amp;amp;nbsp; Windows Server, SQL Server, SharePoint Portal Server, Systems Center, BizTalk Server.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;?????????&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;???????????????? ????????? ?? Microsoft: 2 ????????? ??????????? ????????? ?? ????????&lt;/LI&gt;
&lt;LI&gt;?????? ? MSDN Premium&lt;/LI&gt;
&lt;LI&gt;????????? ????????? ?? ?????????? BizSpark : ????????????, ??????????, ???????, ? ??.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;???????????&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;??????????? ??????? ? ????, ?????? ???? ??????? ? ????????????? ???????? BizsparkDB ?? ????? Microsoft Startup Zone&lt;/LI&gt;
&lt;LI&gt;??????????? ???? ?????????? ? BizSparkDB ??? «???????? ??????» BizSpark ?? ????? Microsoft Startup Zone&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;??????? ????????? BizSpark&lt;/STRONG&gt;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;???????? ?????? ????????????? ??????????? ??????? ??? ??????????? ????????-??????, ?????????? ?? ??????????? ???????????, ??????? ????? ???????? ???????? ??????????? ???????????? ??????? ????????. ???? ???????? ????????? ???????????? ????????? ????? ???????, ?? ????????, ?????????? ? ?????? BizSpark ????? ?????????????? ? ?????? ?????????? ???????????? ????????? ? ????????, ?? ?? ????? – ??? ???????? ????? ???????? ?????????? , ????? ??? ???????, ?????? ???-??????, ????????? ??????????, ?????????????? ?????????? ??.&lt;/LI&gt;
&lt;LI&gt;???????? ?????? ???? ???????, ?????????? ? ??????? ?? ????? 3 ??? ? ????? ??????? ????? ?? ????? 500 ???. ????. ??? (????? ?????? ????????? ??? ??????). ???????????????, ??????? ?????? ????????? ? ???????? ??????????? ??. ????, ????? ????? ??????????? ? ?????????.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;??????????? ? ????????? ?????????. ?? ????????? ???????? ? ?????????, ?????????? ???????? ?????? ???????? Microsoft&amp;amp;nbsp; ????? ?? ??????? ? ????????? ? ??????? 100 ????. ???.&lt;/P&gt;
&lt;P&gt;????????? ???????? ????????? ????? ???? ??????? ?????: &lt;A href="http://ms-start.ru/Programs/BizSpark.aspx" mce_href="http://ms-start.ru/Programs/BizSpark.aspx"&gt;http://ms-start.ru/Programs/BizSpark.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9251622" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Wed, 24 Dec 2008 00:00:00 GMT</pubDate><category>BizTalk</category></item><item><title>MVPs speak out at TechEd China!</title><link>http://www.thespot4sap.com/SAP-XI/re-146221_MVPs-speak-out-at-TechEd-China.aspx</link><description>&lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/china/technet/teched/default.aspx"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/mvpawardprogram/WindowsLiveWriter/MVPsspeakoutatTechEdChina_8D0D/image_5.png" width="833" height="233" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/china/technet/teched/default.aspx"&gt;&lt;b&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://www.microsoft.com/china/technet/teched/default.aspx"&gt;TechEd 2008 China&lt;/a&gt; took place in late October and early November and was held in three major cities, Guangzhou, Shanghai and Beijing. TechEd attracted over 6,000 attendees from around the world. In particular, 11 MVPs demonstrated their passion for the event, by delivering a wide range of community sessions related to their technical expertise. Also, 12 MVP speakers delivered a good mixture of breakout sessions ranging from Visual C# to Microsoft Office.&lt;/p&gt;  &lt;p&gt;Take a look at the &lt;a href="http://www.microsoft.com/china/technet/teched/default.aspx"&gt;TechEd China&lt;/a&gt; website and the individual MVP sites for further information&lt;/p&gt;  &lt;p&gt;&amp;amp;#160;&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://jeffreyzhao.cnblogs.com"&gt;Jie Zhao&lt;/a&gt; &lt;b&gt;&lt;/b&gt;ASP/ASP.NET, MVP &lt;a href="http://www.microsoft.com/china/technet/teched/course1.aspx#houzhonglei"&gt;Zhonglei Hou&lt;/a&gt; SharePoint Server&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://twodays.cnblogs.com/"&gt;Kenn Zhang&lt;/a&gt; Windows Mobile, MVP &lt;a href="http://blog.joycode.com/erucy/"&gt;Wei Du&lt;/a&gt; SharePoint Services&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://blog.joycode.com/mango/"&gt;Xingming Wan&lt;/a&gt;g Visual C#, MVP &lt;a href="http://blog.donews.com/winmagyinjie/"&gt;Jie Yin&lt;/a&gt; Exchange Server&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://www.qihangnet.com"&gt;Mingzhi Yi&lt;/a&gt; ASP/ASP.NET, MVP &lt;a href="http://blog.sina.com.cn/caohj"&gt;Haijun Cao&lt;/a&gt; Forefront&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://www.microsoft.com/china/technet/teched/course1.aspx#niuke"&gt;Ke Niu&lt;/a&gt; Forefront, MVP &lt;a href="http://blog.donews.com/winmagyinjie/"&gt;Jie Yin&lt;/a&gt; Exchange Server&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://markwin.blog.51cto.com/"&gt;Aihua Peng&lt;/a&gt; Windows Desktop Experience &lt;/p&gt;  &lt;p&gt;&amp;amp;#160;&lt;/p&gt;  &lt;p&gt;12 MVP speakers delivered breakout sessions.&lt;/p&gt;  &lt;p&gt;&amp;amp;#160;&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://liefeng123.cnblogs.com"&gt;Junyi Duan&lt;/a&gt; Visual C#, MVP &lt;a href="http://www.microsoft.com/china/technet/teched/course1.aspx#fanchunying"&gt;Fancy Fan&lt;/a&gt; SQL, &lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://omale.blogcn.com"&gt;Zongjian He&lt;/a&gt; Windows Embedded, MVP &lt;a href="http://www.microsoft.com/china/technet/teched/course1.aspx#huangwenzhong"&gt;Wenzhong Huang&lt;/a&gt; Windows Embedded,&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://aawolf.cnblogs.com/"&gt;Ning Ma&lt;/a&gt; Windows Mobile, MVP &lt;a href="http://www.microsoft.com/china/technet/teched/course1.aspx#chenli"&gt;Li Chen&lt;/a&gt; Excel,&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://www.microsoft.com/china/technet/teched/course1.aspx#chengzunhua"&gt;Zunhua Cheng&lt;/a&gt; Management Infrastructure, MVP &lt;a href="http://www.microsoft.com/china/technet/teched/course1.aspx#liliang"&gt;Liang Li&lt;/a&gt; Office System,&lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://www.cnblogs.com/jerryge/"&gt;Hantao Ge &lt;/a&gt;Device Application Development MVP &lt;a href="http://www.kerrey.org"&gt;Kerry Zheng &lt;/a&gt;BizTalk, &lt;/p&gt;  &lt;p&gt;MVP &lt;a href="http://blogs.itecn.net/blogs/yongyu/default.aspx"&gt;Yong Yu&lt;/a&gt; Exchange Server, MVP &lt;a href="ttp://jianwang.blogspot.com"&gt;Jian Wang&lt;/a&gt; Dynamics CRM&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9251680" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Wed, 24 Dec 2008 00:00:00 GMT</pubDate><category>SAP XI</category></item><item><title>Ready!  Fire!  Aim!</title><link>http://www.thespot4sap.com/SAP-XI/re-146211_Ready--Fire--Aim.aspx</link><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;“SharePoint Planning.”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;Much like “change your oil every 10,000 miles”, the phrase “SharePoint Planning” is one of those things that we all know we’re supposed to do, but often just don’t get around to it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;I mean, seriously – we want to deploy &lt;I style="mso-bidi-font-style: normal"&gt;now&lt;/I&gt;, right this very second, and &lt;FONT color=#0099ff size=4&gt;&lt;STRONG&gt;what could &lt;I style="mso-bidi-font-style: normal"&gt;possibly&lt;/I&gt; go wrong&lt;/STRONG&gt;&lt;/FONT&gt; if we skip the planning?&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;If you’re lucky, the answer is “nothing”… at first.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;You see, SharePoint Server is deceptive and tricksy – in most cases it’s relatively easy to install, and within a day or two you can be up and running, creating sites and uploading documents.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;Particularly so if you’re just deploying to the Intranet and you only have a few business requirements to meet.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;No worries, right?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;And maybe you say to yourself, “This stuff is simple, why all the hub-bub?”&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;And after a week or two elapses and everything still “works”, you may even congratulate yourself on saving your company the time and resources it would’ve taken to follow the intricate planning guidance found on TechNet (&lt;/FONT&gt;&lt;A href="http://technet.microsoft.com/en-us/library/cc261834.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc261834.aspx"&gt;&lt;FONT face=Calibri size=3&gt;http://technet.microsoft.com/en-us/library/cc261834.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Punch the clock – it’s Miller time!&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;&lt;FONT color=#0099ff size=4&gt;&lt;STRONG&gt;Not so fast&lt;/STRONG&gt;&lt;FONT color=#000000 size=3&gt;.&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Before you start getting your “Contributor of the Year” speech ready, you should take some time to understand that &lt;STRONG&gt;&lt;FONT color=#0099ff size=4&gt;SharePoint only &lt;I style="mso-bidi-font-style: normal"&gt;seems&lt;/I&gt; easy&lt;/FONT&gt;&lt;/STRONG&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;In the same way that gravity seems easy to understand at first glance, SharePoint has an extremely high level of approachability.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;Of course, nobody (and I mean nobody) &lt;I style="mso-bidi-font-style: normal"&gt;really&lt;/I&gt; understands gravity.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;All of our advances in theoretical and experimental physics only help us predict how it’ll behave &lt;I style="mso-bidi-font-style: normal"&gt;most of the time&lt;/I&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;SharePoint not’s terribly different.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;It’s often only when you take a longer view and start examining some of the “what if” use cases that you realize that SharePoint is massively, dauntingly complex.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;If not properly planned (and subsequently governed, but we’ll address that another time), your SharePoint farm will slowly morph into an uncontrollable, unmanageable, unmitigated, ROI-sapping mess.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;And it’s not just a possibility – it’s virtually guaranteed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Yep, there it is folks - SharePoint’s secret is that it is an order of magnitude more complex than most of the other “infrastructure” products you may have deployed in the past.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;And if you don’t believe it, it simply means that you don’t yet understand it well enough.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;If that’s the case, don’t feel bad – many of us started out with that exact same perception in the beginning.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Let’s look at Exchange for example.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;I’m not here to suggest that an enterprise deployment of Exchange is an easy affair, but &lt;STRONG&gt;&lt;FONT color=#0099ff size=4&gt;MOSS is simply in another league&lt;/FONT&gt;&lt;/STRONG&gt;.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;For an (admittedly unscientific) empirical comparison, we could note that the TechNet Planning &amp;amp;amp; Architecture section for Exchange lists roughly 15 planning items vs. 85 for MOSS.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;And without doing any business analysis at all, we pretty much already know what we want the core functionality and primary ROI of our Exchange infrastructure to be – to send and receive email.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;But with SharePoint, not so much.&amp;amp;nbsp;&amp;amp;nbsp; In fact, we generally have no idea whatsoever about which of the many features of SharePoint may solve a client’s business problem until we first talk to the client to learn what those business problems are.&amp;amp;nbsp;&amp;amp;nbsp; Of course, learning about the problems is only part of the battle – to effectively map them to the product features (or 3rd-party add-ons or custom development) we need to plan.&amp;amp;nbsp; &lt;FONT color=#0099ff size=4&gt;&lt;STRONG&gt;With SharePoint, the ROI is almost all in the planning&lt;/STRONG&gt;&lt;/FONT&gt;.&amp;amp;nbsp; &amp;amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;To adequately understand the complexities surrounding SharePoint, you must first understand &lt;I style="mso-bidi-font-style: normal"&gt;what SharePoint&lt;/I&gt; &lt;I style="mso-bidi-font-style: normal"&gt;is.&lt;/I&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;For now, let’s avoid the buzzword of “portal” to describe it, and instead look at the categories of functionality.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;You probably know them well:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Business Intelligence, Enterprise Search, Collaboration, Site Provisioning, Content Management, Process Automation.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Now actually &lt;I style="mso-bidi-font-style: normal"&gt;think &lt;/I&gt;about those for a second.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Any one of those areas is complex enough to warrant an entire industry of specialists.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;Take “Content Management”, for example:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;ECM has been around for years, and organizations have spent an incredible amount of time and energy thinking about how they should properly manage business-critical structured and unstructured data.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;Why?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;They do so for any number of reasons:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;reliable auditing, reduction of paper, eliminating lost documents, improved productivity and efficiency, business process alignment, security (to include DRM), and legal requirements.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;There is very little debate that ECM is a critically important IT discipline, and that very smart people have devoted entire careers to mastering it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Yet that’s only a &lt;I style="mso-bidi-font-style: normal"&gt;portion&lt;/I&gt; of the functionality that SharePoint enables.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;And how about Process Automation?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Of course, most of us would agree that the only acceptable way to create good business automation is through meaningful business analysis.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;Trust me:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;the last thing you want to try to do is automate a process you don’t understand, because it’s very likely that you will only succeed in making a bad process go very, very fast.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;But business process analysis takes time – time which should be allocated during the planning phase of your project.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;So &lt;STRONG&gt;&lt;FONT color=#0099ff size=4&gt;what can happen if you don’t plan&lt;/FONT&gt;&lt;/STRONG&gt; (and subsequently govern)?&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;Lots, and none of it good.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Here’s some real-world examples: &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;For the want of a well-structured site topology, haphazard site creation emerges; the navigation and the security model become a nightmare to manage.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Due to the lack of formal file plans, content types and search scopes, information is harder to find than ever before.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Since business processes were never holistically analyzed, duplicative and inefficient workflows spring up all over the portal.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Because the impact of custom development was never considered, your farm cannot be patched or upgraded.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Since very little thought was given to how your end-users might collaborate outside of their own organizational site, that collaboration instead takes place over the phone and email.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Because no one stopped to calculate the peak load of the system, it slows to a crawl at noon and nobody uses it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Because the deployment wasn’t methodically planned, large categories of MOSS functionality were simply overlooked and not implemented, resulting in lost ROI and the lack of user interest.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;I’ve seen all of these symptoms at client sites, and so have many others.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;The list of what can go wrong if you don’t thoroughly plan your SharePoint deployment is long and illustrious.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;And no matter how little appetite some may have for a full-blown “planning phase”, it’s important to remember that it’s much, much cheaper to plan it right the first time than to call the experts in later to fix it.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;In some cases, hundreds of thousands of dollars cheaper.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;To help ensure your level of planning is appropriate and your portal a long-term success, I &lt;STRONG&gt;&lt;FONT color=#0099ff size=4&gt;recommend the following&lt;/FONT&gt;&lt;/STRONG&gt;: &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri size=3&gt;Read the guidance listed on TechNet (and linked above) in its entirety.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;It doesn’t necessarily cover every single scenario around how your organization might choose to use SharePoint, but it’s a great place to get started.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpMiddle style="MARGIN: 0in 0in 0pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Include each of those planning steps as a line item in your project plan.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;A sample plan is available on TechNet for download:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://technet.microsoft.com/en-us/library/cc262825.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc262825.aspx"&gt;&lt;FONT face=Calibri size=3&gt;http://technet.microsoft.com/en-us/library/cc262825.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="MARGIN: 0in 0in 10pt 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2"&gt;&lt;SPAN style="FONT-FAMILY: Symbol; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;·&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;If you don’t have someone on staff with a high level of SharePoint expertise and experience, consider bringing in a consultant.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;There are lots of terrific consultants out there, and Joel Oleson wrote an excellent blog entry on what makes them that way:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/joelo/archive/2007/07/23/depth-and-breadth-in-a-sharepoint-architect-skills.aspx" mce_href="http://blogs.msdn.com/joelo/archive/2007/07/23/depth-and-breadth-in-a-sharepoint-architect-skills.aspx"&gt;&lt;FONT face=Calibri size=3&gt;http://blogs.msdn.com/joelo/archive/2007/07/23/depth-and-breadth-in-a-sharepoint-architect-skills.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;So let’s cut to the chase.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&amp;amp;nbsp; &lt;/SPAN&gt;SharePoint is wonderful.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Fantastic.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;Amazing even.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;And if you’ve ever seen it in action, it’s pretty easy to understand why it’s the fastest growing product in Microsoft history.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;But if you are in an organization that’s about to deploy SharePoint, please &lt;STRONG&gt;&lt;FONT color=#0099ff size=4&gt;Aim before you Fire&lt;/FONT&gt;&lt;/STRONG&gt;!&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9251738" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Wed, 24 Dec 2008 00:00:00 GMT</pubDate><category>SAP XI</category></item><item><title>Resolve-ShortcutFile</title><link>http://www.thespot4sap.com/SAPscript/re-146311_Resolve-ShortcutFile.aspx</link><description>&lt;p class="PostHeader"&gt;If you're like me, you've got a browser favorites folder that is full of wonderful PowerShell code snippets. Ideally, it would be great to have a way to bring those favorite snippets into PowerShell so that my favorites folder becomes a code library.&lt;/p&gt;  &lt;p class="PostHeader"&gt;Doing this presents several challenges. The first (and easiest to solve) is getting the web page the shortcut points to out of the .url file.&lt;/p&gt;  &lt;p class="PostHeader"&gt;.url files are in the same sort of format as .ini files (each line has a property name, and =, and the value). So to get the url out of a shortcut file, I simply had to Get-Content on the file, pipe it to Where-Object, look for the start marker (url=), and get everything after that marker.&lt;/p&gt;  &lt;p class="PostHeader"&gt;I decided to write this as an advanced function in CTP3, because I can make the parameters work well both with tab completed local files (e.g. .\MyShortcut.url) and with files passed in from Get-ChildItem. Making this happen is incredibly straightforward because of how ValueFromPipelineByPropertyName works with aliases. In the output of Get-ChildItem, the Fullname property will have full file name for me to use. Since I believe fullname is less intuitive than filename (and I'm trying to show some cool CTP3 scripting tricks), I've named my parameter and given it an alias of FullName. This means that items that are piped in with a property named either filename or fullname will populate $filename with the full path to the file.&lt;/p&gt;  &lt;p class="PostHeader"&gt;Here's a parameter signature that will accept both Resolve-Shortcut .\MyShortcut.url and Get-ChildItem -recurse | Resolve-Shortcut:&lt;/p&gt;  &lt;p class="PostHeader"&gt;&lt;/p&gt;  &lt;blockquote&gt;[Parameter( ValueFromPipeline=$true,    &lt;br /&gt;ValueFromPipelineByPropertyName=$true,     &lt;br /&gt;Position = 0)]     &lt;br /&gt;[Alias(&amp;amp;quot;FullName&amp;amp;quot;)]     &lt;br /&gt;[string]     &lt;br /&gt;$fileName     &lt;br /&gt;&lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p class="PostHeader"&gt;And here is Resolve-ShortcutFile:&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletSynopsis"&gt;&lt;b&gt;Synopsis:&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Resolves an Internet shortcut file to the web site the shortcut references &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletSyntax"&gt;&lt;b&gt;Syntax:&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Resolve-ShortcutFile [[-fileName] [&amp;amp;lt;String&amp;amp;gt;]] [-Verbose] [-Debug] [-ErrorAction [&amp;amp;lt;ActionPreference&amp;amp;gt;]] [-WarningAction [&amp;amp;lt;ActionPreference&amp;amp;gt;]] [-ErrorVariable [&amp;amp;lt;String&amp;amp;gt;]] [-WarningVariable [&amp;amp;lt;String&amp;amp;gt;]] [-OutVariable [&amp;amp;lt;String&amp;amp;gt;]] [-OutBuffer [&amp;amp;lt;Int32&amp;amp;gt;]] [&amp;amp;lt;CommonParameters&amp;amp;gt;] &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="CmdletDescription"&gt;&lt;b&gt;Detailed Description:&lt;/b&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;blockquote&gt;Parses an Internet shortcut file and returns a property bag containing the    &lt;br /&gt;shortcut file and the URL it resolves to. &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;br /&gt;  &lt;p class="Examples"&gt;Examples: &lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="CmdletExample"&gt;    -------------------------- EXAMPLE 1 --------------------------





# Resolves every shortcut in your favorites directory
Get-ChildItem (Join-Path $env:UserProfile Favorites) -Recurse | Resolve-ShortcutFile
    &lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p class="CmdletParameters"&gt;Command Parameters: &lt;/p&gt;

&lt;blockquote&gt;
  &lt;table&gt;&lt;colgroup&gt;&lt;col /&gt;&lt;col /&gt;&lt;/colgroup&gt;&lt;tbody&gt;
      &lt;tr&gt;
        &lt;th&gt;Name&lt;/th&gt;

        &lt;th&gt;Description&lt;/th&gt;
      &lt;/tr&gt;

      &lt;tr&gt;
        &lt;td&gt;fileName&lt;/td&gt;

        &lt;td&gt;The shortcut file name. Aliased to FullName so that it works well with the output of Get-ChildItem.&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p&gt;Here's Resolve-ShortcutFile: &lt;i&gt;&lt;/i&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="CmdletDefinition"&gt;function Resolve-ShortcutFile {
               
    &amp;amp;lt;#
    .Synopsis
        Resolves an Internet shortcut file to the web site the shortcut references
    .Description
        Parses an Internet shortcut file and returns a property bag containing the
        shortcut file and the URL it resolves to.
    .Parameter fileName
        The shortcut file name.  Aliased to FullName so that it works well with the output of Get-ChildItem.
    .Example
        # Resolves every shortcut in your favorites directory
        Get-ChildItem (Join-Path $env:UserProfile Favorites) -Recurse | Resolve-ShortcutFile
    .Link
        Get-Content
    .Link
        Get-Item
    .Link 
        Select-Object
    .Link
        Where-Object           
    #&amp;amp;gt;
    param(
    [Parameter(
        ValueFromPipeline=$true,
        ValueFromPipelineByPropertyName=$true,
        Position = 0)]
    [Alias(&amp;amp;quot;FullName&amp;amp;quot;)]
    [string]
    $fileName
    )
process {

        if ($fileName -like &amp;amp;quot;*.url&amp;amp;quot;) {
            Get-Content $fileName | Where-Object {
                $_ -like &amp;amp;quot;url=*&amp;amp;quot;
            } |
            Select-Object @{
                Name='ShortcutFile'
                Expression = {Get-Item $fileName}
            }, @{
                Name='Url'
                Expression = {$_.Substring($_.IndexOf(&amp;amp;quot;=&amp;amp;quot;) + 1 )}               
            } 
        }
    
}

}    &lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;br /&gt;

&lt;p class="Postfooter"&gt;Hope this Helps,&lt;/p&gt;

&lt;p class="Postfooter"&gt;James Brundage [MSFT]&lt;/p&gt;

&lt;p style="font-size: xx-small"&gt;Automatically generated with &lt;a href="http://blogs.msdn.com/powershell/archive/tags/Write-CommandBlogPost/default.aspx"&gt;Write-CommandBlogPost&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9252224" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Wed, 24 Dec 2008 00:00:00 GMT</pubDate><category>SAPscript</category></item><item><title>Early Christmas Present from PowerShell Team: Community Technology Preview-3 (CTP3) of Windows PowerShell V2</title><link>http://www.thespot4sap.com/SAPscript/re-146106_Early-Christmas-Present-from-PowerShell-Team--Community-Technology-Preview-3-CTP3-of-Windows-PowerShell-V2.aspx</link><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;While Santa and co. are getting busy for Christmas, the &lt;A href="http://blogs.msdn.com/powershell/archive/2008/04/25/the-powershell-team.aspx" target=_blank mce_href="http://blogs.msdn.com/powershell/archive/2008/04/25/the-powershell-team.aspx"&gt;Windows PowerShell Team&lt;/A&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&lt;/SPAN&gt;is pleased to release the &lt;B&gt;&lt;U&gt;third&lt;/U&gt;&lt;/B&gt; Community Technology Preview (CTP3) of Windows PowerShell V2!&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;First let us thank you for all your great feedback on CTP1 and CTP2.&amp;amp;nbsp; This is your product so never be shy about letting us know what you want from it.&amp;amp;nbsp; We made quite a few changes based upon your feedback.&amp;amp;nbsp; That is the benefit of these CTPs, it allows us to change things before we release them.&amp;amp;nbsp; That also means that if you wrote scripts that used the features we changed, they will have to be modified to run properly. &amp;amp;nbsp;We’ll have some more changes before we release but we are getting to the end game so fewer and fewer things will change by smaller and smaller amounts going forward.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;This release brings, among other things, performance improvements ... things will be faster/more efficient than before.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp; &lt;/SPAN&gt;PowerShell remoting now allows implicit remoting where command execution appears to be local even though they are remote. We have added over 60 new cmdlets in this release ... cmdlets for adding/removing/renaming computers, cmdlets for event logs, cmdlets for WS-Man functionality and even a WS-Man provider. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;amp;nbsp;&lt;/SPAN&gt;The “graphical” host, Windows PowerShell ISE, now supports a graphical debugger, context sensitive F1 help and a programmable interface for you to party on.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;These are just a few of the new features we have packaged in this CTP3 release. Additionally this CTP3 includes some simple updates... like new parameters to several existing cmdlets. More feature descriptions and details are in the Release Notes&amp;amp;nbsp;and in the “about” topics included with the installation.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;Reminder to the brave souls who want to use these bits in a production environment ... &lt;B&gt;Don’t, these bits are still CTP&lt;/B&gt;. This &lt;A href="http://blogs.msdn.com/powershell/archive/2007/11/02/ctp-ctp-beta.aspx" target=_blank mce_href="http://blogs.msdn.com/powershell/archive/2007/11/02/ctp-ctp-beta.aspx"&gt;CTP is not a beta&lt;/A&gt;. &lt;B&gt;This software is a pre-release version. It may not work the way a final version of the software does. &lt;/B&gt;These CTP3 bits have not gone through rigorous testing. Even with these caveats, we hope you would try them out and let us know your feedback.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;Last but certainly not least, V2 builds upon Windows PowerShell 1.0 by providing backward compatibility – your 1.0 cmdlets and scripts will run on this CTP3 (with the exceptions noted in the Release Notes - mostly new keywords/cmdlets). If a working 1.0 script doesn’t run on V2 and is not in the known list of exceptions, please tell us about it!&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: center" align=center&gt;&lt;A class=" " title="Windows PowerShell V2 CTP3 download" href="http://go.microsoft.com/fwlink/?LinkID=131969" target=_blank mce_href="http://go.microsoft.com/fwlink/?LinkID=131969"&gt;&lt;B&gt;Download Windows PowerShell V2 CTP3&lt;/B&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt; TEXT-ALIGN: center" align=center&gt;&lt;A class=" " title="WinRM 2.0 CTP3 download" href="http://go.microsoft.com/fwlink/?LinkID=131971" target=_blank mce_href="http://go.microsoft.com/fwlink/?LinkID=131971"&gt;&lt;B&gt;Download WinRM 2.0 CTP3&lt;/B&gt;&lt;/A&gt; (required for PowerShell remoting)&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;Hemant Mahawar [MSFT]&lt;BR&gt;Program Manager&lt;BR&gt;Windows PowerShell&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;B&gt;&lt;U&gt;Submitting Feedback&lt;/U&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;Please submit your feedback using the &lt;A href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=99" target=_blank mce_href="https://connect.microsoft.com/site/sitehome.aspx?SiteID=99"&gt;Connect Website&lt;/A&gt; (adding a CTP3: to the title), posting on the &lt;A href="http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.windows.powershell" target=_blank mce_href="http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?dg=microsoft.public.windows.powershell"&gt;Windows PowerShell Discussion Group&lt;/A&gt;, or commenting on the &lt;A href="http://blogs.msdn.com/powershell" mce_href="http://blogs.msdn.com/powershell"&gt;Windows PowerShell Blog&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9248896" width="1" height="1"&gt;</description><author>MSDN Blogs                                                                                          </author><pubDate>Tue, 23 Dec 2008 00:00:00 GMT</pubDate><category>SAPscript</category></item></channel></rss>