请求后变量powershell
我有一个使用请求后变量powershell,powershell,variables,escaping,string-interpolation,invoke-webrequest,Powershell,Variables,Escaping,String Interpolation,Invoke Webrequest,我有一个使用调用WebRequest的powershell post请求,但是当我包括?它认为这是一个变量,任何逃避的方法,这是我的代码 Invoke-WebRequest -UseBasicParsing -Method POST https://192.168.240.1:443/recive/$name?result=$sendback 它认为名称和后面的所有内容都是一个变量,我知道这一点,因为我可以在winddows terminal中看到它全部以绿色突出显示正如@Abraham Zi
调用WebRequest
的powershell post请求,但是当我包括?它认为这是一个变量,任何逃避的方法,这是我的代码
Invoke-WebRequest -UseBasicParsing -Method POST https://192.168.240.1:443/recive/$name?result=$sendback
它认为名称和后面的所有内容都是一个变量,我知道这一点,因为我可以在winddows terminal中看到它全部以绿色突出显示正如@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
正如@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
补充:
在第一个post变量名字符之前使用`
(倒勾,PowerShell的转义字符)始终是一个选项(在无引号和双引号参数中),有一种直接的方法来描述变量名(隐式):将名称括在{…}
中,例如${name}
:
写入输出https://192.168.240.1:443/receive/${name}?结果=$sendback
虽然像${name}?
这样的东西比$name`?
更麻烦,但它有两个明显的优点:
- 它更具可读性(视觉上更清晰)
- 它在所有情况下都能工作,而
-转义post name字符可能会意外地将该字符变成一个字符;e、 例如,假设变量`
后面应该跟文字$foo
:bar
-已断开,因为Write Output$foo`bar
变成了退格字符`b
-好的,多亏了写入输出${foo}条
附件{…}
可选阅读:为什么PowerShell在标识符(变量名)中允许
?
大多数脚本语言和编程语言不允许?
作为标识符(如变量名)的一部分,通常是因为?
是一个(具有特殊含义的字符)
尽管PowerShell中的?
也有特殊含义,但根据上下文,标识符(变量名、函数名、别名等)中的?
是允许的
一方面,PowerShell允许标识符包含不寻常的字符,这是值得称赞的,但对于这样的名称[1],需要{…}
附件是有意义的,因为对于其他不寻常的字符,尤其是
和-
:
#带“.”,{…}是必需的。
PS>${foo.bar}='bar'${foo.bar}#如果没有{…},.bar将是*属性访问*。
酒吧
遗憾的是,使用?
不需要{…}
:
#!!对于“?”,{…}不是必需的。
PS>$foo?='巴'$福?
酒吧
此行为会主动干扰v7.1+、?。
和?[]
例如,假设我想要对变量$var
的属性进行null条件访问:
#失败,因为“?”被视为变量名的一部分。
设置模式-版本3$var=获取项目foo*.txt$变量?长度
错误消息是无效操作:变量“$var?”无法检索,因为它尚未设置。
;也就是说,表达式$var?.Length
被解释为希望对名为$var?
的变量执行常规属性访问(
),而不是对变量$var
执行预期的空条件访问
{…}
在这种情况下是必需的,即使名称$var
本身不包含特殊字符:
#好的,由于{…}-但这应该不是必需的
设置模式-版本3$var=获取项目foo*.txt${var}?长度
考虑到这既违反直觉又麻烦,请求更改此行为。尽管这在技术上是一个突破性的变化,但分析表明,在现实世界中使用以?
结尾的变量名的情况非常罕见,相反,这种使用通常是错误的,即基于这样一种预期,即尾随的?
不是变量名的一部分
[1] 请注意,鉴于只有变量名,而不是函数,…,支持
{…}
附件,这将限制?
-包含变量名。补充:
在第一个post变量名字符之前使用`
(倒勾,PowerShell的转义字符)始终是一个选项(在无引号和双引号参数中),有一种直接的方法来描述变量名(隐式):将名称括在{…}
中,例如${name}
:
写入输出https://192.168.240.1:443/receive/${name}?结果=$sendback
虽然像${name}?
这样的东西比$name`?
更麻烦,但它有两个明显的优点:
- 它更具可读性(视觉上更清晰)
- 它在所有情况下都能工作,而
-转义post name字符可能会意外地将该字符变成一个字符;e、 例如,假设变量`
后面应该跟文字$foo
:bar
-已断开,因为Write Output$foo`bar
变成了退格字符`b
-好的,多亏了写入输出${foo}条
附件{…}
可选阅读:为什么PowerShell在标识符(变量名)中允许
?
大多数脚本和编程语言不允许?