14

In Powershell-
How do I run a powershell script(.ps1) inside a bash script(.sh)
I can run just the powershell script-
& .\scriptfile.ps1
and just the bash script.
But when I try to run the powershell inside the bash script, I get
file.ps1 : command not found
Both scripts are in the same path.

2
  • So you run .\scriptfile.ps1 and your error says file.ps1 not found?? Commented Aug 16, 2020 at 1:34
  • No. It runs fine, no errors. The file not found error is when I run it inside the .sh script. Commented Aug 16, 2020 at 2:12

5 Answers 5

14

Are you trying

.\scriptfile.ps1

? That should be

./scriptfile.ps1

But also, when invoking powershell from a bash script, you'll need to either run the pwsh command like

pwsh ./scriptfile.ps1

or the first line of your Powershell script file should be a shebang (interpreter directive) like:

#!/usr/bin/env pwsh

See How can I use a shebang in a PowerShell script?

Sign up to request clarification or add additional context in comments.

3 Comments

I tried pwsh ./scriptfile.ps1, I get- pwsh: command not found
Adding #!/usr/bin/env pwsh, give me #!/usr/bin/env : bad interpreter: no such file or directory
Also pwsh ./scriptfile.ps1, fails. pwsh not recognized as name of a cmdlet.....etc. Just .\scriptfile.ps1 by itself runs without errors. However, it fails when it's run from inside the .sh script.
10

I'm using git bash on Windows 10 Pro and there it's powershell. The executable is in /c/WINDOWS/System32/WindowsPowerShell/v1.0/powershell.exe and it's contained in my $PATH. So I can say

powershell ./scriptfile.ps1
# or inline:
powershell 'my script'

In the Ubuntu-on-Windows bash I have to say

powershell.exe ./scriptfile.ps1

1 Comment

For me powershell ./scriptfile.ps1 was the only thing that worked. powershell scriptfile.ps1 gave an error and powershell 'scriptfile.ps1' gave an error.
1

try to change permission and make it excutable with chmod +x file.ps1

6 Comments

I tried that before, but I get chmod is not recognized as the name of a cmdlet, function, script file etc.
are you run with super user or root user?
I am running the powershell as admin.
I get the same message again when I run $ which pwsh ($ not recognized as the name of cmdlet.....). Also tried which pwsh. (which not recognized as the name of cmdlet etc)
@hithesh It sounds like you are running these commands from inside of the Powershell shell; try running them from your default shell (Bash, ZSH, etc).
|
0

In my system, 'powershell' calls v5 and 'pwsh' calls v7. If v7 is installed, v5 is not removed. This may clear up some of the confusion. Also, wsl (Windows subsystem for Linux) may be able to call powershell and sudo in linux would be more appropriate than admin in pwsh if running pwsh from within bash.

Comments

-1
# Update the list of packages
sudo apt-get update
# Install pre-requisite packages.
sudo apt-get install -y wget apt-transport-https software-properties-common
# Download the Microsoft repository GPG keys
wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb
# Register the Microsoft repository GPG keys
sudo dpkg -i packages-microsoft-prod.deb
# Update the list of products
sudo apt-get update
# Enable the "universe" repositories
sudo add-apt-repository universe
# Install PowerShell
sudo apt-get install -y powershell
# Start PowerShell
pwsh

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.