I have a PowerShell script which I intend to use as a deployment step in Bamboo. Opening PowerShell and running the script with ./script.ps1
works fine, but using powershell.exe -command ./script.ps1
fails with error Unable to find type [Microsoft.PowerShell.Commands.WebRequestMethod]
.
What is the difference between running the script directly from PowerShell and by using powershell.exe -command
? What am I missing?
MWE for the issue in question:
function Test-RestMethod {
param([string]$Uri, [Microsoft.PowerShell.Commands.WebRequestMethod] $Method = 'Get')
$result = Invoke-RestMethod $uri -Method $Method
return $result
}
Test-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ -Method 'Get' | Format-Table -Property Title, pubDate
I guess it can be an issue with PowerShell.exe itself, I can reproduce the issue in PowerShell 2.0, 3.0, 4.0 and 5.0.
It's an issue that you can't use type constraint of namespace Microsoft.PowerShell.Commands if you don't run any other command first when you are running your script by using PowerShell.exe
I found two workarounds for you.
a. Run a senseless cmdlet in the beginning of your script, for example
Start-Sleep -Milliseconds 1
function Test-RestMethod {
param([string]$Uri, [Microsoft.PowerShell.Commands.WebRequestMethod] $Method = 'Get')
$result = Invoke-RestMethod $uri -Method $Method
return $result
}
Test-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ -Method 'Get' | Format-Table -Property Title, pubDate
b. Remove the type constraint, it's still working fine
function Test-RestMethod {
param([string]$Uri, $Method = 'Get')
$result = Invoke-RestMethod $uri -Method $Method
return $result
}
Test-RestMethod -Uri https://blogs.msdn.microsoft.com/powershell/feed/ -Method 'Get' | Format-Table -Property Title, pubDate
To make a type available, if PowerShell does not load it already automatically, just add the corresponding module or assembly manually by using Import-Module
or Add-Type
. In your case, you have to load an Assembly as can be derived from the docs (Microsoft.PowerShell.Commands.WebRequestMethod
):
Add-Type -AssemblyName Microsoft.PowerShell.Commands.Utility
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With