For windows developers, who miss bash.
Every time I tried explain my friends why they should use PowerShell, I didn’t have a good demo. Time to fix it!
Here is my collection of show-cases for awesome PowerShell features (with .gif demos!). It’s also a very brief introduction to PowerShell.
All demos recorded from powershell_ise.exe (PowerShell Intergrated Scripting Environment). It’s a full-functional terminal with some IDE bells and wistles. I recommend you to start exploring PowerShell from ise.
Disclamer: I work in Windows PowerShell team. This post is my personal opinion and doesn’t represent my employer position.
Use familiar unix-like aliases
They are mostly work as you expect!
ls is an alias for command
man is an alias for command
cat is an alias for command
kill is an alias for command
Use intellisense in powershell_ise
man) is a good thing, but you can do things much faster with intellisense.
To bring intellisense use
Ctrl + Space.
Beneficial if you understand basics of PowerShell naming conventions. These conventions tremendously increase explorability. They are enforced by Microsoft and community for a good reason. Main convention: all commands names are verb-noun pairs.
Explore available commands
Use intellisense to explore and pick an appropriate command.
In this examle, I looked for a command to manage
bitlocker (disk encryption on windows).
Then I used intellisense to explore and specify command parameters.
Explore available methods and properties in the pipeline
Pipeline is one of the most awesome things in PowerShell. The basic idea: you pass objects (in fact .NET objects), not text streams. Then you can call methods and properties on objects passed in the pipeline. PowerShell can figure out a returned type of a command and use it to provide intellisense below in the pipeline.
$_ variable represents current object.
man about_Automatic_Variables for details.
Explore environment variables
Explore, get and set env variables from PowerShell.
Install Jump-Location (autojump for PS) and navigate faster on the file-system. Seriously, I don’t understand how I lived without it.
Do .NET calls directly from PowerShell
PowerShell use .NET (CLR and DLR) and well-integrated with it.
Here is a quick demo for a bug in System.Type.GetType(String), that I explored recently.
System.Type.GetType("System.Func`10") must return a generic type
Func`10, but it returns
Look how simple you can call .NET APIs! Again, you have intellisense for them. More importent, there is no need to compile anything or create a project to test it out. It’s like a REPL for C#.
If you are a windows developer (especially .NET developer), PowerShell should be in your tool arsenal. It’s a rich terminal and scripting language, highly inspired by unix terminals like bash and zsh.