PortMan
PortMan

Reputation: 4523

How to load custom powershell profile with single command

I have a shared computer for which I want to create a custom PowerShell profile that I can load with a simple command but which otherwise never gets sourced.

I tried adding a function like this to the main $profile:

function custom() {.  C:\Users\[username]\Documents\WindowsPowerShell\custom_profile.ps1}

The idea was that I could just type the command custom and it would load my custom profile.

This doesn't work, because it does the sourcing inside the function scope, and all of the functions and aliases are lost when I leave that scope.

I could just execute the entire . C:\Users\[username]\Documents\WindowsPowerShell\custom_profile.ps1 command, but I am looking for a way to do this with a single command.

If I were in bash, I'd just use something like alias custom=". C:\Users\[username]\Documents\WindowsPowerShell\custom_profile.ps1", but Powershell's alias doesn't work that way.

How can I do this in PowerShell?

Upvotes: 1

Views: 1536

Answers (3)

GodEater
GodEater

Reputation: 3717

Or, change the file to a psm1 (a powershell module) and then :

Function custom { 
   if(-not Get-Module custom_profile){
       Import-Module 'C:\Users\[username]\Documents\WindowsPowerShell\custom_profile.psm1' 
   } else {
       Remove-Module custom_profile
       Import-Module 'C:\Users\[username]\Documents\WindowsPowerShell\custom_profile.psm1' 
   }
}

and then running

custom

will do what you want.

As noted in the comments you might need

Export-ModuleMember -Variable * -Function * -Alias *

if your module is supposed to export variables and aliases as well as functions.

Upvotes: 3

majkinetor
majkinetor

Reputation: 9026

The most simple way would be to use PSReadLine, define your own handler to be executed, such as F5 to load custom prifile.

This is shorter then writing a command also as you have to press 1 key.

You should use PSReadLine anyway as it overpowers stock console in every aspect.

Upvotes: 0

briantist
briantist

Reputation: 47772

A simple way might be to just use a variable instead of a function.

In profile:

$custom = 'C:\Users\[username]\Documents\WindowsPowerShell\custom_profile.ps1'

Interactively:

. $custom

Probably want to use a better name that's less likely to be overwritten, but same concept.

Upvotes: 0

Related Questions