Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请求后变量powershell_Powershell_Variables_Escaping_String Interpolation_Invoke Webrequest - Fatal编程技术网

请求后变量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在标识符(变量名)中允许

大多数脚本和编程语言不允许