The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet
Asked Answered
M

6

31

I've got problem with executing Invoke-WebRequest cmdlet. I read that ~100% case of that scenario is PS version lower than 3, but it's not my case:

Name                           Value
----                           -----
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
CLRVersion                     4.0.30319.34011
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10208.0
PSVersion                      5.0.10208.0
SerializationVersion           1.1.0.1

I can add that I'm using Windows 10 IoT Core version of OS. In fact my main purpose is execution of simple web request, but I am interested why this cmdlet is not working, especially if more of them won't be ;/ I suppose it can be some windows feature like switch to turn on, but its just my guess.

Update

As far as I compared available cmdlets for certain modules, and preloaded assemblies between my regular system and an IoT version, it looks like the latter version is cut somehow, but I still didn't see any docs for that.

Mufi answered 31/8, 2015 at 16:17 Comment(9)
Just curious, is Invoke-RestMethod missing too?Carduaceous
@Carduaceous What are you thinking?Iolaiolande
I found another post about a missing commandlet: measure-command. If that's missing for you as well, maybe IoT is stripped down without documentation.Whish
Those are all part of the module Microsoft.PowerShell.Utility. Wonder if that is missing then or incomplete. Do you see that in the list when you try Get-Module? Although Get-Host is in there where the info from the OP would have come from. Wonder if it is present but limitedIolaiolande
@Iolaiolande yeah I noticed the same thing, that it's in that module but it seems really unlikely that the entire module would be missing. But Invoke-RestMethod uses the same underlying .Net object to do its dirty work, so I was wondering if it might too be missing.Carduaceous
Answering your questions: 1. Invoke-RestMethod is missing too 2. Output of Get-Module says that Microsoft.PowerShell.Utility in version 3.1.0.0 is loaded FYI Get-Command Invoke-WebRequest | fl * ends up with same errorMufi
Does this work: New-Object System.Net.WebClient?Carduaceous
I tried direct access to .Net commponents but it also fails. What is more app written in C# targeting .Net is limitted in the same manner. As far as I searched, IoT has very limitted API which is mainly UWP.Mufi
@DawidKomorowski yeah it seems obvious at this point that that will be the case, but I'd sure love to see documentation on what is and isn't available. That seems awfully important!Carduaceous
S
14

I had this issue on a Windows Server 2008 R2 server, because it was running PowerShell v2. Upgrading to v4 fixed the issue.

Windows Management Framework 4.0 (includes PowerShell 4.0)

As of v5, Invoke-WebRequest is still documented.

Check your version with:

$PSVersionTable.PSVersion
Syphilology answered 15/4, 2016 at 13:16 Comment(2)
Although this is a common problem and answer, powershell 5 core seems to have this removedTessera
Oh man! Now I learn about that and it's too late to download any of this. All gone!Skive
A
7

Trying to create the request in the same way I would do it for PS version 2 (using .net library instead of cmdlet) doesn't work either...

$request = [System.Net.WebRequest]::Create("https://google.com")
$request.Method = "GET"
[System.Net.WebResponse]$response = $request.GetResponse()
Alisha answered 8/9, 2015 at 20:49 Comment(1)
Did you get this to work on PS v2 ?Mantilla
T
3

This appears to be removed in PowerShell Core.

I am searching for why this doesn't work on Docker for Windows running on Nano Server for Windows 2016 and your findings match mine.

Tessera answered 10/9, 2016 at 20:41 Comment(0)
Z
2

Though the PowerShell version and everything else was good at my end, I was unable to download the code from the desired repo. So, I've executed the following command first to satisfy the TLS version, and then I have executed my desired command to download the latest version of the githubActions runner.

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri 
https://github.com/actions/runner/releases/download/v2.165.2/actions-runner
-win-x64-2.165.2.zip -OutFile actions-runner-win-x64-2.165.2.zip
Zuckerman answered 7/3, 2020 at 15:39 Comment(0)
D
0

Invoke-WebRequest has been stripped from PowerShell 5.

Here's an implementation of a function called Invoke-FastWebRequest that works just like the old Invoke-WebRequest in PowerShell 5: https://github.com/cloudbase/unattended-setup-scripts/blob/master/FastWebRequest.psm1

Dratted answered 23/11, 2015 at 7:11 Comment(3)
What do you mean by "Invoke-WebRequest has been stripped from PowerShell 5"? It worked fine in PowerShell 5.1.16299.785 when I tried it (Windows 10). The documentation has "Beginning with PowerShell 6.0.0 Invoke-WebRequest supports basic parsing only.".Vascular
Removed from PowerShell Core (but that seems to start at version 6)?Vascular
@PeterMortensen Could you please shortly explain where exactly the wiki reference you gave states that Invoke-WebRequest has been removed from PowerShell Core? I could not find such a statement there.Partnership
M
0

Using -UseBasicParsing option in the command works. The following is part of the command's documentation

-UseBasicParsing

Indicates that the cmdlet uses the response object for HTML content without Document Object Model (DOM) parsing.

This parameter is required when Internet Explorer is not installed on the computers, such as on a Server Core installation of a Windows Server operating system.

Marta answered 6/6, 2017 at 7:3 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.