Improving Your Powershell Profile (Windows)
For years I’ve been a fan of the linux bash, with easy support for ssh-keys, colorized directory listings and git info the prompt. But at the same time, I really love Powershell. I have finally found some usefull Powershell modules that has made me switch completly to Powershell in the terminal.
Colorized Directory Listings
The first module I’m going to introduce is the Get-ChildItemColor module by Joon Ro (github.com/joonro/Get-ChildItemColor).
This module will override the Out-Default
cmdlet and give you colorized directory listings when using Get-ChildItem
or ls
.
You can easilly install it from the Powershell Gallery.
Install-Module -Name Get-ChildItemColor -Scope CurrentUser -AllowClobber
NOTE: The -AllowClobber
flag is neccessary for it to override the Out-Default
cmdlet.
Now you can just add Import-Module -Name Get-ChildItemColor
to your Powershell profile.
Git Information In Your Prompt
The second module we’re going to add is the posh-git
module by Keith Dahlby (github.com/dahlbyk/posh-git). This will override your default prompt and add git information when in a folder with git initialized. NOTE: This will not override your custom prompt, if you have defined one in your Powershell profile.
This module is also available from the Powershell Gallery. Currently, v1.0 is in beta, and is neccessary if you want support for Powershell Core 6.0 and up. Version v0.x only supports Windows Powershell.
Install-Module -Name posh-git -Scope CurrentUser -AllowPrerelease -Force
To be able to install the v1.0-beta we must include the -AllowPrerelease
flag.
Next, just add it to your Powershell profile Import-Module -Name posh-git
.
Using SSH Keys With Remote Git Repositories
The last module is posh-sshell
which is a helper module for your SSH client and used to be a part of the posh-git
module. This has now been separated into it’s own module by the same creator Keith Dahlby (github.com/dahlbyk/posh-sshell).
As with the others, this is available from the Powershell Gallery.
Install-Module -Name posh-sshell -Scope CurrentUser
There is one cmdlet in particular that we’re interrested in, which is the Start-SshAgent
cmdlet. This will start your SSH agent wether you’re using the Windows-native OpenSSH client, OpenSSH client that ships with Git for Windows or putty’s Pageant client.
If you are using the Windows-native OpenSSH client, make sure that the service is not disabled
.
Get-Service -Name ssh-agent | Select-Object Status, Name, StartType
If StartType
says disabled
you can run the following command to enable it or else Start-SshAgent
will fail.
Get-Service -Name ssh-agent | Set-Service -StartType Manual
Next, add the following to your profile.
Import-Module -Name posh-sshell
Start-SshAgent -Quiet
When the ssh-agent is started it will look for ssh-keys in your $env:USERPROFILE\.ssh
folder. If you add SSH keys after the ssh-agent has started you can either restart it with
Stop-SshAgent
Start-SshAgent
or add it to the ssh-agent with
# Adds $env:USERPROFILE\.ssh\id_rsa to the SSH agent.
Add-SshKey
# OR
# Adds $env:USERPROFILE\.ssh\mykey to the SSH agent.
Add-SshKey ~\.ssh\mykey
Conclusion
Now, atleast in my opinion you have a more similar workflow in Powershell that you would have in linux. It’s really cool to see how far Powershell (and Windows) has come in the field of developer workflow.