POST请求变量powershell



我有一个使用Invoke-WebRequest的powershell发布请求,但当我包含?它认为这都是一个变量,任何逃避的方法,这是我的代码

Invoke-WebRequest -UseBasicParsing -Method POST https://192.168.240.1:443/recive/$name?result=$sendback

它认为名称和后面的一切都是一个变量,我知道这一点,因为我可以在windwindows终端中看到所有突出显示的绿色

补充jswanson的有效解决方案:

当在第一个变量后名称字符之前使用`(一个反勾号,PowerShell的转义字符(始终是一个选项时(在无引号和双引号的参数中(,有一种直接的方法可以在(隐式(可扩展字符串中描绘变量名将名称封装在{...}中,例如${name}:

Write-Output https://192.168.240.1:443/receive/${name}?result=$sendback

虽然像${name}?这样的东西比$name`?更难键入,但它有两个明显的优点

  • 它可读性更强(视觉上与众不同(
  • 它适用于所有的情况,而`-转义post-name字符可能会意外地将该字符变成转义序列;例如变量$foo后面应该跟文字bar
    • Write-Output $foo`bar-已损坏,因为`b变成退格字符
    • Write-Output ${foo}bar-正常,感谢{...}外壳

可选阅读:为什么PowerShell允许在标识符(变量名(中使用?

大多数脚本和编程语言都不允许?成为变量名等标识符的一部分,这通常是因为?是元字符(具有特殊含义的字符(。

尽管PowerShell中的?也有特殊含义,但根据上下文,允许标识符(变量名、函数名、别名等(中的?

一方面,PowerShell允许标识符包含异常字符,这是值得称赞的,但对于此类名称[1],需要{...}外壳是有意义的,这确实是其他异常字符所需要的,尤其是.-:

# With ".", {...} is required.
PS> ${foo.bar} = 'bar'; ${foo.bar} # Without {...}, .bar would be a *property access*.
bar

遗憾的是,使用?不需要{...}

# !! With "?", {...} is NOT required.
PS> $foo? = 'bar'; $foo?
bar

此行为会主动干扰PowerShell(Core(v7.1+null条件运算符?.?[]

例如,假设我希望对变量$var:的属性进行空条件访问

# FAILS, because "?" is considered part of the variable name.
Set-StrictMode -Version 3; $var = Get-Item foo*.txt; $var?.Length

错误消息为InvalidOperation: The variable '$var?' cannot be retrieved because it has not been set.;也就是说,表达式$var?.Length被解释为希望对名为$var?-的变量执行常规属性访问(.(,而不是对变量$var执行预期的null条件访问。

{...}在这种情况下是必需的,即使名称$var本身不包含特殊字符

# OK, due to {...} - but this shouldn't be necessary
Set-StrictMode -Version 3; $var = Get-Item foo*.txt; ${var}?.Length

考虑到这是违反直觉和繁琐的,GitHub提案#11379要求改变这种行为。尽管从技术上讲,这是一个突破性的变化,但分析表明,在现实世界中,在?中使用以结尾的变量名的情况非常罕见,相反,这种使用通常是错误的,即基于对尾随?而不是变量名的一部分的期望。


[1]注意,给定只有变量名称,而不是函数。。。,支持{...}外壳,这将限制包含变量名称的?

正如@Abraham Zinala所暗示的,通用的Backtick(`(是PowerShell中的转义字符。您可以通过更改反勾号在中的位置来验证效果

echo https://192.168.240.1:443/recive/$name?result=$sendback

我相信你要找的是这个

echo https://192.168.240.1:443/recive/$name`?result=$sendback

相关内容

  • 没有找到相关文章