Design of Script Friendly APIs, lessons from $psISE

Cmdlets are high level, task-oriented abstractions.  The implementation of cmdlets can talk to anything:  Web services, COM objects, WMI objects, .NET objects – anything.   Depending upon how developers design their API, they can make it easier or harder to write cmdlets.  Now that you can write cmdlets in PowerShell itself, here are some tips for… Read more

Why Should I Test With PowerShell?

Today, on our internal discussion list, someone asked if there were any advantages to testing with PowerShell versus testing with C#. I was able to come up with 10 quick reasons to test with PowerShell: Being able to run command line programs easier within PowerShell Dynamically generating code or test data for a test case… Read more

The Semantic Gap

There are 2 worlds: The world as we think about it. The world as we can manipulate it. The difference between these two is what is called the semantic gap.  Our industry has been struggling with the semantic gap for decades.  An excellent example of the semantic gap is provided by the TechProsaic blog entry: … Read more

Cmdlets vs. APIs

Some people have asked the question, “Why Cmdlets?”. If you already have a reasonable API, what is the value in writing Cmdlets? I’ll provide a quick answer here but we should probably include a good write up of this in our documentation. The most important thing to realize about cmdlets is that it is all… Read more

Using a DSL to generate XML in PowerShell

A while back, Jeffrey posted an article on how to use string expansion and XML casts to build XML documents in-line in a PowerShell script: The overall feel of the approach that Jeffrey described is very much like that of ASP, JSP, PHP on any of the other systems that use “holes” to embed… Read more

Editing your Profile file

$hay has a new scripting blog at .  His first blog entry Restart your engine – The PowerShell Way, talks about how he frequently edits his PowerShell profile file and then restarts his session.  In his directions he says: 2: type: Notepad $profile to open your profile file I looked at this and thought about… Read more

Encoding Operations Knowledge

One of the primary goals of Windows PowerShell is to encode operations knowledge.   Consider the example of finding out what domain role a computer plays.  If you look at the WMI class WIN32_COMPUTERSYSTEM, you’ll see that it tells you this information:   PS> Get-WMiObject Win32_computerSystem |fl dom*Domain      :  : 1 So there you have it, my… Read more

BaseName for FileInfo objects

<Edited to add categories>In our active, responsive, and useful newsgroup Microsoft.Public.Windows.PowerShell (SELL SELL SELL 🙂 ),  MVP Alex Angelopoulos recented posted the following: Although file extension changing is a common technique in administrative tasks, the System.IO.FileInfo class does not provide a direct Basename property and neither does PowerShell.This is useful enough that I believe it should… Read more

Flexible pipelining with ScriptBlock Parameters

PSMDTAG:FAQ: How can I pipeline data to a parameter which does not accept pipeline input?PSMDTAG:FAQ: What are ScriptBlock Parameters? One of the foundation concepts of Windows PowerShell is pipelining objects instead of text.  What happens is that when an upstream command generates an object, the PowerShell engine examines the data requirements of the next pipeline… Read more