Skip to content

Instantly share code, notes, and snippets.

@kdrwygvh
Last active August 8, 2020 15:21
Show Gist options
  • Save kdrwygvh/625e947c66d3d51333c79c2931c26a9b to your computer and use it in GitHub Desktop.
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
<?xml version="1.0" encoding="UTF-8"?><extensionAttribute>
<displayName>Randomized Clinical Trial Number</displayName>
<description/>
<dataType>number</dataType>
<scriptContentsMac>#!/usr/bin/env zsh&#13;
&#13;
preferenceDomain=""&#13;
if [[ "$preferenceDomain" = "" ]]; then&#13;
preferenceDomain="com.github"&#13;
fi&#13;
&#13;
seedNumberRotationinSeconds=""&#13;
if [[ "$seedNumberRotationinSeconds" = "" ]]; then&#13;
echo "Setting default rotation schedule of 30 days"&#13;
seedNumberRotationinSeconds="2628288"&#13;
fi&#13;
&#13;
seedNumberSpread=""&#13;
if [[ "$seedNumberSpread" = "" ]]; then&#13;
echo "Setting default seed number spread to 100"&#13;
seedNumberRotationinSeconds="100"&#13;
fi&#13;
&#13;
&#13;
if [[ -f /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist ]]; then&#13;
priorSeedDateinSeconds=$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedDateinSeconds)&#13;
seedDateAgeOutinSeconds=$(/bin/date -v -"$seedNumberRotationinSeconds"S +'%s')&#13;
if [[ "$priorSeedDateinSeconds" -lt "$seedDateAgeOutinSeconds" ]]; then&#13;
echo "Endpoint has existed in current seed position for more than the alloted time, rotating"&#13;
seedNumber=$(echo $((1 + RANDOM % "$seedNumberSpread")))&#13;
seedDateinSeconds=$(/bin/date +%s)&#13;
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber -int "$seedNumber"&#13;
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedDateinSeconds -int "$seedDateinSeconds"&#13;
echo "&lt;result&gt;$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber)&lt;/result&gt;"&#13;
else&#13;
echo "Endpoint is still valid in current seed position"&#13;
echo "&lt;result&gt;$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber)&lt;/result&gt;"&#13;
fi&#13;
else&#13;
seedNumber=$(echo $((1 + RANDOM % "$seedNumberSpread")))&#13;
seedDateinSeconds=$(/bin/date +%s)&#13;
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber -int "$seedNumber"&#13;
defaults write /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedDateinSeconds -int "$seedDateinSeconds"&#13;
echo "&lt;result&gt;$(defaults read /Library/Preferences/"$preferenceDomain".deviceSeedNumber.plist seedNumber)&lt;/result&gt;"&#13;
fi&#13;
</scriptContentsMac>
</extensionAttribute>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment