Run Powershell script when you open Powershell
Is it possible to run a Powershell script when you run Powershell? As in, double click the Powershell icon and open the window. Is there some type of "auto-run" setting somewhere?
Solution 1:
There is a PowerShell script that runs on ps startup, if it exists. The filespec for this script is in the variable $profile
.
You can use PowerShell commands to check to see if this script file exists, to create it if it doesn't, and to edit it with notepad. Here's the how-to guide.
Note that in recent (~2020 and later) versions, PowerShell will no longer run unsigned scripts (not even $profile
!) by default. If you just follow the old instructions such as in that how-to guide, when you open a new PowerShell, you'll see an error message like:
. : File C:\[..]\WindowsPowerShell\Microsoft.PowerShell_profile.ps1 cannot be loaded
because running scripts is disabled on this system. For more information,
see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
Signing your profile once — let alone every time you change it — is probably not realistic, so you must change the Execution Policy to allow it.
To do this, you can either:
-
Run the following command as Administrator:
Set-ExecutionPolicy RemoteSigned -Scope LocalMachine
-
or, use RegEdit to modify
Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell
, adding a new REG_SZ with the nameExecutionPolicy
and the valueRemoteSigned
.
Both have exactly the same effect and will persist across sessions.
The RemoteSigned
policy requires that scripts downloaded from elsewhere be signed, but scripts you create locally on your machine (such as $profile
) can run without a signature. (You could also set the policy to Unrestricted
to enable unsigned downloaded scripts as well, but this isn't recommended security practice.)
Solution 2:
Type the following command:
New-item –type file –force $profile
A file Microsoft.PowerShell_profile.ps1
will be created in C:\Users\<username>\Documents\WindowsPowerShell\
for PowerShell 5 and older or C:\Users\<username>\Documents\PowerShell\
for PowerShell 6 Core (this folder will be automatically created).
Then edit this file and you can add personalized PowerShell functions or load modules or snap-ins...
Now when you run your powershell console, Microsoft.PowerShell_profile.ps1
will be triggered.
Solution 3:
There are many ways to do this. A straight forward way is to a profile script in your default powershell home path.
- Navigate to
$env:UserProfile\Documents\WindowsPowerShell
.
Typically, this expands toC:\Users\<username>\Documents\WindowsPowerShell
.
Create the folders if they do not exist. - Create a file named
profile.ps1
. You can write your script in this file, and this file will be executed each time you start powershell as the user. If you have the script somewhere else, you can haveprofile.ps1
call those scripts.
As a side note, the default profile name should be Microsoft.PowerShell_profile.ps1
.
But profile.ps1
also works.
Solution 4:
To run an arbitrary script on PowerShell session startup, use the following command:
PowerShell -NoExit -File PathToScript.ps1
Solution 5:
Update the Default $Profile Variable Edit the Default .PS1 file (if not exist, Create it) Add your Script to the .PS1 File