How do I run a PowerShell script?
I have a script named myscript.ps1
I have all the necessary frameworks installed
I set that execution policy thing
I have followed the instructions on this MSDN help page and am trying to run it like so: powershell.exe 'C:\my_path\yada_yada\run_import_script.ps1' (with or without --noexit)
which returns exactly nothing, except that the file name is output.
No error, no message, nothing. Oh, when I add -noexit
, the same thing happens, but I remain within PowerShell and have to exit manually.
The .ps1 file is supposed to run a program and return the error level dependent on that program's output. But I'm quite sure I'm not even getting there yet.
What am I doing wrong?
powershell
as you would have started cmd
. Now you can execute the myscript.ps1
script as any executable there in (in powershell window), i.e. .\myscript.ps1
Prerequisites:
You need to be able to run PowerShell as an administrator
You need to set your PowerShell execution policy to a permissive value or be able to bypass it
Steps:
Launch Windows PowerShell as an Administrator, and wait for the PS> prompt to appear Navigate within PowerShell to the directory where the script lives: PS> cd C:\my_path\yada_yada\ (enter) Execute the script: PS> .\run_import_script.ps1 (enter)
Or: you can run the PowerShell script from the Command Prompt (cmd.exe
) like this:
powershell -noexit "& ""C:\my_path\yada_yada\run_import_script.ps1""" (enter)
according to Invoking a PowerShell script from cmd.exe (or Start | Run) by Kirk Munro.
Or you could even run your PowerShell script asynchronously from your C# application.
If you are on PowerShell 2.0, use PowerShell.exe's -File
parameter to invoke a script from another environment, like cmd.exe. For example:
Powershell.exe -File C:\my_path\yada_yada\run_import_script.ps1
-ExecutionPolicy Bypass
If you want to run a script without modifying the default script execution policy, you can use the bypass switch when launching Windows PowerShell.
powershell [-noexit] -executionpolicy bypass -File <Filename>
-nologo
option to get rid of the startup banner
Type:
powershell -executionpolicy bypass -File .\Test.ps1
NOTE: Here Test.ps1
is the PowerShell script.
powershell -executionpolicy bypass -File .\Test.ps1
assuming you current working directory contains Test.ps1
I've had the same problem, and I tried and tried... Finally I used:
powershell.exe -noexit "& 'c:\Data\ScheduledScripts\ShutdownVM.ps1'"
And put this line in a batch-file, and this works.
If you only have PowerShell 1.0, this seems to do the trick well enough:
powershell -command - < c:\mypath\myscript.ps1
It pipes the script file to the PowerShell command line.
Pretty easy. Right click the .ps1 file in Windows and in the shell menu click on Run with PowerShell.
Using cmd (BAT) file:
@echo off
color 1F
echo.
C:\Windows\system32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "PrepareEnvironment.ps1"
:EOF
echo Waiting seconds
timeout /t 10 /nobreak > NUL
If you need run as administrator:
Make a shortcut pointed to the command prompt (I named it Administrative Command Prompt) Open the shortcut's properties and go to the Compatibility tab Under the Privilege Level section, make sure the checkbox next to "Run this program as an administrator" is checked
An easy way is to use PowerShell ISE, open script, run and invoke your script, function...
https://i.stack.imgur.com/h2jFM.png
I have a very simple answer which works:
Open PowerShell in administrator mode Run: set-executionpolicy unrestricted Open a regular PowerShell window and run your script.
I found this solution following the link that was given as part of error message: About Execution Policies
Edit: Make sure to run set-ExecutionPolicy default
once you're done, or you will be exposed to seurity risks (thanks Anonymous user).
set-ExecutionPolicy default
once you're done, or you will be exposed to seurity risks.
If your script is named with the .ps1
extension and you're in a PowerShell window, you just run ./myscript.ps1
(assuming the file is in your working directory).
This is true for me anyway on Windows 10 with PowerShell version 5.1 anyway, and I don't think I've done anything to make it possible.
myscript.ps1
did not work, threw an error, but with ./
it's executing.
In case you want to run a PowerShell script with Windows Task Scheduler, please follow the steps below:
Create a task Set Program/Script to Powershell.exe Set Arguments to -File "C:\xxx.ps1"
It's from another answer, How do I execute a PowerShell script automatically using Windows task scheduler?.
Give the path of the script, that is, path setting by cmd: $> . c:\program file\prog.ps1
Run the entry point function of PowerShell: For example, $> add or entry_func or main
>$ . c:\program file\prog.ps1 '.' is not recognized as an internal or external command, operable program or batch file.
and >$ add or entry_func or main 'add' is not recognized as an internal or external command, operable program or batch file.
You can run from cmd like this:
type "script_path" | powershell.exe -c -
Use the -File
parameter in front of the filename. The quotes make PowerShell think it is a string of commands.
With the appropriate execution policy, you should just be able to call the file directly and Windows will associate it with PowerShell
C:\my_path\yada_yada\run_import_script.ps1
That does not do so well with arguments. The real answer to your question is that you are missing the &
to say "execute this"
powershell.exe '& C:\my_path\yada_yada\run_import_script.ps1'
Open Power-shell Move the folder where the .ps1 file available ex. cd c:\users
This should execute your simple powershell script.
I've just found the method what Microsoft do when we right click on a ps1
script and click on "Run with PowerShell" :
"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" "-Command" "if((Get-ExecutionPolicy ) -ne 'AllSigned') { Set-ExecutionPolicy -Scope Process Bypass }; & 'C:\Users\USERNAME\Desktop\MYSCRIPT.ps1'"
Success story sharing
powershell.exe
and then the script file is somehow screwed up. Do you have any idea how to modify it?powershell -noexit "& "C:\yada_yada\run_import_script.ps1"
(notice the three double quotes) I don't really understand why, but at this point, I don't really care :) Thanks a lot!"&
do?powershell c:\mypath\yadayada\myimportantscript.ps1
if your path and file name have no spaces in it but if you put quotes around it powershell will try and interpret the parameter as a string of powershell commands.