Last active
August 8, 2020 15:21
-
-
Save kdrwygvh/625e947c66d3d51333c79c2931c26a9b to your computer and use it in GitHub Desktop.
Jamf Pro Extension Attribute to generate random numbers for managed Macs. Macs can be grouped based on their random number range to achieve some random spread in the distribution of a given Jamf Pro object
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?><extensionAttribute> | |
<displayName>Randomized Clinical Trial Number</displayName> | |
<description/> | |
<dataType>number</dataType> | |
<scriptContentsMac>#!/usr/bin/env zsh | |
| |
preferenceDomain="" | |
if [[ "$preferenceDomain" = "" ]]; then | |
preferenceDomain="com.github" | |
fi | |
| |
seedNumberRotationinSeconds="" | |
if [[ "$seedNumberRotationinSeconds" = "" ]]; then | |
echo "Setting default rotation schedule of 30 days" | |
seedNumberRotationinSeconds="2628288" | |
fi | |
| |
seedNumberSpread="" | |
if [[ "$seedNumberSpread" = "" ]]; then | |
echo "Setting default seed number spread to 100" | |
seedNumberRotationinSeconds="100" | |
fi | |
| |
| |
if [[ -f /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist ]]; then | |
priorSeedDateinSeconds=$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedDateinSeconds) | |
seedDateAgeOutinSeconds=$(/bin/date -v -"$seedNumberRotationinSeconds"S +'%s') | |
if [[ "$priorSeedDateinSeconds" -lt "$seedDateAgeOutinSeconds" ]]; then | |
echo "Endpoint has existed in current seed position for more than the alloted time, rotating" | |
seedNumber=$(echo $((1 + RANDOM % "$seedNumberSpread"))) | |
seedDateinSeconds=$(/bin/date +%s) | |
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber -int "$seedNumber" | |
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedDateinSeconds -int "$seedDateinSeconds" | |
echo "<result>$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber)</result>" | |
else | |
echo "Endpoint is still valid in current seed position" | |
echo "<result>$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber)</result>" | |
fi | |
else | |
seedNumber=$(echo $((1 + RANDOM % "$seedNumberSpread"))) | |
seedDateinSeconds=$(/bin/date +%s) | |
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber -int "$seedNumber" | |
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedDateinSeconds -int "$seedDateinSeconds" | |
echo "<result>$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber)</result>" | |
fi | |
</scriptContentsMac> | |
</extensionAttribute> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment