如何在 aws-cli 的 powershell 中转义反斜杠和引号

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

嗨,我正在使用 Windows powershell 脚本:

$startDate = "2024-11-07T11:00:00Z"
$endDate = "2024-11-07T11:40:00Z"

$startTimestamp = [int]([DateTimeOffset]::Parse($startDate).ToUnixTimeSeconds())
$endTimestamp = [int]([DateTimeOffset]::Parse($endDate).ToUnixTimeSeconds())
  
$logGroup = "logGroup"
$queryString = "fields @log, @timestamp, @message | limit 10"

$queryResult = aws logs start-query --log-group-name "$logGroup" --start-time $startTimestamp --end-time $endTimestamp --query-string "$queryString" --region us-east-1 | ConvertFrom-Json

$queryId = $queryResult.queryId
Write-Output "Query ID: $queryId"

$queryResults = aws logs get-query-results --query-id $queryId --region us-east-1

Write-Output "Resultados de la consulta:"
Write-Output $queryResults

如果我执行脚本,它可以工作,但我想要的是使用此查询来获取 httpCodes 的计数:

fields @log, @timestamp, @message
| filter @message like "\"httpCode\":4"
| parse @message '"message":"*' as Message
| parse Message '\"httpCode\":*,' as httpCode
| stats count() as CodeCount by httpCode
| sort CodeCount desc
| display CodeCount, httpCode
| limit 10

但我不确定如何转义特殊字符,以便 aws-cli 可以使用它,我尝试了反引号 (`),但它不起作用,我收到了类似的错误

调用时发生错误(MalformedQueryException) StartQuery 操作:发现意外符号:位于第 1 行和位置 172

问候!

powershell aws-cli
1个回答
0
投票

让我们从您尝试传递的字符串的简化、逐字版本开始:

注:

  • 我只关注字符串中嵌入的"字符的
    转义
    方面 - 我无法判断您的查询是否正确(例如,
    @message
    Message
    ,额外的
    "
    )在
    '"message":"*'
    中,我在下面省略了)。
fields @log, @timestamp, @message
| filter @message like "\"httpCode\":4"
| parse @message '"message":*' as Message

您需要将字符串作为参数传递给Windows PowerShell中的外部程序(遗留的、随Windows附带的、仅限Windows的PowerShell版本,其最新和最后一个版本为5.1),以及 PowerShell (Core) 7 直至版本 7.2.x

  • 必须首先满足PowerShell的

    自己的语法要求...

  • ...

    and - 不幸的是 - 必须嵌入 "

     字符(以及特定情况下的 
    \
     字符) 
    \
     - 转义(此要求不再适用于 PowerShell 
    v7.3+;请参阅 this 答案 了解背景信息)。

因此,使用逐字记录

此处字符串以避免需要特定于 PowerShell 的转义:

# In Windows PowerShell and PowerShell (Core) up to v7.2.x $queryString = @' fields @log, @timestamp, @message | filter @message like \"\\\"httpCode\\\":4\" | parse @message '\"message\":*' as Message '@
    
© www.soinside.com 2019 - 2024. All rights reserved.