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

PowerShell循环中实现Kusto单次认证的技术咨询

解决Kusto查询重复认证问题

你的现有代码其实已经实现了单次认证逻辑——CreateCslQueryProvider在初始化阶段就完成了AAD身份验证,后续循环内的ExecuteQuery调用会复用已建立的认证会话,不会重复触发登录提示。如果仍遇到重复认证的情况,或需要更适配自动化场景的无交互认证方式,可参考以下优化方案:

1. 确保QueryProvider仅初始化一次

确认$queryProvider的创建逻辑位于循环外部(你的代码已正确实现这一点),避免在每次循环中重复创建客户端实例,从而彻底避免重复认证操作。

2. 改用非交互式认证方式(适合自动化脚本)

如果脚本需要无人值守运行,推荐使用AAD服务主体认证替代交互式登录,彻底消除手动认证的需求:

[System.Reflection.Assembly]::LoadFrom("D:\microsoft.azure.kusto.tools.12.1.1\tools\net472\Kusto.Data.dll")

$clusterUrl = "<my URL here>"
$databaseName = "<databaseName>"
$tenantId = "<你的AAD租户ID>"
$clientId = "<服务主体应用ID>"
$clientSecret = "<服务主体密钥>"

# 构建服务主体认证的连接字符串,仅执行一次认证
$kcsb = [Kusto.Data.KustoConnectionStringBuilder]::new($clusterUrl, $databaseName)
$kcsb.WithAadApplicationKeyAuthentication($clientId, $clientSecret, $tenantId)

$queryProvider = [Kusto.Data.Net.Client.KustoClientFactory]::CreateCslQueryProvider($kcsb)

$array = "A", "B"

foreach ($item in $array) {
    $query = "WorkflowRunHistory | where Status != `"Succeeded`" | where WorkflowName == `"$item`" | limit 1"
    
    # 复用已认证的客户端执行查询
    $reader = $queryProvider.ExecuteQuery($query)
    $Materialize = [Kusto.Cloud.Platform.Data.ExtendedDataReader]::Materialize($reader)
    
    if ($Materialize.HasRows) {
        Write-Host "$item is good"
    }
}

3. 修复代码拼写错误

你的代码中wite-host是拼写错误,应改为Write-Host,否则会导致运行报错。

内容的提问来源于stack exchange,提问作者Joe Simon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:41:18