Build your own PowerShell universe

The PowerShell profile. In essence it’s nothing more than a personal script that runs each time you start PowerShell. But it’s possibilities are endless. But I’ll get to the possibilities later. Let’s first examine whether we have a profile.


Determining the location of your profile is easy. Just look at the value of the $profile variable:

PS D:\> $profile

C:\Documents and Settings\PeetersHJ\My Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1


Now lets see whether this file exists:

PS D:\> Test-Path $profile



If it returns False, you can easily create it:

PS D:\> New-Item $profile -itemType file


 Directory: Microsoft.PowerShell.Core\FileSystem::C:\Documents and Settings\PeetersHJ\My Documents\WindowsPowerShell


Mode                LastWriteTime     Length Name

—-                ————-     —— —-

-a—         29-4-2008     10:10          0 Microsoft.PowerShell_profile.ps1


Now we can open the file and start editing it. We could browse to the location of the file and double-click it. But hey, we’ve got PowerShell. It makes life easy:

PS D:\> Invoke-Item $profile


What type of commands would you like to run each and every time you start PowerShell?


Maybe you would like to start at the root of your script directory:

Set-Location D:\scripts


How about storing some variables for use in your daily routines:

$weddingday = Get-Date -year 2006 -month 10 -day 13


But the real fun starts when using functions and filters.

A function is a command that optionally takes input and will generate output, while saving you from typing those same lines of code over and over again. A big advantage is that you can use this function in your scripts and only have to change one line of code instead of every occurrence in all your scripts when making modifications.

A filter has the same advantages. It allows you to replace complex scriptblocks and centralize them.


For example:

function Cred


$global:cred = Get-Credential $User


A simple function I use a lot. It asks for credentials and stores them in the $cred variable. It allows me to use -Credential $cred in all subsequent commands that need alternate credentials. The variable $user is defined earlier in my profile as “DOMAIN\adminuser”.


filter PRD


$_.Description -like “*@PRD*”


Filters like this one allow me to filter search results (in this case of AD computers) using the following syntax: |Where {PRD}.


PS: Did you notice the word global in the Cred function? $global:var turns the variable $var into a global variable, which allows it to be used throughout your PowerShell session. Without the global, the variable would only exist during the execution of the function. This can be handy when you need a temporary variable inside your function, instead of a variable that is the result of your function.