Travis Horn
Travis Horn

Travis Horn

Combine Multiple PowerShell Commands into One

Combine Multiple PowerShell Commands into One

Travis Horn's photo
Travis Horn
·Aug 22, 2019·

3 min read

There are some sequences of commands I use over and over again. I decided to make commands that will execute these sequences together.

At first, I thought an alias would be perfect for this job. As it turns out, PowerShell aliases can only execute one command. Functions, however, can execute multiple commands.

For example, say I just fixed a bug in a Node.js package I am writing. Now I want to bump the version number of my package, publish it through npm, and push the changes to a remote repository.

Normally, I’d execute three commands.

npm version patch
npm publish
git push --follow-tags

This gets tedious when you’re constantly fixing bugs. If I stuff the commands inside a function…

function Publish-Patch {
>>   npm version patch
>>   npm publish
>>   git push --follow-tags
>> }

I can reuse the function any time I fix a bug!

Publish-Patch

This works great. Except it doesn’t persist across sessions.

In order to write persistent functions, you’ll have to store them in a PowerShell profile. A profile is a script that gets run at the beginning of every session.

PowerShell supports multiple profiles depending on your environment. You can set a profile to run for only a specific user or only inside a specific host program. See the documentation for more information.

For my purpose, I want to create profile that will run for the current user (me) in any host (command line, VS Code, etc).

Edit the profile in Notepad.

notepad $PROFILE.CurrentUserAllHosts

Pro tip: replace notepad with code if you have VS Code installed for a better editing experience.

If no profile exists, Notepad will ask if you want to create it. Accept the prompt.

In Notepad, write the function.

function Publish-Patch {
  npm version patch
  npm publish
  git push --follow-tags
}

In fact, I want to create functions for each type of update — not just patches. That’s easy, too. Just write the other functions below the first.

function Publish-Patch {
  npm version patch
  npm publish
  git push --follow-tags
}

function Publish-Minor {
  npm version minor
  npm publish
  git push --follow-tags
}

function Publish-Major {
  npm version major
  npm publish
  git push --follow-tags
}

There’s one last step before we’re done. By default, PowerShell blocks scripts from running. Which in turn will block your profile from running. You can easily change this setting, though.

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

I chose the RemoteSigned execution policy. It allows scripts to be run, but those from remote sources must be signed by a trusted publisher. While this works for me, there are other execution policies to choose from.

That’s it! Restart your PowerShell session. Now those functions will always be available to you.

 
Share this