如何通过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
相关产品推荐
相关产品推荐

