我在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
答案 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