PowerShell Team

Automating the world one-liner at a time…

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...

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: I hope these reasons help convince other software testers to use PowerShell. It can really make ...

The Semantic Gap

There are 2 worlds: 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:  VMWare Perl Toolkit verses Powershell V1 ToolKit which shows the 20 lines...

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 about mindset and attitude. The ...

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: http://blogs.msdn.com/powershell/archive/2007/05/29/using-powershell-to-generate-xml-documents.aspx The overall feel of the approach that Jeffrey described is very much like that of ASP, JSP, PHP on any ...

Editing your Profile file

$hay has a new scripting blog at http://scriptolog.blogspot.com/ .  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...

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 &...

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 ...

Managing Active Directory with Windows PowerShell

MOW is now posting the details of his Managing Active Directory with Windows PowerShell demo that he performed at my TechEd talk.  This is worthwhile for everyone to review.  For the people at the talk, we covered a huge amount of data in a very short time so it would be worth while to walk through the details.  For ...

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 ...