12-15-2021 07:35 PM - edited 02-16-2022 05:52 PM
I posted this in the macadmin Slack & kind of forgot to post it here...
Just a 1st crack at it, but, I put this in Self Service so users can run the networkQuality tests.
You may need to set AppleScript PPPC exceptions but these osascript commands for the most part on recent versions of macOS should be fine without them. Enjoy!
P.S. macOS Monterey only as far as I know... Sorry.
#!/bin/zsh
filpth='/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources'
tsttyp=$(/usr/bin/osascript -e "choose from list {\"Download + Upload Speed\", \"Video Conferencing\"} with title \"Network Quality Test\" with prompt \"Please select test type to begin:\"")
case "$tsttyp" in
'false' ) exit ;;
'Download + Upload Speed' ) icnsnm='GenericNetworkIcon'
option='-sv' ;;
'Video Conferencing' ) icnsnm='GroupIcon'
option='-v' ;;
esac
/usr/bin/osascript -e "display dialog \"Test in progress...\n\" buttons {\"Cancel\"} with icon POSIX file \"$filpth/$icnsnm.icns\" with Title \"Network Quality Test - $tsttyp\"" &
prgpid=$!
/usr/bin/networkquality "$option" | /usr/bin/sed '/SUMMARY/d' > /private/tmp/summary.txt &
while true
do
if [ -n "$(/bin/cat /private/tmp/summary.txt)" ]
then
break
fi
if /bin/kill -s 0 "$prgpid"
then
>&2 echo "waiting for networkquality..."
/bin/sleep 3
else
exit
fi
done
>&2 echo "$(/bin/cat /private/tmp/summary.txt)"
/usr/bin/osascript -e "display dialog \"$(/bin/cat /private/tmp/summary.txt)\" buttons {\"Ok\"} default button 1 with icon POSIX file \"$filpth/$icnsnm.icns\" with Title \"Network Quality Test - $tsttyp\""
/bin/rm -rf /private/tmp/summary.txt
/bin/kill -9 "$prgpid"
Posted on 12-17-2021 03:44 AM
This looks very cool! I tried running it in Terminal and got the Test in Progress window, but Terminal just said
no such file or directory: /usr/bin/networkquality
Sure enough, that file does not exist. Where can one obtain said file?
Posted on 12-17-2021 09:02 AM
aaahhhhh.... it's only in Monterey. I ran it on my Monterey Mac and it does look very handy..
Posted on 12-17-2021 03:08 PM
Yes. I kind of failed to mention that. 🙂 Sorry!
Posted on 06-02-2022 09:45 AM
This is excellent, thank you!
08-26-2022 11:11 AM - edited 08-26-2022 11:13 AM
Guessing it no likey proxy servers. #sigh
+1 Kudo, since I know if @brockwalters wrote it, it works. :)
10-31-2023 10:07 AM - edited 10-31-2023 10:11 AM
I tried the script as a policy in Self Service under Sonoma and the output is unreadable. When I run the networkquality command (not in the script) on Sonoma in Terminal, it runs and produces readable output. When I run the script in Self Service on Monterey and Ventura, it also produces readable output. Any ideas as to what changed in Sonoma?
Posted on 10-31-2023 01:55 PM
I’m digging through it and I see that the output of the networkquality -v (verbose) command in Sonoma doesn’t have “summary”. The script’s call for sed to parse that out fails. It needs to look for the line that says “verbose” and parse that. I’ve played around with editing the script accordingly and running it locally, but I can’t seem to make it work. I know I’m a sed/awk idiot so there’s little chance I’ll be able to fix it on my own.
Posted on 11-01-2023 03:45 AM
After dancing with ChatGPT for a while to get the grammar of awk correct, I have come up with a script that will work on Monterey, Ventura, and Sonoma. I know it's not efficient, but it works. Basically I took the core of the script and made 2 functions with it. One function is for Monterey/Ventura and the other function is for Sonoma - the difference is whether it looks for "SUMMARY" or "Verbose". After defining the functions, then it does an OS check and that will determine which function it will run.
#!/bin/zsh
# https://community.jamf.com/t5/jamf-pro/the-networkquality-is-not-strained/td-p/254301
ventura() {
option='0'
filpth='/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources'
tsttyp=$(/usr/bin/osascript -e "choose from list {\"Download + Upload Speed\", \"Video Conferencing\"} with title \"Network Quality Test\" with prompt \"Please select test type to begin:\"")
case "$tsttyp" in
'false' ) exit ;;
'Download + Upload Speed' ) icnsnm='GenericNetworkIcon'
option='1' ;;
'Video Conferencing' ) icnsnm='GroupIcon'
option='2';;
esac
/usr/bin/osascript -e "display dialog \"Test in progress...\n\" buttons {\"Cancel\"} with icon POSIX file \"$filpth/$icnsnm.icns\" with Title \"Network Quality Test - $tsttyp\"" &
prgpid=$!
if [[ $option == 1 ]] ; then
/usr/bin/networkquality -sv | /usr/bin/sed '/SUMMARY/d' > /private/tmp/summary.txt &
else
/usr/bin/networkquality -v | /usr/bin/sed '/SUMMARY/d' > /private/tmp/summary.txt &
fi
while true
do
if [ -n "$(/bin/cat /private/tmp/summary.txt)" ]
then
break
fi
if /bin/kill -s 0 "$prgpid"
then
>&2 echo "waiting for networkquality..."
/bin/sleep 3
else
exit
fi
done
result="$(/bin/cat /private/tmp/summary.txt)"
>&2 echo "$result"
/usr/bin/osascript -e "display dialog \"$result\" buttons {\"Ok\"} default button 1 with icon POSIX file \"$filpth/$icnsnm.icns\" with Title \"Network Quality Test - $tsttyp\""
#/bin/rm -rf /private/tmp/summary.txt
/bin/kill -9 "$prgpid"
}
sonoma() {
option='0'
filpth='/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources'
tsttyp=$(/usr/bin/osascript -e "choose from list {\"Download + Upload Speed\", \"Video Conferencing\"} with title \"Network Quality Test\" with prompt \"Please select test type to begin:\"")
case "$tsttyp" in
'false' ) exit ;;
'Download + Upload Speed' ) icnsnm='GenericNetworkIcon'
option='1' ;;
'Video Conferencing' ) icnsnm='GroupIcon'
option='2';;
esac
/usr/bin/osascript -e "display dialog \"Test in progress...\n\" buttons {\"Cancel\"} with icon POSIX file \"$filpth/$icnsnm.icns\" with Title \"Network Quality Test - $tsttyp\"" &
prgpid=$!
if [[ $option == 1 ]] ; then
/usr/bin/networkquality -sv | awk '/Verbose/ {flag=1; next} flag;' > /private/tmp/summary.txt &
else
/usr/bin/networkquality -v | awk '/Verbose/ {flag=1; next} flag;' > /private/tmp/summary.txt &
fi
while true
do
if [ -n "$(/bin/cat /private/tmp/summary.txt)" ]
then
break
fi
if /bin/kill -s 0 "$prgpid"
then
>&2 echo "waiting for networkquality..."
/bin/sleep 3
else
exit
fi
done
result="$(/bin/cat /private/tmp/summary.txt)"
>&2 echo "$result"
/usr/bin/osascript -e "display dialog \"$result\" buttons {\"Ok\"} default button 1 with icon POSIX file \"$filpth/$icnsnm.icns\" with Title \"Network Quality Test - $tsttyp\""
#/bin/rm -rf /private/tmp/summary.txt
/bin/kill -9 "$prgpid"
}
########## OS check ################
# Fetch the macOS version
os_version=$(sw_vers -productVersion)
# Extract the major version number
major_version=$(echo $os_version | cut -d. -f1)
# Check the major version number and echo the corresponding message
if [ "$major_version" = "13" ]; then
echo "running ventura command"
ventura
elif [ "$major_version" = "12" ]; then
echo "running ventura command"
ventura
elif [ "$major_version" = "14" ]; then
echo "running sonoma command"
sonoma
else
echo "This version is not Ventura or Sonoma."
fi
#####################################
The output in Sonoma has more details so the window displaying the results can get kinda long, but it should still fit on your screen.
Posted on 11-01-2023 05:12 AM
oops... for some reason I can't edit the script here on JamfNation. You will want to uncomment (remove the #) the two instances of
#/bin/rm -rf /private/tmp/summary.txt
Posted on 11-01-2023 10:16 AM
Thanks for the update! I'll take a look at it in detail.