close
The Wayback Machine - https://web.archive.org/web/20101106121440/http://tfl09.blogspot.com/

Friday, November 05, 2010

Weekend PowerShell Camp Event On The Cards

I’ve been advocating PowerShell to folks far and wide over the years – including evangelising it to my pal Jon Honey ball of PC Pro fame. His problem, like a lot of folks, is that there just is never the time to learn it – plus he knows VBS so that’s good enough, right?  Well, I think I have convinced him that that is the way dinosaurs think and that he really needs to to make the great conversion.

So he’s come up with a wizard idea: a weekend event in, where the dinosaurs and others have a fun time as they come up to speed and finally learn PowerShell. Maybe not EVERYTHING about PowerShell – that would be a pretty tall order for 2 days. But certainly gaining a good comfort factor backed up with lots of resources to help you when you get back home. In other words, a Weekend PowerShell Camp.

The way we’d work it is that I’ll run through the core aspects of PowerShell – and you follow along on your own laptop. I’ll have some exercises you can work through to demonstrate PowerShell’s key features. In preparation, you setup and configure your own laptop - you pick the virtualisation platform and load the VMs yourself. Then, you plug into the wireless and follow along with me. We’ll spend 2 long days drilling into the core of PowerShell and look at what you can do with it. And a nice meal on the Saturday. costs are likely to be around 100GPB for the weekend, including the wireless during the day, coffee/tea all day and lunch in the hotel (you can stay in the hotel overnight should you wish – but you would need to arrange that yourself).  We are planning for the 1st weekend in December at the Marriot in Huntingdon Cambridgeshire. 

As it happens, Jon announced the idea in the December of PC Pro magazine’s Real World Computing section. He has had a number of requests to come along already – with a bit of luck the weekend may already be a sell out.  But if you’ve not registered interest, get in touch with either Jon or myself and we’ll send you the fuller details.

Technorati Tags: ,,

Thursday, October 28, 2010

Choosing a Type Face–Help is at Hand

The type face or faces you use in your writing can have a profound effect on how your message is received and how people perceive you. In the long distant past, I learned how set type by hand and how to bind books – and I still love the whole process. The trays of different size fonts, the smell of the inks, being able to set physical type quickly (memorising where each letter is found in a type case) and being able to break down a page and return the different type pieces to their correct place, etc. One semester, I earned money printing all the signs that that the union put up to advertise events and did some t-shirt silk screening for event t-shirts. I even bound a course thesis – gaining an A if only for the pretty leather cover!

While much of the mechanisms of hand typography are now history, the value of specific fonts remains. If I were to post an article in Comic Sans, readers might not take it seriously. And posting my PowerShell scripts in a variable width font might make the script a lot harder to read. Using multiple fonts may seem like a good idea but end up confusing the reader. So many fonts, so many mistakes awaiting. Oddly enough type faces have been in the news a bit lately.

One of my favourite fun fonts is Comic Sans. I find it neat, elegant and informal. However today I discover that it’s the most hated font in the world.  See the BBC’s on-line article: What’s so wrong with Comic Sans?  I’m still convinced Comic Sans is not all that bad!!

Next I found an interesting albeit long article in the On-line Guardian entitled  “True to type: how we fell in love with our letters.” This is a super article by Simon Garfield that examines the history of type faces, the care often taken in their design and some of the terminology of typography. I really enjoyed reading this article despite it’s length! It definitely brought back memories of hand type setting.

Finally, the thing that sparked this blog article. Having used fonts for many years, I guess I am aware of some of the pitfalls of a bad type face choice. For the most part, I tend to stick to what I like. I love Trebuchet for the body and title of this blog for example – and have done for some years. No one’s commented on it so I guess it’s OK. But for the uninitiated, I’ve found a super graphic that helps answer the question: what typeface should I use. 

The graphic, effectively a large flow chart, is at:  http://inspirationlab.files.wordpress.com/2010/04/infographiclarge_v2.png. This graphic starts by asking what sort of project you need a type face for (Logo, Invitation, book, etc.). Then it asks you some questions (are you completely in doubt, do you want new or older faces, did you cry when you watched Terminator). Based on that information, the graphic makes some suggestions. So if you are looking to create an infographic, that’s condensed  and is without a lot of tables (oh and you did cry watching Terminator), use the OCR typeface for example. The graphic is a PNG, and you need to blow it up a bit in order to read it. But like the Guardian article, this graphic has been fun to look over!

So much like the number 11 bus – you wait for ages then three come along at once – today’s been a pleasant diversion into type faces. Now back to my day job.

Technorati Tags:

Lync Server 2010 Reaches RTM

In a post on the UCG’s Team Blob, Kirk Gregersen announces that MS have completed RTM for Lync Server 2010. General Availability is set for November 17th . The launch will be a virtual event – watch it http://www.microsoft.com/lync.  Training courses to match the two upcoming Lync MCP exams will be available sometime next spring/summer.

Lync 2010 looks to be a really excellent product. I’m teaching my first Lync course this week (Lync 2010 Ignite). We’re doing pretty much all of the product over a packed 5 days. The course is running on top of the RC version of the server using Windows 2008R2 virtual servers running inside Hyper-V. We’ve managed to make most of the key scenarios work – IM, presence some conferencing and voice. Some of the modalities are not easy due to the constraints of the classroom equipment. As I tell the delegates, if they go away thinking you need serious hardware to run Lync well, then I’ve done a good job. The labs were mostly successful. Most of the delegates got most of the labs to work – there was the odd typo and some hyper-V glitches. Not bad for a beta product. The beta programme was quite rushed so to some degree, waiting for the first set of roll-up patches will probably make sense for most customer.

Nevertheless, it’s time to start the planning process. And the training process. This is going to be a rock and roll product that finally is, not only a great IM/Presence/Conferencing product, but a creditable alternative to iron PBXs. I can’t wait to do more training in it. And for any company planning to deploy it – get some training. This is a rich complex product that provides critical enterprise infrastructure. It needs careful planning and disciplined knowledgeable support.  End-user training should be undertaken to ensure that the users can take full advantage of the richness on offer!

One thing that comes out loud and clear this week is that PowerShell is really required to administer LS2010. The new Silverlight Control Panel is nice, but there are a lot of things for which PowerShell and the over 500 Lync cmdlets are just better for, particularly when you start talking about Enterprises and full voice deployments.  I hope organisations that plan to invest on Lync will send their IT Pros on a good PowerShell class.

As it turns out, my mate Jon Honeyball and I are organising a PowerShell PowerCamp Introductory Weekend where we’re going to condense the normal 4 day master class down in to two – he announced it in the . More details on that soon – and I’ll also be pumping some new PowerShell Lync scripts onto my scripting blog. And if you want the marginally less-manic version, I’m teaching PowerShell in London in mid-December!

In summary: Lync 2010: welcome to the world! May you have a long and prosperous life!

Technorati Tags:

Friday, October 15, 2010

Administrator's Crash Course in PowerShell–EBook

Powershell superstar Don Jones has published a 4-part Crash Course in Windows PowerShell V2. Get it at: http://nexus.realtimepublishers.com/accwp.php

Technorati Tags: ,

Thursday, October 07, 2010

Microsoft Launches Course 10325–Automating Administration with Windows PowerShell 2.0

Over a year after Microsoft launched Windows PowerShell V2.0, Microsoft Learning has now launched a formal course with the above title.  This is long over due but very welcome.

From Microsoft’s announcement, this “five-day, instructor-led course offers you the knowledge and helps you develop the skills you need to automate administrative tasks using Windows PowerShell® version 2. The course describes core features and capabilities of Windows PowerShell version 2, using Windows Server® 2008 R2 as the example software environment.”

Well that’s the good news. The bad news, again from Microsoft’s formal announcement  “However, this course is not intended to provide comprehensive coverage of either Windows PowerShell version 2 features or Windows Server 2008 R2 features.

This is a good course (I was Technical Reviewer on it), and I will enjoy teaching it. Not only that, but it leaves room in the market for my own PowerShell Master Classes!

As an MCT, I am ready, able and willing to teach this class anywhere in the world. Have passport (and laptop), will travel.

Tuesday, October 05, 2010

Failover Clustering Cmdlets–Great Documentation

I just came across a really great page that documents the Failover Clustering Cmdlets in Windows Server 2008 R2. This page from Jose Barreto’s blog has a super diagram showing a model of these cmdlets. This model shows a box for each noun used by the cmdlets. Inside each box you see the the verbs that operate on the the noun, as well key attributes of a specific instance of that noun.  Thus for the Cluster noun, you see two identifiers (-ClusterName, –Properties) and the supported verbs (Get, New, Remove, Stop, Start, Test). Then you get links between the various objects showing how they relate to each other.  Then you get links between the nouns/objects. In other words - a good old fashioned data model.

For any cmdlet set, verb names are going to be constrained, e.g. get, set, new, start, stop, etc. So to learn a set of cmdlets, you need to focus on the nouns. Once you know the nouns, you will know the cmdlets (well for the most part). The diagram does a great job of showing how the the individual clustering objects (i.e. the nouns) relate to each other. What this diagram does so well is that it also shows the key objects involved in fail over clustering and how they relate since the cmdlet nouns are the key failover clustering objects.

Microsoft should document all cmdlet sets like this!

 

Sunday, October 03, 2010

PowerShell in Windows–A Nice Feature List

The TechNet folks have produced a nice list of PowerShell features offered by Microsoft. This page has a list of all the features offered plus links to information about how to get the individual features. The list looks reasonable complete – and is a good jumping off place for learning more about PowerShell in Windows.

Sunday, September 26, 2010

Lync Server 2010 and Virtualisation

With the Lync Server 2010 RC available, the details of what it will take to run Lync in production are emerging. One really nice change from OCS 2007 is that Lync is now fully supported when virtualised. With OCS 2007, only some roles were supported, although anecdotal evidence suggested OCS would work OK virtualised – the issue was more with the client.

This means that all major workloads, including presence, IM, conferencing and Enterprise Voice can be run in a virtual environment. This includes Standard and Enterprise editions. There are some restrictions on virtualisation platforms though, only VMware and Hyper-V are supported. For both virtualisation platforms, only Serve 2008 R2 is supported. And for Hyper-V, you must also run the host as Server 2008 R2.  Microsoft will support virtualisations using SE to support up to around 2000 users and Enterprise Edition pools supporting up to 40k users. Edge servers can also be virtualised.

For Hype-V at least, the hosting requirements will significant: 8 Core 2.27Ghz processors with 16GB+ of ram and fast disks (particularly for your back end SQL servers). With virtualisation, your overall consolidation ratio is around 3:1 A suitably speced out host machine will support around 4 Front End servers, or 4 A/V Conferencing Servers for a user base of up to 40k users. For full functionality, you’d also want at least Directors (2 Director roles can be co-located on a single Hyper-V host) and two Edge servers (also co-located on a single VM host). You can also co-locate your Monitoring and Archiving server roles.

You can also virtualise your SQL Server back end database, but in a large Enterprise environment, you may just want to keep your back end cluster as a pair of real servers. You can of course, co-locate two SQL Server VMs on a single host to serve as your fail over back end cluster. Although this only provides resilience in the case the guest OS or applications go down!

The total level of consolidation in such a scenairo would be from around 19 servers, down to around 6 or 7 large hosts machines. You’d then need to consider your Mediation Server requirements! To some degree, the number of mediation servers required will be based on your requirements (how many PSTN ingress/egress locations do you have and what sort of gateways are  you using). With Lync 2010’s Media Bypass facilities (and suitable PSTN gateways!) you could co-locate up to around 4 Mediation Servers on a single host. My guess, although I do not have the means to test it) is that you could probably support more Mediation Servers on a given host, depending on the Gateway architecture

Thursday, September 16, 2010

Windows PowerShell Cookbook–2nd Edition

Lee Holme’s latest book, Windows PowerShell Cookbook (2nd Edition) has finally made it to the UK. I ordered this book as soon as O’Reilly mailed me to say it has been released. I arrived home last week and I’ve been eagerly poring over it with some enthusiasm.

This second edition is a significantly expanded work, now around 850 pages in print. There are hundreds of examples of how to use a specific aspect of PowerShell along with commentary explaining what’s going on. If you know PowerShell fairly well, there are always those nooks and crannies you’ve not explored thoroughly . I started playing today with p/invoke to get access to Win32APIs, for example, which was something I’ve been meaning to do for a while, and I also discovered a cool switch on the Add-Type cmdlet that solves a problem I’ve been having for while!

The full set of sample scripts is also available - http://examples.oreilly.com/9780596801519/PowerShellCookbookModule.zip.

If you go to the O’Reiley catalogue page, you can order the book along with an E-book. I have the e-book on my phone for viewing and consuming when I’m on the move (a great way to spend a 2-hour flight – reading more about Powershell).

In summary: buy this book.

Tuesday, September 14, 2010

Microsoft Lync 2010/Microsoft Lync Server 2010 - Resources

Here are the resources I’ve found so far. I am updating this regularly as I find more stuff!

Last Update: 13:15 18September 2010

 

Background Information

Here is some background information on Lync Server 2010 and Lync 2010:

Lync Software Components

Microsoft has released some product bits of the product as separate downloads:

Microsoft Blogs

Non MS Blog Posts

Podcasts

Planning Tools

Product Documentation

Microsoft has released several white papers on the http://technet.microsoft.com/en-us/lync/default.aspx site, including:

  • Determining Your Infrastructure Requirements for Lync Server 2010 (RC).doc - Download
  • Planning for Archiving Lync Server 2010 (RC).doc - Download
  • Planning for Clients and Devices Lync Server 2010 (RC).doc - Download
  • Planning for Enterprise Voice Lync Server 2010 (RC).doc - Download
  • Planning for External User Access Lync Server 2010 (RC).doc - Download
  • Planning for IM and Conferencing Lync Server 2010 (RC).doc - Download
  • Planning for Other Features Lync Server 2010 (RC).doc - Download
  • Planning for Your Organization Lync Server 2010 (RC).doc - Download

Pricing and Licensing

Lync Server 2010 follows a Server/Client Access License (CAL) model whereby a Lync Server 2010 license is required for each operating system environment running Lync Server 2010 and a CAL is required for each user or device accessing the Lync Server.

  • Pricing for Lync Server and Client – this page sets out the details of licensing for Lync Server and client.  Pricing on the page is ‘estimated’ – in other words see your reseller as prices will vary from the 'official’ costs shown here.

Support

At present, there’s no formal support for Lync 2010.  At present, the two places where you can find more information are Microsoft’s OCS 2007 Forums:

Webcasts – CS14 at TechEd

Microsoft presented CS14 topics at TechEd North America earlier in 2010. The presentations and slide decks are all available for download and use. These presentations talk about CS’14’ – but aside from the branding, the details are the same!

Press and Release PR Coverage

As often happens, much the industry found out about Lync Server’s public debut from non-Microsoft sources, quickly followed by the MS presentation. Here is some of the press background if you are interested.

Email me any changes or updates and I’ll try to keep this list up to date!

[UPDATES TO ORIGINAL POSTING]

  • 15 Sept 2010 - Added CS4 web casts, Added Podcast section and did some minor re-org of the list itself. Also added update list
  • 17 Sept 2010 – Separated out the Press/PR stuff from basic tech info. Added Lab deployment guide reference.
  • 18 Sept 2010 – fixed missing link to Thomas/Cezar's podcast, added Worked Deployment Guide from Jeff Schertz.
  • 4 Oct 2010 – added details on licensing and links to planning documentation.

 

Technorati Tags: ,,

Monday, September 13, 2010

PowerShell Master Classes

I’ve been teaching my PowerShell Master Classes both in Europe and in the US over the past 6 months. After two classes in Stockholm, I taught in the US (teaching Microsoft’s Hotmail Engineering team), and in Copenhagen – plus a one-day session for a client in the City of London. 

There are now two classes – both three days. The PowerShell Basics class covers the basics of PowerShell both from the command line and as a scripting tool. The PowerShell Advanced class looks at more advanced features of PowerShell, particularly its use in the OS, as well as key applications including SQL Server, Exchange 2010, SQL and IIS.

The next runs of the PowerShell Master Classes are:

I’ll post more details on the agenda for these classes shortly. I am also working on a Weekend 2-day Script Camp – watch this space for more details once we have them finalised.

Microsoft Ships RC of Lync (renamed from Communications Server)

Thanks to May Jo Foley’s piece in ZDNet, I see Microsoft has just shipped a release candidate for Lync Server 2010. Lync, formerly known as Communications Server ‘14’ is the successor to Office Communications Server. The name, said to connect link and sync, is important in that it simplifies the branding with much shorter names for the constituent components.

Lync combines presence, instant messaging, conferencing and telephony – allowing you to simplify communications and in due course reduce the costs of running your legacy phone system.  Presence enables your users to know what each other is doing thus simplifying communications. If I want to chat to someone, and I see they are in a meeting, I know the call would be wasted. Combined with presence, IM enables fast peer to peer and sometimes peer to multiple peer communication. Lync 2010’s voice capabilities should enable many companies to adopt the product as their main PBX.

At the time of writing, Microsoft has put up the RC for download here: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=29366ba5-498f-4d21-bc3e-0b4e8ba58fb1&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+MicrosoftDownloadCenter+%28Microsoft+Download+Center%29#tm (don’t you love the snappy urls?). This page also has links to more Lync Server 2010 information, but these links do not yet exist. No doubt these will get put up shortly.

The download is just over 1.5GB and contains both the Standard and Enterprise Editions of Lync 2010. In keeping with recent platform changes, this RC (and the final product in due course) ships as 64-bit only which means you need to be running a 64-bit OS (and here I recommend running Server 2008 R2!).

Over the coming weeks, I’ll blog more about the functions and features of this cool product. Not least of which is the PowerShell interface.

Saturday, September 04, 2010

Calling Functions in PowerShell

I spent quite a bit of time earlier this week with a problem in calling worker functions. In a PowerShell script, or a PowerShell session, if there are a set of commands you run more than once or twice, one thing you can do is to put them into function then just call the function rather than typing out all the individual commands. Worker functions can make scripts a lot shorter. You can see an example of a worker function over here: http://pshscripts.blogspot.com/2010/09/get-umalquracalendarps1.html. In that example, you can see a worker function, DisplayValues (begins at line 45), which I then call several times in the script.

The problem I had this week was that for some reason, the worker function was spewing out nothing like what I was expecting. I started at the code for some time before spotting the problem – I’d not use the right calling process to invoke the function. A typical newbie mistake.

In .Net method calls, you state the name of the object, a “.” followed by the method name, and a parameter list enclosed in parentheses:  $object.method($a, $b, $c).  But a function is called without the parentheses, and the  parameters are space, not comma delimited, or function $a $b $c.

To illustrate this problem, I’ve written a little script that defines a worker function then calls it several ways:

function wf1 {
param (    $a, $b, $c)
"`$a:" ; $a; ""
"`$b:" ; $b; ""
"`$c:" ; $c; ""
}

wf1("Foo",'Bar',"foobar")
wf1  "Foo",'Bar',"foobar"
wf1  "Foo" 'Bar' "foobar"
wf1 –c “foobar” –a “Foo” –b “Bar:

The output from this is left as an exercise for the reader!

Now the first two times the script calls the worker function, PowerShell assigns the array (i.e the stuff delimited by commas) to the first parameter, leaving the second two parameters empty. Not what you want. The second two examples call the worker function correctly. Arguably the last of the calling sequence is better from a production orientated point of view.

On interesting thing – all four of those calling sequences ‘works’ and by default presents no apparent errors. However, if you set strict mode (Set-Strictmode) and setting version to 2 would warn that the first call was in error like this:

PSH [C:\foo]: . 'C:\Users\tfl\AppData\Local\Temp\Untitled5.ps1'
The function or command was called as if it were a method. Parameters should be separated by spaces. For information about parameters, see the about_Parameters Help topic.
At C:\Users\tfl\AppData\Local\Temp\Untitled5.ps1:8 char:4
+ wf1 <<<< ("Foo",'Bar',"foobar")
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : StrictModeFunctionCallWithParens

Now had I had the relevant line set in my profile, I’d not have wasted an hour wondering why things were not working.

Thursday, September 02, 2010

Paper.Li – Organising Twitter Information

Although Newspapers of the physically printed variety are dying all around us, the metaphor that is a newspaper fails to die. I’ve been playing a bit today with Paper.Li – one of those hundreds of sites that leverage Twitter and add value to your Twitter stream. I’ve created my own 'newspaper’ - http://paper.li/doctordns. This page is updated once every 24 hours and features links that Paper.Li has gleaned from my twitter feed.  It’s nicely laid out and features my own tweets, plus tabs I follow. In my case, the paper also includes tweets with the hash-tag #PowerShell. I’m kind of surprised I don’t see more Grateful Dead links, but we’ll see.

The papers that you can create with Paper.Li are one of three broad types: You and your tweet stream, hash tag, @people. The first is the model I noted above – Paper.Li parses your tweet feed/stream (tweets you get from those you follow and those you make) and makes a paper. The second makes the newspaper from tweets containing a particular hash tag. For example, the PowerShell hash tag is #PowerShell, and there’s a related newspaper  http://paper.li/tag/PowerShell.  The @people paper is based on a list of folks you create on Twitter. http://paper.li/jkavanagh58/powershell, for example, is a paper based on @jkavanagh58’s PowerShell twitter list.

 

 

Technorati Tags: ,

Wednesday, August 04, 2010

PSHSCripts.Blogspot.Com – 2 years On!

Just over 2 years ago, I created a new blog, The PowerShell Scripts blog over at http://pshscripts.blogspot.com. The idea was simple – a blog with single function PowerShell scripts. Scripts that demonstrated one (or at least a very small number) of things to do with PowerShell. I had in mind that since the blog was hosted by Google, they’d do a good job of indexing it, and providing links to it. Which is exactly what happened.

In the two years, I’ve had over 65,000 visitors to the blog. At present, I’m getting around 170 hits per day and just under 300 page hits per day on average over a week. However, this is very much a week day blog with Monday-Friday tending to be closer to 200+ hits/day during the week.

But the interesting, and gratifying, thing is the percentage of hits coming from the key search engines (Google and more recently Bing) and the search terms they are using. I’ve used a free traffic counter from sitemeter to measure the traffic, but I only see the last 1000 visitors and had not added a more permanent tracking system – but I’ve recently added Google Analytics the site. So far, the results from both sites show the same tends.

Looking at the Analytic's output for the past month. around 70% of all the traffic to the blog comes from Google and Bing with a bit more from PowerShell.com, TechNet and this blog. There are a few other search engines that send traffic, but Google and Bing are dominant.  Also, around 13% of the traffic comes from direct hits on http://pshscripts.blogspot.com

Looking at the search terms used is also interesting. PowerShell Scripts (and PowerShell script) make up 18% or all hits. Below those two, there’s a very long tail of relatively low numbers of hits over the past month. There were just around 1000 separate search terms used – and all but a handful more than once or twice. That shows that the narrow focus of each post has proven useful – you can search with a fairly narrow term, such as “PowerShell ipaddress wmi” or “powershell send udp” and see the blog at the top or near the top of the 1st page.

There were two discoveries that were curious. First, looking at the referring sites, I noticed one site had a relatively high number of pages per visit and a long time too on average time on site. The bounce rate for this traffic was also very very low. It turns out that an IT professor in Viet Nam has put a link to my blog and all the slides from the upcoming PowerShell V2 class. Not sure about the legality of putting the slides up – but see for yourself at http://hoanguyen40.ecoles.officelive.com/OSScripting.aspx.

The other amusing thing I found is that, when looking at the networks that send you traffic (think ISP). The top network listed was Microsoft!

All in all, a good first two years for this blog – getting several hundred hits a day is more than I expected.

Tuesday, August 03, 2010

Using Later Versions of the .NET Framework Remotely

I’ve posted a couple of articles recently regarding using later versions of the .NET Framework. Through the magic of .NET, you can just create a simple .CONFIG file to tell the relevant executable to use a later version of the framework by default. A .CONFIG file is just a very simple bit of XML as I demonstrated here, where I show how to create the XML and save it as PowerShell.Exe.CONFIG. This worked fine to enable the PowerShell console to use later versions of the framework. And I showed some of those results in a separate post here.

To enable this work work with PowerShell Plus, I just went and found the executable for PowerShell Plus, created the relevant .CONFIG file (PowerShellPlus.Exe.CONFIG). Now PowerShell Plus brings up .NET 4 too! Yeah! Or so I thought.

After posting these articles I saw on Twitter that @qa_warrior was having trouble doing this remotely. The upshot of his problem was that even though he’d configured PowerShell to use .NET 4.0 on both client and server, when he remoted, his remote session was based on 2.0. It turns out that this too was simple to fix – if you understand how PowerShell remoting is implemented on the remote host

.

When you create a new PSSession with a remote server, what you are doing is instantiating a PowerShell runspace and sending it commands to execute (and returning the results, albeit serialised). In order for the remote machine to create (and later use) the runspace, Windows needs to house that runspace inside a process. Powershell 2.0 creates that runspace inside an executable wsmprovhost.exe.  You can see this in action here:

SNAGHTML57421abb

In this screenshot, I created two remote sessions (admittedly to my self – but ‘remote’ nonetheless). You can see the two occurrences of wsmprovhost.exe and the two remote sessions. After removing these remote session, you can see that there are no occurrences of either wsmprovhost or the remote sessions. Then after you create a new PSSession, you can see the new session and the new occurrence of wsmprovhost.

Technorati Tags: ,

Monday, August 02, 2010

More on Using Different Versions of the .NET Framework

In yesterday’s blog post, I wrote about being able to use later versions of the .NET Framework with PowerShell. The trick was simple: create a config file, a small file of XML, to enable the use of, in my case, the .NET Framework Version 4 and the new namespace System.Numerics. That XML file tells PowerShell what version of the .NET Framework to load. You can see this if you display $psversiontable variable. By default, you’ll see something like this:

PSH [C:\foo]: $PSVersionTable

Name                           Value
----                           -----
CLRVersion                     2.0.50727.4200
BuildVersion                   6.0.6002.18111
PSVersion                      2.0
WSManStackVersion              2.0
PSCompatibleVersions           {1.0, 2.0}
SerializationVersion           1.1.0.1
PSRemotingProtocolVersion      2.1

But with the .Config file in place, you’d now see this:

PSH [C:\foo]: $PSVersionTable

Name                           Value
----                           -----
PSVersion                      2.0
PSCompatibleVersions           {1.0, 2.0}
BuildVersion                   6.0.6002.18111
PSRemotingProtocolVersion      2.1
WSManStackVersion              2.0
CLRVersion                     4.0.30319.1
SerializationVersion           1.1.0.1

Another key difference is that when you now load additional .NET namespaces using LoadWithPartialName, you will get later version of the dll (the exact version number loaded depends on what you put into the config file. So loading Windows Forms now looks like this:

 

PSH [C:\foo]: [system.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

GAC    Version        Location
---    -------        --------
True   v4.0.30319    C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c…

By default, you got this:

PSH [C:\foo]: [system.Reflection.Assembly]::LoadWithPartialName("system.windows.forms")

GAC    Version        Location
---    -------        --------
True   v2.0.50727     C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c…

It’s pretty easy to use later versions of the .NET Framework. These later versions provide new classes you may find useful.

PSH [C:\foo]: [system.Reflection.Assembly]::LoadWithPartialName("system.windows.forms")

GAC    Version        Location
---    -------        --------
True   v2.0.50727     C:\Windows\assembly\GAC_MSIL\System.Windows.Forms\2.0.0.0__b77a5c561934e089\System.Windows.Forms.dll

But beware of doing this in a data centre without testing that your existing scripts are fully compatible with the later versions of the Framework. You shouldn’t have any problems as MS is pretty good about forward compatibility, but it never hurts to be careful.  Just ensure you do thorough testing before rolling this out across the board.

Technorati Tags: ,

Sunday, August 01, 2010

Using Newer Version(s) of .NET with PowerShell

I’ve been playing around a bit with the latest version of the .NET Framework. There are some pretty cool new classes and namespaces but one that caught my eye was System.Numerics. This namespace has two neat classes: System.Numerics.BigInteger and Sytem.Numerics.Complex – these represent big integers and complex numbers respectively. To demonstrate the BigIngteger class, I’ve written two small scripts: New-BigInteger.ps1 and Get-BigIntegerProperties.ps1 (with more to come!). You can get these and several hundred more PowerShell scripts from my Powershell Scripts blog. When I first started to develop these scripts, starting first to translate an MSDN sample from C# into  PowerShell, I came across some curious errors. In the end learned how to call updated versions of the .NET Framework.

By default, PowerShell uses .NET version 2.0. But if you want to use classes implemented in later versions of the Framework (in namespaces that are not loaded by default of course), you first need to load the relevant dll. You can do this as follows:

Add-Type -Path "C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Numerics.dll"

But there’s only one problem (by default!) – when you do this you get the following run time error:

Add-Type : Could not load file or assembly 'file:///C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Numerics.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded.
At line:1 char:9
+ Add-Type <<<<  -Path "C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Numerics.dll"
    + CategoryInfo          : NotSpecified: (:) [Add-Type], BadImageFormatException
    + FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.AddTypeCommand

The solution is pretty simple – just tell PowerShell to use a later version of the CLR. To do this, you need to create a config file, named PowerShell.Exe.Config, located in the same folder as PowerShell.Exe (and another one for PowerShellISE.Exe, or PowerShellISE.Exe.Config). These config files contain a small bit of XML to tell the system which version of the CLR to use. To access the .NET 4.0 versions, use the following:

<?xml version="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0.30319"/>
        <supportedRuntime version="v2.0.50727"/>
    </startup>
</configuration>

With this XML created, just restart PowerShell and you can add the System.Numerics.Dll and use the classes in that namespace!

Tuesday, July 13, 2010

A Quiet Word to the Chinese Comment Spammer

Hi.  Thanks for all your comments, especially all those that contain URLs to adult sites. I appreciate how you follow up nearly every post to this blog with more comment spam. You will notice that none of the comments actually get published – that’s because I review every comment and am rejecting yours. I will continue to reject spam like this, so you might consider not wasting your, and my, time with comments that will never get published (not now and not ever).

[later]

Almost as predicted, you (婉婷) did indeed try to leave a spam comment message. :-( 

Monday, July 12, 2010

PowerShell Needs a New Approved Verb

I’ve been playing around a bit with the System.Speech namespace, in particular the System.Speech.Synthesis.SpeechSynthesizer class. This class allows you go get the Speech Synthesis engine speak for you. On my workstation, I have just one voice, called Anna. If you look over on my PSHScripts blog, there’s a script to get all of the voices installed on your system.

As you can see from the script, the class is pretty simple, although it’s one that PowerShell loads by default. Once you create a SpeechSynthesizer object, you can then get the installed voices as the script shows. As you can see, on my system, there’s only one loaded voice (Anna).  The Speech Synthesizer has another useful class – Speak (well two, the second being SpeakAsync). These methods enable the SpeechSynthesizer object to speak some text.

I’ve written a couple of scripts that will demonstrate these APIs, and I’ll publish these shortly. But in doing so, I realised that the PowerShell Approved Verb list needs a new verb: Speak, which mirrors the Speak method. If you look closely at the approved verb list, there’s no verbs relating to a voice modality, which with the benefit of hindsight, is unfortunate. For Version 3, I think a new verb is needed, which could be Speak (my favourite) or perhaps Say.

 

Friday, July 02, 2010

PowerShell and XML Element Attributes

I’ve been playing a bit this week with XML and PowerShell. As you no doubt know, PowerShell has first class XML support built in. To see more about that, see Tobias’s Ebook Chapter on XML and PowerShell. My task this week was to work with attributes that can appear inside an XML tag. I was using the .NET XML class System.XML.XMLElement and it’s various attribute related method.

As noted in MSDN, are a node in a DOM (XML) document. These elements can have attributes which you can associate with the element. For example, consider the following XML element:

<book genre='novel' ISBN='1-861001-57-5'>
<title>Pride And Prejudice</title>
</book>"

Such an element would normally be part of a much larger collection (et <books></books>), but for the purposes of playiing with element attributews, you can load it and then treated as an XML document with elements (albeit not many). You can load this document like this (and yes, there are a  bunch more ways!)

$Doc = New-Object System.Xml.XmlDocument 
$Doc.LoadXml("<book genre='novel' ISBN='1-861001-57-5'>" + 
             "   <title>Pride And Prejudice</title>" + 
             "</book>"

In the XML document, the book element has two attributes, genre and ISBN. Each attribute has the simple format (in the XML) of <attribute name>=<attributevalue>.

Once you load the document, you can do things like:

  • Check whether an element has a particular named attribute
  • Get the value of an attribute
  • Remove an attribute
  • Set and attribute

To do this in Powershell you would do something like this, eg to set an attribute:

$Root = $Doc.DocumentELement
$Root.SetAttribute("attributename","value")

In richer XML scripts the attributename and the value would be held in a variable (that you in turn might have obtained from another XML document).

I’ve written several sample scripts over on the PowerShell scripts blog, which re-implement a number of MSDN attribute handling C# samples:

  • Get-XMLAttribute.ps1 – this script loads the XML then checks to see if the element has an attribute and if so, the code prints out the value of the attribute.
  • Remove-XMLAttribute and Remove-XMLAttributeAt.ps1 – these scripts load the XML and then remove the attribute, but using different .NET methods (i.e. RemoveAttribute and RemoveAttributeAt). Using the Remove AttributeAt, where you specify the position of the attribute, and not the name, is potentially dangerous. I have the t-shirt on that one! 
  • Set-XMLAttribute.ps1 – this script as the name might imply, loads the XML and adds an attribute to the element.

Fun stuff!

Technorati Tags: ,,,

Wednesday, June 30, 2010

They Called Their Web Site WHAT????

Those nice folks at Angel Internet Press sent me a copy of  new book: Slurls – They Called Their Website WHAT?!” which has been keeping me amused. A slurl is made up term – joining ‘slur’ and ‘url’. A slurl is a web site URL that can be read in ways other than what the owner probably intended. Slurls come about when someone creates a website name based on their company, but where the words can be read in a much more amusing, and often embarrasing, way! Some of the more amusing slurls are:

The book lists a number more slurls – most of them quite amusing. I still can’t quite work out just how someone really did create all these web sites and didn’t notice the potential gaff! The author’s website, www.slurls.com shows the SLUR of the day (today, it’s google.co.ck which still has me chuckling) and has  discussion forums where you can suggest a SLURL and learn of those that have ceased to be. The web site also has screen shots of the site to show it’s not just a made up url, for example this page pointing to an MP3 site: www.mp3shits.com (MP3’s Hits).

A light read, but highly amusing!

Network Monitor V3.4 Ships

Microsoft has just shipped a new version of Network Monitor, one of my favourite network tools. The new version has a slew of new features. MS has reworked the capturing engine to capture on faster networks without losing frames.  The parser logic has been updated giving you the ability to do deeper/slower parsing or shallower/faster parsing, a great feature for fast networks where shallower parsing is acceptable. The UI is also more customisable, something no doubt of value to those who use tools like every day. For a fuller list of features in the new version – see the beta blog announcement here.

Microsoft also provides ongoing information via the Network Monitor blog: here. Additionally, there’s a support forum on the  Network Monitor forum. The forums enable you to ask questions about the UI, NMCap, API, parsers and troubleshooting scenarios (and even get answers!).

Sunday, June 20, 2010

PowerShell Plus 3.5 Beta

I use PowerShell Plus pretty much all the time for the development of PowerShell scripts. I have it on both my desktop workstation and my laptop, and I regularly demonstrate it in my classroom teaching. Those nice folks at Idera have just released the beta of the next Version, V3.5, of this cool tool which is a free download (although the final product will be commercial and is not free).

The beta shows off the new features in V3.5:

  • Remoting Support
  • Improved Script Sharing
  • Enhancements to the code editor
  • Enhancements to the Learning Center.

I have a long boring weekend ahead stuck in a hotel – I will be playing!

Technorati Tags: ,

Saturday, June 19, 2010

Another Free PowerShell Book

I see the Swiss MS IT Pro Team (i.e. Frank Koch) are at it again, this time with another Free PowerShell Book. The latest book is entitled Administrative Tasks Using Windows PowerShell. And it’s now available in English (along with a copy of the first e-book, Windows PowerShell. Both are great introductions to PowerShell!
You can get the English versions of both books here. This is a large-ish ZIP file with both PDF and XPS versions of the book, along with a set of sample scripts. For the German speakers, or at least those who can read German, you can get the original versions here.

Later
I read this second document on the plane to the US, and as the comment below says, this turns out to not be such a new book - but is mainly V1 based. There are aslso a number of errors in translation.

Friday, June 18, 2010

PowerShell Script Provider

Just when you think we’ve seen all that the (awesome) PowerShell community can do, along comes another cool development. The latest coolness comes from Oisin Grehan in the form of a PowerShell Script provider. This is a tool, which you can download from Codeplex, that enables you to write a provider purely in script without the need to do stuff in C#. This is pretty cool!.

The project is at version 0.1, with at least 4 more versions planned. As it says on Codeplex, this code is alpha – but knowing Oisin those versions will come quickly. 

Thursday, June 17, 2010

Signing PowerShell Scripts – A Gotcha with ISE!

In some enterprise environments, signing PowerShell scripts and setting an execution policy to only run signed scripts is a useful control mechanism. It can avoid less skilled admins ‘fixing’ a script almost correctly and can avoid untested scripts from running. Of course, the malign admin can still cut/paste the scripts into the command line and do damage – but that same admin can nuke the registry, reformat a volume, etc. Script signing is just another layer of defence.

The Scripting Guys Team (well actually superstar MVP Ragnar Harper) has written a two part blog post on the subject of how to do script signing. Part 1 is a useful tutorial on how to setup your own PKI using Windows Server’s built in Certificate Service feature (AD CS as MSFT call it). With Part 1, you learn how to get your code signing digital certificate.  Part 2 then talks you through how to use that certificate to generate a signed script.

The demo is good and the instructions work well, however there is one small gotcha. If you use PowerShell ISE to edit and save your scripts, the technique shown in Part 2 will fail. Here’s what you will see (from the ISE).

image

As you can see, this results in a rather less than helpful “UnknownError”. Turns out the reason is simple: By default, ISE saves scripts in Unicode BigEndian format – which Set-Authenticode does not cater for. And worse, the ISE Save-As dialog does not give you any option to save in a more friendly encoding (ie ASCII!).

There are three solutions to this:

1. Use Notepad to re-save the file as ASCII, then sign it. This is suboptimal but it works.

2.  You can get ISE to save as Unicode (not BigEndian) using a small script, unfortunately not from the menus. Just run the following bit of code:

$psise.CurrentFile.Save([system.Text.Encoding]::Unicode)

3: You can get ISE to save as always as ANSI. As t add the following bit of code to your PowerShell ISE:

register-objectevent $psise.CurrentPowerShellTab.Files collectionchanged -action {
    # iterate ISEFile objects
    $event.sender | % {
        # set private field which holds default encoding to ASCII
        $_.gettype().getfield("encoding","nonpublic,instance").setvalue($_, [text.encoding]::ascii)
     }
}

Once this fragment is executed, probably by adding it to your Profile, scripts get saved as ANSI and can be signed just fine.

Note in the above, you can both save the current file as ASCII or auto-save as Unicode. Set-AuthenticodeSignature works with both encodings, just not the ISE normal default of Unicode BigEndian (just change ::ASCII to ::UNICODE or vice versa!). Personally, I now save as ASCII. But if you have non-ANSI characters in your scripts, set the default as Unicode!

And a tip of the hat to Oisin Grehan who posted about this on the MVP list and who has posted some of the above code on his blog here.

 

Thursday, June 10, 2010

Communications Server ‘14’ Powershell Blog Up And Running

The Communications Server ‘14’ team have put up a CS and Powershell blog. You can read it at http://blogs.technet.com/b/csps/. It’s early days, as CS14 was finally revealed to the world (with no NDA!) here in New Orelans TechEd North America. Speaking to the PowerShell PM, the intention is for the blog to be a one-stop shop for all CS14 and PowerShell. I look forward to seeing how this evolves!

Friday, June 04, 2010

Training and the Cloud

I’ve been having some discussions with a client about the impact of cloud computing on the IT training business, particularly IT Professional training. If you believe the hype, cloud computing will take all the problems of running your IT suite and make it a thing of the past. Thus, you don’t need any more IT Pros and therefore no training. Of course it’s nowhere as simple as that! I’ve been reading an interesting blog piece by Alan Le Marquand titled From Servers to Services: the Role for the IT Pro in the Cloud. It’s provided some good input into the training question.

Alan first makes the point that 'the cloud’ is actually many things. Cloud computing has evolved in to distinct layers, each with their own approaches and IT Pro needs. Le Marquand breaks “the cloud” down into three main layers:

  • Software as a Service (SaaS)– here you buy the software hosted by a supplier. For example, an organisation can use one of many hosted Exchange solutions for email. For this layer, the hardware, OS layers and application peices are for the most part gone. so IT Pros no longer need to worry about them. Of course, at the application layer, there is still a need to perform management and provisioning functions such as adding or removing email accounts as employees come and go. And since you are paying for the application, you need to monitor your SLA, possibly differently than today as well as manage your supplier.
  • Platform as a Service (PaaS)– here the hardware and OS are provided by a supplier but you provide the application – Microsoft’s Azure is an example of this cloud layer. With PaaS, the OS and hardware are primarily managed by the supplier , but you manage the application that sits on top.This layer still requires IT Pros to handle all the application management functions plus the ability to manage the platform in the cloud. 
  • Infrastructure as a Service (IaaS) – here you just get the hardware provided by the supplier and you deal with the OS, application and everything above. To some degree, this is really not much different than from today in terms of the skills that IT Pros need – the key difference being where you put the hardware and how you scale it out (or not!). IT pros still need to know how to deploy the OS and the applications and manage them. Only the scale is different – you still need to patch, troubleshoot etc.

The role that the IT Professional plays in each of these layers differs, in some cases significantly, from today.  And of course, this means training needs differ too. All three layers require you to consider end-user/administration training in how to use and get the most out of the applications. PaaS and IaaS also require you to know how to develop and deploy your application solution. And finally, IaaS requires you to have broadly the same deployment skills as today since most IT Pros start their tasks once the hardware is in place.

The key first step all organisations considering the cloud need  to take is to get a good understanding of how to buy as well as deploy and manage cloud services. Organisations are being led to believe by the suppliers that the Cloud is the answer. That may be the case ultimately, but not all suppliers are equal and not all offerings are the same. So companies need to understand how to go about buying the services and then how to deploy them. For IT Pros, that deployment may be a challenge as there are new issues to consider. Deploying application to hundreds or thousands servers require you to have new automation skills than you might have needed if you just use the GUI to manage one server.

The suppliers of particularly PaaS and IaaS also need to deliver or facilitate training in their offerings. While SQL on Azure may be almost like SQL on your own server, there are differences. Also, deploying and managing larger numbers of servers will require new approaches to the tasks.

For organisations that are considering cloud computing, I’d recommend spending some time to think through just which cloud layers you are considering and the impact those have on your IT staffing. Then you should start to do some training needs analysis. The cloud offers organisations of all sizes some advantages and as Alan poitns out, IT Pros, and hence the training, will certainly adapt to fit the cloud model. But there is still some thinking and planning to be done before leaping off in to cloud-land!

Technorati Tags: ,

SQLIse – A PowerShell SQL Server Query Tool

I am doing some work at the moment building SQL PowerShell training for an upcoming PowerShell MasterClass. In my searching, I came across a small project being done by Chad Miller, called SQLIse. As Chad describes in his blog, SQLISE is an ISE add-on that provides  “a basic IDE for T-SQL that includes the ability to exit, execute, parse and format SQL code from within PowerShell ISE”.

SQLISE is a part of a larger SQL PowerShell project called SQL Extensions for PowerShell or SQLPSX. Having played a bit with both extensions, they are pretty cool and can certainly help IT Pros who have to deal with SQL. Chad has even created a short video to demostrate SQLISE – get this at YouTube: http://www.youtube.com/v/1KcNSHn7oTA&hl=en.

SQLISE has two pre-requisites. First, you need to have the PowerShell Pack installed and you need the SQLPX extensions loaded. You can get PowerShellPack from the MSDN Code Gallery.

One issue I faced was that the SQLIse installation process was not seamless or easy.  In order to get this running, I needed two uber-modules (SQLPSX and PowerShellPack) and these come from different places. Second, the installation process requires you to run programs, SQLPSX_Install and PowerShellPack.MSI.

I find this somewhat contrary to the spirit of Modules in PowerShell V2 in that modules should be deployable using only Xcopy. In my case, I did not want either uber-module to be loaded in the personal modules folder, but in the system modules folder. But the installer(s) gave me no option. More importantly, while the SQLPSX installation program seemed to run, but left the module folder empty. A bit of hacking (and running streams.exe across the expanded file set!)  enabled me to get the module installed. But sadly the hacking did not work well – and some of the features do  not work. More hacking I suspect is needed.

In summary, a great feature let down by the complex installation process.

BERJAYA