MacOS developers use a tool called homebrew to install CLI applications.
Windows has a similar project called Scoop to easily install apps like vim, grep, and curl. Here’s some steps to get started.
Allow PowerShell scripts to be run
First, we need to allow PowerShell scripts to be run in Windows since Scoop uses it. By default, the PowerShell execution policy is set to Restricted which means PowerShell scripts cannot be run at all.
- Open the PowerShell application
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
- Select Yes when asked to change the execution policy
Execution Policy Change The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): Y
This changes your execution policy to RemoteSigned which allows scripts signed by a trusted publisher to be run.
It also allows scripts that are piped into the PowerShell standard input to be run even if they aren’t signed. This has some security implications, but you’ll need to allow this to run any PowerShell scripts.
You can learn more about execution policies here.
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
Initializing... Downloading... Extracting... Creating shim... Adding ~\scoop\shims to your path. Scoop was installed successfully! Type 'scoop help' for instructions.
This command downloads the PowerShell installation script and then passes the contents of the script to iex which is shorthand for Invoke-Expression.
Passing the contents to Invoke-Expression bypasses the signing check and runs the content of the script without leaving the installation files on your computer. This technique is similar to entry #8 on this list.
If you’re curious about the contents of the script, you can open up a web browser and go to the https://get.scoop.sh URL to see the contents.
Installing applications in scoop
Now you’re ready to open up the terminal and start installing apps.
To install curl:
scoop install curl
Installing '7zip' (18.05) [64bit] Loading 7z1805-x64.msi from cache Checking hash of 7z1805-x64.msi ... ok. Extracting 7z1805-x64.msi ... done. Linking ~\scoop\apps\7zip\current => ~\scoop\apps\7zip\18.05 Creating shim for '7z'. Creating shortcut for 7-Zip (7zFM.exe) '7zip' (18.05) was installed successfully! Installing 'curl' (7.61.0) [64bit] curl-7.61.0-win64-mingw.tar.xz (1.9 MB) [=====================================================================] 100% Checking hash of curl-7.61.0-win64-mingw.tar.xz ... ok. Extracting curl-7.61.0-win64-mingw.tar.xz ... done. Linking ~\scoop\apps\curl\current => ~\scoop\apps\curl\7.61.0 Creating shim for 'curl'. 'curl' (7.61.0) was installed successfully! 'curl' suggests installing 'cacert'.
When you install an application, Scoop does three things:
- Installs application into your home folder (C:\Users\USERNAME\scoop\apps).
- Uses a shims folder (C:\Users\USERNAME\scoop\shims) that links to all the applications in the apps folder.
- Adds the location of the shims folder to your system’s PATH. This allows applications installed by Scoop to run in the terminal without typing in the full path.
What else can Scoop do? You can update, uninstall, and search for applications using Scoop.
scoop help to get the full list.
Usage: scoop <command> [<args>] Some useful commands are: alias Manage scoop aliases bucket Manage Scoop buckets cache Show or clear the download cache checkup Check for potential problems cleanup Cleanup apps by removing old versions config Get or set configuration values create Create a custom app manifest depends List dependencies for an app export Exports (an importable) list of installed apps help Show help for a command home Opens the app homepage info Display information about an app install Install apps list List installed apps prefix Returns the path to the specified app reset Reset an app to resolve conflicts search Search available apps status Show status and check for new app versions uninstall Uninstall an app update Update apps, or Scoop itself virustotal Look for app's hash on virustotal.com which Locate a shim/executable (similar to 'which' on Linux)
Things to watch out for
After installing or updating an app look at the output. Sometimes it will recommend installing other dependencies, give you some additional information about the application, or even show that a problem occurred.
For example, when you install vim, it suggests that you install vimtutor. Vimtutor is a tutorial for vim but is not required for vim to operate.
Here’s a message I received while updating an application.
'itcode"' is not recognized as an internal or external command, operable program or batch file.
There’s a github issue about this problem. In it, some people seem to suggest running the scoop update command in powershell instead of cmd.
However, in my case, the application still worked normally despite having that message during update.
With Scoop, it’s easy to install CLI tools like grep or development environments like Node on Windows. Give it a try the next time you’re missing a tool that’s available on Linux or Mac.