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

如何在Azure Automation PowerShell Runbook中加载Kusto NuGet包并执行查询

在Azure Automation PowerShell Runbook中加载Kusto客户端NuGet包并运行查询

方法一:上传自定义模块(推荐,稳定可靠)

这种方法将Kusto客户端程序集打包成Azure Automation可识别的模块,一次性上传后可重复使用:

  • 步骤1:准备Kusto客户端程序集
    下载对应版本的Microsoft.Azure.Kusto.Data NuGet包,解压后提取核心程序集,通常包括:

    • Microsoft.Azure.Kusto.Data.dll
    • Microsoft.Azure.Kusto.Common.dll
    • 依赖的基础dll(如Newtonsoft.Json.dll,具体根据包版本确定)
  • 步骤2:创建模块结构
    创建一个名为KustoClient的文件夹,将提取的dll放入其中。然后在本地PowerShell中执行以下命令生成模块清单文件(.psd1):

    New-ModuleManifest -Path ".\KustoClient\KustoClient.psd1" `
        -RootModule "Microsoft.Azure.Kusto.Data.dll" `
        -RequiredAssemblies @("Microsoft.Azure.Kusto.Common.dll") `
        -ModuleVersion "1.0.0" `
        -Description "Kusto Client Module for Azure Automation"
    
  • 步骤3:上传到Azure Automation
    将KustoClient文件夹压缩为Zip包(确保文件夹处于Zip根目录,而非直接压缩文件)。登录Azure门户,进入你的Automation账户:

    1. 左侧菜单选择模块 → 添加模块
    2. 上传生成的Zip包,等待模块导入完成
  • 步骤4:在Runbook中使用
    导入模块后,即可直接调用Kusto客户端类:

    # 可选:显式导入模块(若未自动加载)
    Import-Module KustoClient
    
    # 配置Kusto连接参数
    $clusterUri = "https://your-cluster.kusto.windows.net"
    $databaseName = "your-database"
    # 从Automation变量中读取服务主体密钥(提前存储敏感信息)
    $tenantId = "your-tenant-id"
    $clientId = "your-service-principal-client-id"
    $clientSecret = Get-AutomationVariable -Name "KustoServicePrincipalSecret"
    
    # 创建认证凭据与客户端
    $credential = [Microsoft.Azure.Kusto.Data.SdkClientCredentialsFactory]::CreateAadApplicationKeyCredentials($clientId, $clientSecret, $tenantId)
    $kustoClient = [Microsoft.Azure.Kusto.Data.KustoClientFactory]::CreateCslQueryProvider($clusterUri, $credential)
    
    # 运行Kusto查询
    $query = "StorageLogs | take 10"
    $queryResult = $kustoClient.ExecuteQuery($databaseName, $query)
    
    # 处理查询结果(转换为PowerShell对象)
    $resultTable = [Microsoft.Azure.Kusto.Data.DataReaderExtensions]::ToDataSet($queryResult).Tables[0]
    $resultObjects = foreach ($row in $resultTable.Rows) {
        $obj = [PSCustomObject]@{}
        foreach ($col in $resultTable.Columns) {
            $obj | Add-Member -MemberType NoteProperty -Name $col.ColumnName -Value $row[$col]
        }
        $obj
    }
    $resultObjects
    

方法二:Runbook内动态加载程序集(临时场景)

如果不想上传模块,可在Runbook运行时直接下载并加载NuGet包的程序集:

# 定义NuGet包信息
$nugetPackageName = "Microsoft.Azure.Kusto.Data"
$packageVersion = "11.0.0" # 替换为你需要的版本
$tempPath = Join-Path $env:TEMP $nugetPackageName

# 下载并解压NuGet包
if (-not (Test-Path $tempPath)) {
    Install-Package -Name $nugetPackageName -RequiredVersion $packageVersion -Destination $tempPath -Force -Scope CurrentUser
}

# 加载核心程序集
$assemblyPaths = Get-ChildItem -Path $tempPath -Filter "*.dll" -Recurse | Where-Object {
    $_.Name -in "Microsoft.Azure.Kusto.Data.dll", "Microsoft.Azure.Kusto.Common.dll", "Newtonsoft.Json.dll"
} | Select-Object -ExpandProperty FullName

foreach ($path in $assemblyPaths) {
    [System.Reflection.Assembly]::LoadFrom($path) | Out-Null
}

# 后续连接与查询逻辑同方法一
# ...

注意事项

  • 权限配置:确保Runbook使用的身份(如服务主体)拥有Kusto集群的查询权限(可在Kusto门户中配置角色)
  • 版本兼容性:选择与Azure Automation沙箱PowerShell版本兼容的Kusto客户端版本(建议使用较新的稳定版)
  • 密钥管理:敏感信息(如服务主体密钥)需存储在Azure Automation的变量或凭据资产中,避免硬编码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:38:27