Powershell 在 tshark 中转义双引号时出现问题

问题描述 投票:0回答:1

在cmd中

tshark -r a.pcapng -Y "http.request.uri == \"/test.php\" || http.response"

在 Powershell 中使用 Escape

/
时出现错误。我尝试了
\ ` 
,但我无法让命令工作。

tshark -r 0.pcapng -Y "http.request.uri == `"\/test.php`" || http.response"
tshark: "`" was unexpected in this context.
    http.request.uri == `\/test.php` || http.response
                        ^
powershell tshark
1个回答
0
投票

相当于以下

cmd.exe
命令行:

:: cmd.exe (batch file)
tshark -r a.pcapng -Y "http.request.uri == \"/test.php\" || http.response"

is(类似地适用于对外部程序的所有调用):

  • PowerShell(核心)7 v7.3+

    # PowerShell 7.3+
    tshark -r a.pcapng -Y "http.request.uri == `"/test.php`" || http.response"
    
    • 也就是说,为了将

      "
      字符嵌入到
      "..."
      (可扩展)字符串
      中,您必须将它们转义为
      `"
      ,即使用所谓的 backtick,PowerShell 的 转义字符

      • 注意:由于您的调用不需要扩展(字符串插值),因此您可以切换到

        '...'
        (逐字)字符串,在这种情况下,嵌入的
        "
        不需要转义:

        # PowerShell 7.3+
        tshark -r a.pcapng -Y 'http.request.uri == "/test.php" || http.response'
        
    • 在幕后,当调用外部程序(例如

      tshark
      )时,PowerShell (.NET) 默认情况下会确保嵌入的
      "
      在构建进程命令行时转义为
      \"
      ,因为这就是形式Windows 上的 CLI 最广泛使用的转义。

      • 此行为由
        $PSNativeCommandArgumentPassing
        首选项变量
        控制,其在 Windows 上的默认值
        'Windows'
        会出于向后兼容性的目的进行选择性例外;您可以禁用这些异常 (
        'Standard'
        ),或者您可以选择使用旧的、损坏的行为 (
        'Legacy'
        ) - 请参阅下一点。
  • Windows PowerShell(旧版、Windows 附带、仅限 Windows 的 PowerShell 版本,最新且最后一个版本为 5.1)和 PowerShell (Core) 7 直至 v7 .2.x,不幸的是,外部程序的\

    转义必须
    手动执行,可能除了PowerShell自己的转义之外,由于长期存在的错误:

    # Windows PowerShell and PowerShell 7.2- tshark -r a.pcapng -Y "http.request.uri == \`"/test.php\`" || http.response" # With a verbatim string. tshark -r a.pcapng -Y 'http.request.uri == \"/test.php\" || http.response'
    
    
请参阅

此答案了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.