使用动态主机调用 WebRequest 失败

Invoke-WebRequest with dynamic host fails

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

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

Powershell 抱怨此问题并出现以下错误:

Invoke-WebRequest : Cannot bind parameter 'Uri'. Cannot convert value "http:///service" to type "System.Uri". Error: "Invalid URI: The hostname could not be parsed."

我需要做什么才能让 PowerShell 正确解释我的 URL?

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

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

(请注意,需要反引号 ` 才能转义冒号)。

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

这就是为什么在您的错误中它指出找不到主机 http:///service 因为前面描述的那个变量不存在。

用于转义字符的反引号会起作用。以及使用格式运算符或大括号或子表达式。在这种情况下,所有设计都是为了将​​冒号与变量隔离开来。

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

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