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
相关产品推荐
相关产品推荐

