动态主机的Invoke-WebRequest失败

时间:2015-10-08 10:24:21

标签: powershell httpwebrequest

我想使用参数定义的主机执行Web请求:

8

Powershell抱怨此错误:

  

Invoke-WebRequest:无法绑定参数' Uri'。无法转换价值" http:///service"输入" System.Uri"。错误:"无效的URI:无法解析主机名。"

如何让PowerShell正确理解我的网址?

2 个答案:

答案 0 :(得分:2)

PowerShell根本无法解析您网址中的变量。您正尝试在URI http://$serverHost:1234/service处查询服务,但这不起作用。你可以做到

$serverHost = "myHost"
$service = "http://$serverHost`:1234/service"
Invoke-WebRequest $service -Method Get

(请注意,为了逃避冒号,需要使用Backtick`。

答案 1 :(得分:2)

冒号与变量一起使用时,是该变量的setting the scope的PowerShells方式。在调用$env:path等提供程序时也会使用它。这就是PowerShell在这里看到的。它认为您尝试在1234范围内调用变量$serverHost

这就是为什么在你的错误中它说它无法找到主机http:///service,因为之前描述的变量不存在。

Backtick逃脱角色会起作用。以及使用格式运算符或花括号或子表达式。在这种情况下,所有这些都旨在将冒号与变量隔离开来。

("http://{0}:1234/service" -f $serverHost)
"http://${serverHost}:1234/service"
"http://$($serverHost):1234/service"

其中任何内容都与Invoke-WebRequest调用内联。确保在-f调用周围保留括号。