Invola-RestMethod URL,带反斜杠

时间:2016-05-23 16:41:02

标签: rest powershell

我在Invoke-RestMethod中找到了很多关于处理正斜杠的信息,但我似乎找不到任何关于处理反斜杠的信息。我知道他们应该避免,但我有一些限制在我无法改变信息的地方工作。这就是我想要做的事情:

Invoke-RestMethod "http://blah.blah.net/api/Reporting/$ServerName" -Method Get

它在其他实例上运行正常,但这次$ServerName将具有类似“Server1 \ SQLserv”的值。我尝试使用$ServerName -replace "\", "\\\"及其他变体,并在%5C(URL转义字符)中替换反斜杠。似乎没有什么工作。有人遇到(并解决了!)这个?

编辑:这是我得到的具体错误。请注意,它确实适用于我要查询的其他服务器,尽管该服务已被删除:

Invoke-RestMethod : The resource you are looking for has been removed, had its
name changed, or is temporarily unavailable.
At line:1 char:1
+ Invoke-RestMethod "http://blah.blah.net/api/Report ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

2 个答案:

答案 0 :(得分:1)

-Replace是一种正则表达式替换方法。您可以尝试使用字符串替换方法,该方法仅替换文字字符。

$ServerName.Replace('\','/')
Invoke-RestMethod "http://blah.blah.net/api/Reporting/$ServerName" -Method Get

现在,如果你还需要删除'SQLserv'字符串,我会这样做:

$Server = Split-Path -Path $ServerName -Parent
Invoke-RestMethod "http://blah.blah.net/api/Reporting/$Server" -Method Get

答案 1 :(得分:1)

作为Ansgar mentioned,这可能是服务器错误。不过,我建议您使用EscapeUriString函数来转义uri

$ServerName = "Server1\SQLserv"
$myUri = [System.Uri]::EscapeUriString("http://blah.blah.net/api/Reporting/$ServerName") 
Invoke-RestMethod $myUri -Method Get