我有一个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
答案 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