POST 请求变量 powershell
POST request variables powershell
我有一个使用 Invoke-WebRequest
的 powershell post 请求,但是当我包含 ?它认为它是一个变量,任何逃避它的方法,这是我的代码
Invoke-WebRequest -UseBasicParsing -Method POST https://192.168.240.1:443/recive/$name?result=$sendback
它认为名称和后面的所有内容都是一个变量,我知道这一点,因为我可以在 windows 终端中看到它全部突出显示为绿色
正如@Abraham Zinala 所暗示的那样,多功能反引号 (`) 是 PowerShell 中的转义字符。您可以通过更改此行中反引号的位置来验证效果
echo https://192.168.240.1:443/recive/$name?result=$sendback
我相信你要找的就是这个
echo https://192.168.240.1:443/recive/$name`?result=$sendback
补充:
虽然在第一个 post-variable-name 字符之前使用 `
(反引号,PowerShell 的转义字符)始终是一个选项(在不带引号和双引号的参数中),但有一个直接方式在(隐式)expandable strings中划定变量名:将名称括在{...}
中,例如${name}
:
Write-Output https://192.168.240.1:443/receive/${name}?result=$sendback
虽然 ${name}?
之类的内容比 $name`?
更难打字,但它有两个明显的 优点 :
- 它更具可读性(视觉上不同)。
- 它适用于 所有 情况,而
`
-转义 post-name 字符可能会意外将该字符变成 escape sequence ;例如,假设变量 $foo
后面应该跟文字 bar
:
Write-Output $foo`bar
- 损坏,因为 `b
变成了 退格字符 .
Write-Output ${foo}bar
- 好的,感谢 {...}
外壳
可选阅读:为什么PowerShell允许在标识符(变量名)中使用?
?
大多数脚本和编程语言不允许 ?
作为变量名等标识符的一部分,通常是因为 ?
是 metacharacter(具有特殊含义的字符)。
尽管 ?
在 PowerShell 中也有特殊含义,根据上下文,?
在标识符(变量名、函数名、别名...)中 是 允许。
虽然一方面 PowerShell 允许包含不寻常字符的标识符值得称赞,但对于此类名称需要 {...}
附件 是有意义的[1] - other 不寻常的字符确实已经需要,特别是 .
和 -
:
# 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-conditional operators、?.
和 ?[]
。
例如,假设我想要空条件访问变量 $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
.
的预期空条件访问
{...}
在这种情况下 是必需的 即使名称 $var
本身 不是 [=120] =]包含特殊字符:
# OK, due to {...} - but this shouldn't be necessary
Set-StrictMode -Version 3; $var = Get-Item foo*.txt; ${var}?.Length
鉴于此 既违反直觉又麻烦 ,GitHub proposal #11379 要求更改此行为。尽管这在技术上是一个 重大的 变化,但分析表明,在 ?
中变量名称 ending 的实际使用非常罕见而且,相反,这种使用通常是 错误的 ,即基于这样的预期,即尾随 ?
不是 的一部分变量名。
[1] 请注意,鉴于只有 变量 名称,而不是函数,...,支持 {...}
封装,这将限制?
-包含变量的名称。
我有一个使用 Invoke-WebRequest
的 powershell post 请求,但是当我包含 ?它认为它是一个变量,任何逃避它的方法,这是我的代码
Invoke-WebRequest -UseBasicParsing -Method POST https://192.168.240.1:443/recive/$name?result=$sendback
它认为名称和后面的所有内容都是一个变量,我知道这一点,因为我可以在 windows 终端中看到它全部突出显示为绿色
正如@Abraham Zinala 所暗示的那样,多功能反引号 (`) 是 PowerShell 中的转义字符。您可以通过更改此行中反引号的位置来验证效果
echo https://192.168.240.1:443/recive/$name?result=$sendback
我相信你要找的就是这个
echo https://192.168.240.1:443/recive/$name`?result=$sendback
补充
虽然在第一个 post-variable-name 字符之前使用 `
(反引号,PowerShell 的转义字符)始终是一个选项(在不带引号和双引号的参数中),但有一个直接方式在(隐式)expandable strings中划定变量名:将名称括在{...}
中,例如${name}
:
Write-Output https://192.168.240.1:443/receive/${name}?result=$sendback
虽然 ${name}?
之类的内容比 $name`?
更难打字,但它有两个明显的 优点 :
- 它更具可读性(视觉上不同)。
- 它适用于 所有 情况,而
`
-转义 post-name 字符可能会意外将该字符变成 escape sequence ;例如,假设变量$foo
后面应该跟文字bar
:Write-Output $foo`bar
- 损坏,因为`b
变成了 退格字符 .Write-Output ${foo}bar
- 好的,感谢{...}
外壳
可选阅读:为什么PowerShell允许在标识符(变量名)中使用?
?
大多数脚本和编程语言不允许 ?
作为变量名等标识符的一部分,通常是因为 ?
是 metacharacter(具有特殊含义的字符)。
尽管 ?
在 PowerShell 中也有特殊含义,根据上下文,?
在标识符(变量名、函数名、别名...)中 是 允许。
虽然一方面 PowerShell 允许包含不寻常字符的标识符值得称赞,但对于此类名称需要 {...}
附件 是有意义的[1] - other 不寻常的字符确实已经需要,特别是 .
和 -
:
# 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-conditional operators、?.
和 ?[]
。
例如,假设我想要空条件访问变量 $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
.
{...}
在这种情况下 是必需的 即使名称 $var
本身 不是 [=120] =]包含特殊字符:
# OK, due to {...} - but this shouldn't be necessary
Set-StrictMode -Version 3; $var = Get-Item foo*.txt; ${var}?.Length
鉴于此 既违反直觉又麻烦 ,GitHub proposal #11379 要求更改此行为。尽管这在技术上是一个 重大的 变化,但分析表明,在 ?
中变量名称 ending 的实际使用非常罕见而且,相反,这种使用通常是 错误的 ,即基于这样的预期,即尾随 ?
不是 的一部分变量名。
[1] 请注意,鉴于只有 变量 名称,而不是函数,...,支持 {...}
封装,这将限制?
-包含变量的名称。