欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

jamf 获取所有未分组的电脑 自己亲自做的 有大用 有大大用 有大大大用

#!/bin/bash

echo "start"

USERNAME="11111111"
PASSWORD="mypassword2"
token=$(echo -n "11111111:mypassword2" | base64)
JSON=$(curl -X POST -H "Authorization: Basic ${token}" -H "Content-Type: application/json" --insecure "${JSS_URL}/uapi/auth/tokens")
TOKEN=$(echo "${JSON}" | jq -r '.token')
echo $TOKEN
echo "step 1:."

# 获取所有电脑的 JSON数据,并提取出我们关心的字段:id, name, serialNumber
ALL_COMPUTERS_JSON=$(curl  -X GET  -H "Authorization: Bearer ${TOKEN}" -H "Accept: application/json" "${JSS_URL}/JSSResource/computers/subset/basic")
echo "ALL"
echo "${ALL_COMPUTERS_JSON}"

# 使用 jq 创建一个简单的 ID-名称 映射表,方便后续查找
echo $ALL_COMPUTERS_JSON | jq -r '.computers[] | [.id, .name, .serialNumber] | @csv' > /tmp/all_computers.csv

echo "获取成功!所有电脑列表已保存到 /tmp/all_computers.csv"

echo "step 2 :获取已分组电脑列表..."

# 获取所有电脑群的ID和名称
#ALL_GROUPS_JSON=$(curl -s -u "$USERNAME:$PASSWORD" -H "Accept: application/json" "${JSS_URL}/JSSResource/computergroups")
ALL_GROUPS_JSON=$(curl  -X GET  -H "Authorization: Bearer ${TOKEN}" -H "Accept: application/json" "${JSS_URL}/JSSResource/computergroups")

# 提取出所有静态组的ID (注意:智能组 type: "smart", 静态组 type: "static")
STATIC_GROUP_IDS=$(echo $ALL_GROUPS_JSON | jq -r '.computer_groups[] | select(.is_smart == false) | .id')

echo "开始遍历所有静态组,收集已分配的电脑ID..."
# 创建一个空文件来存储所有已分组电脑的ID
GROUPED_IDS_FILE="/tmp/grouped_computer_ids.txt"
> $GROUPED_IDS_FILE # 清空文件

for GROUP_ID in $STATIC_GROUP_IDS; do
    echo "正在处理组ID: $GROUP_ID"
    # 获取特定组的详细信息
    #GROUP_JSON=$(curl -s -u "$USERNAME:$PASSWORD" -H "Accept: application/json" "${JSS_URL}/JSSResource/computergroups/id/${GROUP_ID}")
    GROUP_JSON=$(curl  -X GET  -H "Authorization: Bearer ${TOKEN}" -H "Accept: application/json"  "${JSS_URL}/JSSResource/computergroups/id/${GROUP_ID}")
    # 提取这个组里所有电脑的ID,并追加到文件中
    echo $GROUP_JSON | jq -r '.computer_group.computers[]?.id' >> $GROUPED_IDS_FILE
done

# 对收集到的所有ID进行排序和去重(因为一台电脑可以在多个组里)
sort -u $GROUPED_IDS_FILE -o $GROUPED_IDS_FILE
echo "已收集所有已分组电脑ID(已去重),保存到 $GROUPED_IDS_FILE"

echo "step 3 :对比找出未分组的电脑..."

# 从所有电脑列表中提取出ID
ALL_IDS_FILE="/tmp/all_computer_ids.txt"
echo $ALL_COMPUTERS_JSON | jq -r '.computers[].id' | sort > $ALL_IDS_FILE

# 使用 grep 找出在 ALL_IDS_FILE 中但不在 GROUPED_IDS_FILE 中的行
# 即:未分组的电脑ID
UNGROUPED_IDS_FILE="/tmp/ungrouped_computer_ids.txt"
grep -v -F -f $GROUPED_IDS_FILE $ALL_IDS_FILE > $UNGROUPED_IDS_FILE

echo "对比完成!"


echo "step 4 :生成最终报告..."

FINAL_REPORT="/tmp/ungrouped_computers_report.csv"
echo "电脑ID,电脑名称,序列号" > $FINAL_REPORT # CSV 表头

# 读取未分组电脑ID文件,逐行处理
while read -r COMPUTER_ID; do
    # 从第一步生成的详细列表中查找这个ID对应的信息
    grep "^$COMPUTER_ID," /tmp/all_computers.csv >> $FINAL_REPORT
done < "$UNGROUPED_IDS_FILE"

echo "================================"
echo "报告生成完毕!!"
echo "未分组的电脑总数为: $(wc -l < $UNGROUPED_IDS_FILE)"
echo "详细报告请见: $FINAL_REPORT"
echo "================================"



普通分类: