运行powershell -command时无法找到类型

时间:2018-04-16 08:36:52

标签: powershell bamboo

我有一个PowerShell脚本,我打算将其用作Bamboo中的部署步骤。打开PowerShell并使用./script.ps1运行脚本正常,但使用powershell.exe -command ./script.ps1失败并显示错误Unable to find type [Microsoft.PowerShell.Commands.WebRequestMethod]

直接从PowerShell运行脚本和使用powershell.exe -command有什么区别?我错过了什么?

有关问题的MWE:

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

1 个答案:

答案 0 :(得分:1)

我想这可能是PowerShell.exe本身的一个问题,我可以在PowerShell 2.0,3.0,4.0和5.0中重现这个问题。

如果在使用PowerShell.exe运行脚本时没有先运行任何其他命令,则无法使用命名空间Microsoft.PowerShell.Commands的类型约束,这是一个问题

我找到了两个解决方法。

一个。在脚本的开头运行无意义的cmdlet,例如

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

湾删除类型约束,它仍然正常工作

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