You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过PowerShell向Defender for Endpoint API的高级搜寻查询传递变量

解决方法

问题核心原因:直接引用变量不生效,是因为Kusto查询中字符串用单引号包裹时,PowerShell的字符串插值规则不会解析单引号内部的变量,同时未转义的特殊字符也会导致查询语法错误。有两种常用的实现方案:

方案1:PowerShell字符串插值(适合简单场景)

提前对变量的特殊字符做转义,再插入到Kusto查询语句中即可,示例代码如下:

# 定义要传入的PowerShell外部变量
$targetVendorPrefix = "b"

# 对变量中的单引号做转义,避免破坏Kusto查询语法
$escapedPrefix = $targetVendorPrefix.Replace("'", "''")

# 构造Kusto查询,直接插入转义后的变量
$query = "let letter = '$escapedPrefix';
DeviceTvmSoftwareInventory
| where SoftwareVendor startswith letter
| project DeviceName, OSPlatform, SoftwareVendor, SoftwareName, SoftwareVersion"

这种方法实现简单,适合变量来源可控的自用脚本场景。

方案2:参数化查询(更安全,推荐生产环境使用)

Microsoft Defender for Endpoint的高级搜寻API原生支持参数化查询,不需要手动处理转义,也完全规避Kusto注入风险,示例代码如下:

# 定义要传入的PowerShell外部变量
$targetVendorPrefix = "b"

# 构造API请求体,直接将变量作为参数传入
$apiRequestBody = @{
    Query = "DeviceTvmSoftwareInventory
| where SoftwareVendor startswith letter
| project DeviceName, OSPlatform, SoftwareVendor, SoftwareName, SoftwareVersion"
    Parameters = @(
        @{
            Name = "letter"
            Type = "string"
            Value = $targetVendorPrefix
        }
    )
} | ConvertTo-Json

# 后续调用API时直接传入$apiRequestBody即可

调用API时使用上述构造的请求体,不需要在Kusto查询内单独写let语句定义变量,参数会自动传入查询上下文。


内容的提问来源于stack exchange,提问作者Planet-9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:15:02