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

如何通过Bash脚本读取XLSX文件实现Azure AAD组添加SP操作

用Bash脚本读取XLSX文件将Service Principal添加到AAD组

Bash本身不原生支持读取XLSX格式文件,我们可以借助第三方工具将XLSX转换为可直接处理的CSV格式,再复用你原有脚本的核心逻辑。以下是具体实现方案:

步骤1:安装XLSX转CSV工具

推荐使用轻量工具xlsx2csv,在Debian/Ubuntu系统中执行以下命令安装:

sudo apt update && sudo apt install -y xlsx2csv

如果需要处理带复杂格式的XLSX文件,也可以用LibreOffice的命令行工具:

sudo apt install -y libreoffice-calc

步骤2:修改后的完整脚本

下面的脚本将读取XLSX文件,自动转换为CSV后处理,核心逻辑和你原有脚本一致:

#!/bin/bash
# 登录指定租户(按需启用对应环境)
az login --tenant ca64240a-78a0-4116-9504-eab6ead602b9 # DEV
az login --tenant ca64240a-78a0-4116-9504-eab6ead602b9 # TEST
# az login --tenant ca64240a-78a0-4116-9504-eab6ead602b9 # STAGE
# az login --tenant ca64240a-78a0-4116-9504-eab6ead602b9 # PROD

# 提示输入XLSX文件路径
read -p "Enter the path to the XLSX file for SP to Group Member : " xlsx_file

# 检查XLSX文件是否存在
if [ -f "$xlsx_file" ]; then
    # 使用xlsx2csv将XLSX转为CSV并读取(默认处理第一个工作表)
    # 如需指定工作表,可添加参数:--sheet "SheetName"
    while IFS=',' read -r GroupID ServicePrincipal Subscription; do
        # 跳过表头行(如果你的XLSX有表头,取消下面注释)
        # if [ "$GroupID" = "GroupID" ]; then continue; fi
        csv_row+=("$GroupID;$ServicePrincipal;$Subscription")
    done < <(xlsx2csv "$xlsx_file")

    # 处理Service Principals
    echo "Adding Service Principals to groups .... "

    for row in "${csv_row[@]}"; do
        IFS=';' read -ra ARRAY <<< "$row"
        groupId=${ARRAY[0]}
        sp_name=${ARRAY[1]}
        subscription=${ARRAY[2]}
        
        # 跳过空行
        if [ -z "$groupId" ] || [ -z "$sp_name" ] || [ -z "$subscription" ]; then
            continue
        fi
        
        spObjId=$(az ad sp list --display-name "$sp_name" --query '[0].id' --output tsv)
        if [ -n "$spObjId" ]; then
            # 设置订阅
            az account set --subscription "$subscription"
            # 添加SP到AAD组
            az ad group member add --group "$groupId" --member-id "$spObjId"
            if [ $? -eq 0 ]; then
                echo "Success: Service Principal '$sp_name' (Object ID: $spObjId) added to AAD Group '$groupId'."
            else
                echo "Failed: Could not add Service Principal '$sp_name' to AAD Group '$groupId'."
            fi
        else
            echo "Warning: Service Principal '$sp_name' not found."
        fi
    done
else
    echo "Error: XLSX file not found at the specified path."
fi

关键说明

  • 如果你的XLSX文件包含表头行,请取消脚本中# if [ "$GroupID" = "GroupID" ]; then continue; fi的注释,并将"GroupID"替换为你实际的表头内容。
  • 若需要处理XLSX中的特定工作表,修改xlsx2csv命令为:xlsx2csv --sheet "你的工作表名" "$xlsx_file"。
  • 如果你用LibreOffice替代xlsx2csv,可将转换命令替换为:libreoffice --headless --convert-to csv "$xlsx_file" && cat "${xlsx_file%.xlsx}.csv",处理完成后可删除临时生成的CSV文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:02:41