Sunday, April 15, 2007

Introduction to Powershell

Greetings! I've been playing with Powershell these past few days and I'd like to share my joy with you.Since, this is my first post. I won't dive deep into the chasm of technicalities and hifalutin terms.There are only three goals at the moment:
  1. Know what is PowerShell
  2. Identify three things one can do with it
  3. What do I need to get started

What is PowerShell?

PowerShell is the next generation command-line shell for Windows. Although, this was designed for system administrators, developers like me noticed very appealing benefits in using this tool. This shell has an interactive prompt and scripting environment that can be used independently or in combination. There are also third party IDEs (Interactive Development Environment) that are available. Anyway, with the basic needs, I think using the command prompt approach is already enough. The best feature of PowerShell I love the most is the .NET Framework leverage. That concept is very attractive to me as a developer who spent most of his time developing applications using .NET. I know almost nothing about WMI, VBScript, and other scripting technologies. But, I know .NET and PowerShell gives me the power to use this to extend my existing knowledge for the command-line shell.

When I think of PowerShell, I think of automation. When I think of automation (when done correctly), I think of productivity. When I think of productivity, I think of efficient use of time. I think time is one of the resources people take for granted. It's one of the resources when lost cannot be recovered anymore. PowerShell is one of the tools that help me be a good steward of time. As of now, I can think of two types of tasks that it helps me automate:
  1. Routine tasks which consists of many steps
  2. Tasks in which I have to perform several mouse clicks just to accomplish

What can I do with it?

These are only some in a huge library of things you can do with PowerShell.

A. Write smaller code to display "Hello World"

One upon a time, my friend and I were talking about computer languages. I asked her why she loves studying the current computer language she's studying. She said that in some other languages, you need to write several lines of code just to display a simple "Hello World". Then, she showed me the syntax in her language. I saw two lines. Well, in other languages, such as Python, one could just type: echo "Hello World". This works similar with the Windows CMD. Then, I remembered PowerShell, it's just "Hello World". That's it. No additional keywords. I believe this is because "Hello World" is already a string object. PowerShell recognizes .NET objects and is intellegent enough to display such result. Maybe, this is not really a compeling reason to use PowerShell. But, on second thought, sometimes simplicity makes a huge difference.

Type the following the PowerShell prompt:
"Hello World"

To get the length of the string type:
"Hello World".length

To know more about other things you can do with "Hello World" type:
"Hello World" | get-member

B. Display files

When I joined my first company three years ago, we were trained in administering a popular operating system called Linux.That's the time when my passion for using the command-line shell began to spark. I love the concept of accompishing computer tasks without the use of the mouse. It's like playing bumblebee on the piano with both hands and never reaching out to the musicsheet for page turns 'cause you got it memorized already. When I was tinkering with Powershell, I discovered that it has aliasing feature. This enabled me to use my hands' existing muscle memory. It's like using Linux shell commands in Windows. Maybe, this would also be a nice feature for system administrators who works on both environments. Taking advantage of legacy knowledge seems like an attractive value for me.

To display the current directory, type:
pwd

To display items(files/directories) within the current directory, type:
ls

C. Search within files

I was working on a task last year which requires me to search all instances of a database table within SQL files in a hierarchy of directories. So, my common sense told me to use the Windows Search. To my surprise, it didn't retrieve any result. But, when I opened a certain file, I saw the table I was looking for. It seems windows search got a problem searching the contents of some files like SQL. I wish I already met PowerShell that time so that i can do something like the one below.

get-childitem -recurse -include *.sql | select-string 'special table' | group-object filename

What do I need to get started?

Here's the link to the PowerShell download:

Here's the link to the documentation pack:

Thank you very much for reading this post. Happy Scripting!!!