Powershell tips for the every day developer
2017 Sep 03Introduction
Some months ago I decided to give Powershell a try and learn to use it for my daily tasks as a developer. I'll share here some common tasks I have to do almost every day and how I accomplish them using Powershell.
Finding files and directories
Who hasn't have the need to find a file in a directory without having any idea where to start looking for it? The Get-ChildItem command can help you with that.
Get-ChildItem without any argument lists all the content of the current directory, but it can do much more than that. For instance, let's say that I want to find all the JavaScript and CSS files in a directory called App_Plugins, the command would be:
Get-ChildItem .\App_Plugins\ -Include *.js,*.css -Recurse
Searching keywords in text files
I usually have to review log files to figure out what happened with an application and you know that those logs can get really big. Let's say that I have to search the text "Order id: 345912" in a bunch of log files, the command would be:
Select-String -Path *.txt -Pattern "Order id: 345912"
Reading a log file information in real time
Reading a website's log file in real time can be very useful when debugging a problem, that can be done with the following command:
Get-Content log.txt -Tail 10 -Wait
Getting a domain's DNS information
What is the TTL of a domain? Where does it point? Is the CNAME record configured correctly? All of those are common questions when configuring domains and all answers can be found by using the Resolve-DnsName command. For instance, let's list my domain's information:
Resolve-DnsName -Name camaya.co
Opening files
How do you open a .pdf or a .docx file without using the Windows explorer? you can use the & symbol for that, for instance:
& requirements.docx
Other common tasks
- Moving files and directories: 
Move-Item - Copying files and directories: 
Copy-Item - Removing files and directories: 
Remove-Item - Creating an empty text file: 
New-Item foo.js - Reading the content of a text file: 
Get-Content orders.txt - Extracting the content of a zip file: 
Expand-Archive images.zip -DestinationPath images - Get all IIS websites and their status: 
Get-Website. You can use the-Nameargument to filter the results - Starting an IIS website: 
Start-Website acme.local - Stopping and IIS website: 
Stop-Website acme.local - Getting all Windows services and their status: 
Get-Service. You can use the-Nameargument to filter the results - Starting a Windows service: 
Start-Service mongodb - Stopping a Windows service: 
Stop-Service mongodb 
About commands names
I wrote all the examples above using the full name of the commands (or cmdlets in Powershell jargon), but I actually use aliases when working with them. For instance, ls instead of Get-ChildItem or cat instead of Get-Content. 
Aliases save me a few keystrokes and they're easier to remember. If you want to know the available aliases of a cmdlet you can use the Get-Alias cmdlet, for example:
Get-Alias -Definition Get-ChildItem
You can even create your own aliases, but I'll leave you figured out how to do that ;).
Summary
As you can see, there are a lot of things you can do without leaving the comfort of your keyboard by using Powershell and there are a lot more so if you are a terminal fan like I am, you should definitely learn to use it, the Get-Help cmdlet is a good way to start :).
If you have any comment, suggestion or question you can reach me on Twitter (my DMs are open) @_camaya or you can send me an email to <cam at camaya.co>.
Cheers.