Creating and using PowerShell profiles
User profiles are used to set up user customized PowerShell sessions. These profiles can be blank, contain aliases, custom functions, load modules, or any other PowerShell tasks. When you open a PowerShell session, the contents of the profile are executed the same as executing any other PowerShell script.
How to do it...
In this recipe, we will modify the PowerShell console profile for the current user on the current host. By default the profile file does not exist, so we will create the file, and then configure it to create a transcript of our actions. To do this, carry out the following steps:
Open the PowerShell console (not the ISE) and list your current profile locations by executing
$PROFILE
or$PROFILE | Format-List * -Force|
:If the
CurrentUserCurrentHost
profile file doesn't already exist, create the folder and file structure:$filePath = $PROFILE.CurrentUserCurrentHost if(!(Test-Path $filePath)) { New-Item -Path $filePath -ItemType File }
Edit the
CurrentUserCurrentHost
profile by opening it in a text editor. Make the necessary changes and save the file.
Tip
NOTE: It is best practice to sign your profiles after making changes. This ensures that the profile is secure and hasn't been unintentionally changed.
More information about code signing in PowerShell can be found in the recipe Signing PowerShell scripts
How it works...
When a PowerShell session is started, the profile files are executed before the session is handed over to the user. At that time, any aliases or modules that were loaded will be in effect. Additionally, any background commands, such as Start-Transcript
, will continue to operate in the background.
We start by opening PowerShell and listing our profile files. By default, $PROFILE
command only returns the CurrentUserCurrentHost
profile. By piping the output through Format-List
with the –Force
switch, we can see all applicable profile files.
Note
In this example we are specifically using the PowerShell console, instead of the PowerShell ISE, because the Start-Transcript
command is only supported in the console.
There's more…
There are six user profile files in total, and they are applied to PowerShell sessions one at a time. First the more general profiles, such as AllUsersAllHosts
are applied, ending with more specific profiles such as CurrentUserCurrentHost
. As the individual profiles are applied, any conflicts that arise are simply overwritten by the more specific profile.
Not all six profiles are used at a time, and by default, these profiles are empty. Two of the profiles are specific to the PowerShell console, and two of them are specific to the PowerShell ISE. At the most, you can have four active profiles on a given session.
See also
More information on PowerShell profiles can be found at http://msdn.microsoft.com/en-us/library/windows/desktop/bb613488(v=vs.85).aspx
More information on PowerShell security can be found in the recipes:
The Managing security on PowerShell scripts recipe
The Signing PowerShell scripts recipe