As we all know Jamf introduced us new LAPS solution. I have created EA to read local admin password.
In order using actively LAPS auto deploy must be enabled. You can read this jamf article for how to enable Jamf LAPS -> https://community.jamf.com/t5/tech-thoughts/how-to-securely-manage-local-admin-passwords-with-jamf-pro-and/ba-p/289969.
#!/bin/bash
# Reading JAMF Laps password
# Author: A. Collins
username="api username"
password="password"
url="your jamf url"
localadmin="local admin account that deployed in prestage"
serialnn=$(ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformSerialNumber/{print $4}')
#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
}
invalidateToken() {
responseCode=$(curl -w "%{http_code}" -H "Authorization: Bearer ${bearerToken}" $url/api/v1/auth/invalidate-token -X POST -s -o /dev/null)
if [[ ${responseCode} == 204 ]]
then
echo "Token successfully invalidated"
bearerToken=""
tokenExpirationEpoch="0"
elif [[ ${responseCode} == 401 ]]
then
echo "Token already invalid"
else
echo "An unknown error occurred invalidating the token"
fi
}
checkTokenExpiration
ComputerJSSID=$(curl -H "Accept: text/xml" -sfku "${username}:${password}" "${url}/JSSResource/computers/serialnumber/${serialnn}/subset/general" | xmllint --xpath '/computer/general/id/text()' -)
#echo "Computer JSS ID is: $ComputerJSSID"
managementId=$(curl -s -H "Authorization: Bearer ${bearerToken}" "$url/api/v1/computers-inventory-detail/$ComputerJSSID" -X GET -H "accept: application/json" | grep managementId | awk -F'"' '{print $4}')
#echo "Management ID is: $managementId"
#Read Password
localadminpass=$(curl -s -H "Authorization: Bearer ${bearerToken}" "$url/api/v2/local-admin-password/$managementId/account/$localadmin/password" -X GET -H "accept: application/json" | awk -F '["]' '/"password"
{ print $4 }')
invalidateToken
echo "<result>$localadminpass</result>"