When Curl isn't Curl

Curl in PowerShell and Curl elsewhere are not the same thing.

Published: July 7, 2019

Scenario

Working through the Getting Started guide for Event Store.

Problem

Running this in PowerShell 5.1:

curl -i -d "@event.json" "http://127.0.0.1:2113/streams/newstream" -H "Content-Type:application/vnd.eventstore.events+json"

Gave me:

Invoke-WebRequest : Missing an argument for parameter 'InFile'. Specify a parameter of type 'System.String' and try again.

But why? Curl is set up properly (it’s not telling me curl : The term 'curl' is not recognized . . .)

Explanation

By default, curl in PowerShell does not use Curl (even if Curl is installed, added to your PATH and so on). Instead, curl is an alias of Invoke-WebRequest. This means that if you run curl in PowerShell with options that aren’t supported by Invoke-WebRequest, you get the error above.

Solution

There are two options:

The StackOverflow answer linked above suggests removing curl as an alias:

Remove-item alias:curl

I decided I didn’t want to mess with PowerShell’s commands and aliases, so I used Git Bash to run my Curl commands instead.