Setting $HOME in PowerShell

29

12

How do I change my default home directory to "C:\Users\khornsby" for every time I open powershell?

I am running Windows 7. Below is info about the state of my environment.

Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.

PS P:\> cd ~
PS P:\> echo $HOME
P:\
PS P:\> HOME="C:\Users\khornsby"
The term 'HOME=C:\Users\khornsby' is not recognized as the name of a cmdlet,
function, script file, or operable program. Check the spelling of the name, or
if a path was included, verify that the path is correct and try again.
At line:1 char:25
+ HOME="C:\Users\khornsby" 

PS P:\> Set-Variable HOME "C:\Users\khornsby"
Set-Variable : Cannot overwrite variable HOME because it is read-only or
constant.
At line:1 char:13
+ Set-Variable 

PS P:\> dir env:home*

Name                           Value
----                           -----
HOMEPATH                       \
HOMEDRIVE                      P:
HOMESHARE                      \\fileserv\khornsby$


PS P:\>

kzh

Posted 2009-12-11T21:02:49.617

Reputation: 3 213

3How did your format your post? I like the way what you typed is highlighted. – Jay Bazuzi – 2010-02-08T16:53:25.287

3I used the <kbd> tag. – kzh – 2010-02-21T12:55:28.817

Answers

27

The variable is read only by default, but can be removed with the -Force switch to Remove-Variable. To make your change persistent across sessions, you can make a profile file which is much like a .bashrc (For bash on Linux) except for Powershell.

In your Documents directory (normally C:\Users\YOUR_USERNAME_HERE\documents) for your user account, create a WindowsPowerShell folder (named exactly like that) if one does not already exist. Inside the folder, create a text file called profile.ps1 (ensure it's not profile.ps1.txt).

Inside the file, place anything you want executed when you open Powershell.

example:

Write-Host "Hi John, welcome back!"
Remove-Variable -Force HOME
Set-Variable HOME "C:\Users\khornsby"

result:

alt text

John T

Posted 2009-12-11T21:02:49.617

Reputation: 149 037

1You can also have the script run on startup from a shortcut, pointing to: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe -NoExit -ExecutionPolicy bypass -File C:\foo\profile.ps1 – paradroid – 2011-04-15T11:28:47.083

1I tried this, and it does successfully change the value of $HOME. But "cd ~" still stubbornly switches to the original location. – Weeble – 2013-12-19T14:57:30.843

2@Weeble, see my answer for overriding the ~ shortcut. – ulty4life – 2014-01-03T09:59:48.987

9

To address @Weeble 's concern about the ~ shortcut:

$HOMEDRIVE = "C:\"
$HOMEPATH = "Users\" + $env:username

# Set and force overwrite of the $HOME variable
Set-Variable HOME "$HOMEDRIVE$HOMEPATH" -Force

# Set the "~" shortcut value for the FileSystem provider
(get-psprovider 'FileSystem').Home = $HOMEDRIVE + $HOMEPATH

See here for the distinction between ~ and $HOME

ulty4life

Posted 2009-12-11T21:02:49.617

Reputation: 263

1it's worth adding cd $HOME at the end, so the shell will start in that location and will be all set for use :) – Eliran Malka – 2015-02-12T13:04:26.600

5

Even easier ... open up advanced system settings ...

 C:\> systempropertiesadvanced

Add a new system variable named HOME with the path to your profile

enter image description here

Restart explorer or log out and back in ...

PS C:\> $Env:home 
--- 

Eddie B

Posted 2009-12-11T21:02:49.617

Reputation: 909

4This doesn't do what the question asks. This sets the environment variable $env:HOME, not the Powershell variable $HOME. The Powershell variable $HOME appears to be derived from the environment variables $env:HOMEDRIVE and $env:HOMEPATH at the time the Powershell process starts. It is $HOME that determines the behaviour of "cd ~". – Weeble – 2013-12-19T14:50:15.890

2Sorry, that last statement isn't quite true. $HOME and the behaviour of "cd ~" both appear to match the values of the HOMEDRIVE and HOMEPATH environment variables when the Powershell process starts. Subsequently changing any of these variables/environment variables appears to have no effect on the directory chosen by "cd ~". – Weeble – 2013-12-19T15:02:23.533

Works fine for me.... I don't know what you're doing differently. – Eddie B – 2013-12-23T01:20:20.823

4

To change from within Windows, try the following:

  • Pin PowerShell to the taskbar.

  • Right click the PowerShell icon on the taskbar.

  • Right click 'Windows PowerShell' and select 'Properties'.

  • Within the 'Properties' window, go to the 'Shortcut' tab and change the 'Start in:' field to your desired starting directory. (Example: C:\Users\username\Desktop).

  • Click 'OK'.

  • Launch PowerShell from the taskbar.

    taskbar

    Properties window

clarencebuttowski

Posted 2009-12-11T21:02:49.617

Reputation: 41

not works when select 'run as administrator' – devi – 2019-04-17T08:58:16.370

2

You can use help about_profiles to see more details about this. Do not forget to sign your script.

Eduardo Daudt Flach

Posted 2009-12-11T21:02:49.617

Reputation: 21

3help from what application? – kzh – 2011-04-15T11:20:54.480

@kzh: PowerShell – paradroid – 2011-04-15T11:23:52.687