-
Notifications
You must be signed in to change notification settings - Fork 0
/
Restart_Devices_in_Mobile_Group.sh
73 lines (58 loc) · 2.15 KB
/
Restart_Devices_in_Mobile_Group.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/bin/bash
#Matthew Prins 2023
#https://github.com/MatthewPrins/Jamf/
#Restart all items in a particular mobile group in Jamf
#Minimum permissions:
#Objects:
#Mobile Devices (Create, Read)
#Smart Mobile Device Groups (Read)
#Static Mobile Device Groups (Read)
#Actions
#Send Mobile Device Restart Device Command
#Code for getting token from https://developer.jamf.com/jamf-pro/docs/jamf-pro-api-overview
#Jamf credentials
username="xxxxxx"
password="xxxxxx"
url="https://xxxxxx.jamfcloud.com"
#Group ID number -- found in URL on group's page
groupid="44"
#Token variable declarations
bearerToken=""
tokenExpirationEpoch="0"
getBearerToken() {
response=$(curl -s -u "$username":"$password" "$url"/api/v1/auth/token -X POST)
bearerToken=$(echo "$response" | plutil -extract token raw -)
tokenExpiration=$(echo "$response" | plutil -extract expires raw - | awk -F . '{print $1}')
tokenExpirationEpoch=$(date -j -f "%Y-%m-%dT%T" "$tokenExpiration" +"%s")
}
checkTokenExpiration() {
nowEpochUTC=$(date -j -f "%Y-%m-%dT%T" "$(date -u +"%Y-%m-%dT%T")" +"%s")
if [[ tokenExpirationEpoch -gt nowEpochUTC ]]
then
echo "Token valid until the following epoch time: " "$tokenExpirationEpoch"
else
echo "No valid token available, getting new token"
getBearerToken
fi
}
#get token
checkTokenExpiration
#pull XML data from Jamf, change it to a csv list
#curl: pull XML data based on group ID
#xmllint: keep only the mobile device IDs from the XML (e.g. <id>456</id>)
#tr: delete whitespace
#1st sed: delete "<id>"s
#2nd sed: replace "</id>"s with commas
#3rd sed: delete extra final comma
echo $(curl -s -H "Authorization: Bearer ${bearerToken}" "Accept: application/xml" \
$url/JSSResource/mobiledevicegroups/id/$groupid )
csv=$(curl -s -H "Authorization: Bearer ${bearerToken}" "Accept: application/xml" \
$url/JSSResource/mobiledevicegroups/id/$groupid \
| xmllint --xpath "//mobile_device/id" - \
| tr -d '[:space:]' \
| sed 's/<id>//g' \
| sed 's/<\/id>/,/g' \
| sed 's/.$//')
#Restart all devices in csv list
curl -s -X POST -H "Authorization: Bearer ${bearerToken}" "Accept: application/xml" \
$url/JSSResource/mobiledevicecommands/command/RestartDevice/id/$csv