Posted on 12-14-2011 12:53 AM
Not working with 10.7
Solved! Go to Solution.
Posted on 12-15-2011 07:18 AM
How is this folks? not sure if I should be using airport of networksetup for the older versions... It works on 10.7 and 10.6 for me, needs to be tested on the other versions, so if someone could test and let us know that would be great :-).
(Sorry about posting 4 times before, something with Safari didn't work.)
#!/bin/sh
####################################################################################################
#
# Copyright (c) 2010, JAMF Software, LLC. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the JAMF Software, LLC nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY JAMF SOFTWARE, LLC "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL JAMF SOFTWARE, LLC BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
####################################################################################################
#
# SUPPORT FOR THIS PROGRAM
#
# This program is distributed "as is" by JAMF Software, LLC's Resource Kit team. For more
# information or support for the Resource Kit, please utilize the following resources:
#
# http://list.jamfsoftware.com/mailman/listinfo/resourcekit
#
# http://www.jamfsoftware.com/support/resource-kit
#
# Please reference our SLA for information regarding support of this application:
#
# http://www.jamfsoftware.com/support/resource-kit-sla
#
####################################################################################################
#
# ABOUT THIS PROGRAM
#
# NAME
# setAirPortNetwork.sh -- Disassociates from the current wireless network and sets the SSID and WEP or
# WPA password on the AirPort assuming the AirPort is on
#
# SYNOPSIS
# sudo setAirPortNetwork.sh
# sudo setAirPortNetwork.sh <SSID> <password>
#
# DESCRIPTION
# This script was designed to configure the AirPort network settings, including which SSID the
# AirPort is pointed to, as well as what password should be used to connect to the network
# if the network is a secured wireless network.
#
####################################################################################################
#
# HISTORY
#
# Version: 1.1
#
# - Created by Eric Krause on March 5th, 2010
# - Modified by Eric Krause on June 22, 2010 to fix the command for 10.5
#
####################################################################################################
#
# DEFINE VARIABLES & READ IN PARAMETERS
#
####################################################################################################
# HARDCODED VALUES SET HERE
SSID="" #The SSID of the wireless network to connect to
password="" #This only needs to be set if a password is required
# CHECK TO SEE IF A VALUE WERE PASSED IN FOR PARAMETERS $4 THROUGH $5 AND, IF SO, ASSIGN THEM
if [ "$4" != "" ] && [ "$SSID" == "" ]; then
SSID=$4
fi
if [ "$5" != "" ] && [ "$password" == "" ]; then
password=$5
fi
####################################################################################################
#
# SCRIPT CONTENTS - DO NOT MODIFY BELOW THIS LINE
#
####################################################################################################
if [ "$SSID" == "" ]; then
echo “Error: The parameter ‘SSID’ is blank. Please specify a SSID.”
exit 1
fi
OS=`/usr/bin/sw_vers -productVersion | /usr/bin/colrm 5`
wifiDevice=`/usr/sbin/networksetup -listallhardwareports | awk '/^Hardware Port: Wi-Fi/,/^Ethernet Address/' | head -2 | tail -1 | cut -c 9-`
case $OS in
10.4*)
echo "Setting airport SSID to" $SSID
System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -z -A"$SSID" –password="$password"
;;
10.5*)
echo "Setting airport SSID to" $SSID
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -z -A"$SSID" –password="$password"
;;
10.6*)
echo "Setting airport SSID to $SSID..."
/usr/sbin/networksetup -setairportnetwork AirPort "$SSID" "$password"
;;
10.7*)
checkWireless=$(networksetup -listallhardwareports | egrep "Hardware Port: (Air|Wi-)" | cut -c 16-)
# First we need to get the Wi-Fi device's name
echo "Setting airport SSID to" $SSID
/usr/sbin/networksetup -setairportnetwork "$wifiDevice" "$SSID" "$password" ;;
esac
Posted on 12-15-2011 07:57 AM
looks good to me and you seem to have covered your bases on it. I'd say toss this in the resource kit, errrr or whatever the resource kit is going to be now.
Posted on 12-14-2011 01:10 AM
I re-worked the script a bit here and just wanted to share.
http://macmule.com/2011/09/09/how-to-turn-off-wireless-card/
MacMule created a script on his site to turn airport off and I took some of what he wrote concerning 10.7 and added it to this script. I only have 10.6 and 10.7 clients here.
Feedback needed and the outcome is that maybe we can create a new setAirportNetwork.sh script that works with every OS and have it added here
if [[ "$OS" == "10.6" ]]; then
echo "Setting airport SSID to $SSID..."
/usr/sbin/networksetup -setairportnetwork AirPort "$SSID" "$password"
else
checkWireless=$(networksetup -listallhardwareports | egrep "Hardware Port: (Air|Wi-)" | cut -c 16-)
# First we need to get the Wi-Fi device's name
wifiDevice=`/usr/sbin/networksetup -listallhardwareports | awk '/^Hardware Port: Wi-Fi/,/^Ethernet Address/' | head -2 | tail -1 | cut -c 9-`
echo "Setting airport SSID to" $SSID
/usr/sbin/networksetup -setairportnetwork "$wifiDevice" "$SSID" "$password"
fi
Posted on 12-14-2011 01:25 AM
glad i could help :)
Posted on 12-14-2011 08:10 AM
In 10.7 Apple changed the Airport Card to "Wi-Fi", it is better to build an array of enabled services first, then pass them through the script. This is just my opinion.
-Tom
Posted on 12-14-2011 12:26 PM
You could also try this:
#!/bin/sh
# Set the SSID variable to your wireless network name
# to set the network name you want to connect to.
SSID=
# Set the SECURITY variable to the security type of the
# wireless network (NONE, WEP, WPA, WPA2, WPAE or
# WPA2E) Setting it to NONE means that it's an open
# network with no encryption.
SECURITY=
# If you've set the SECURITY variable to something other than NONE,
# set the password here. For example, if you are using WPA
# encryption with a password of "thedrisin", set the PASSWORD
# variable to "thedrisin" (no quotes.)
PASSWORD=
# Determines which OS the script is running on
OS=`/usr/bin/sw_vers | grep ProductVersion | cut -c 17-20`
# On 10.7, the Wi-Fi interface needs to be identified
wifiDevice=`/usr/sbin/networksetup -listallhardwareports | awk '/^Hardware Port: Wi-Fi/,/^Ethernet Address/' | head -2 | tail -1 | cut -c 9-`
if [ "${OS}" = "10.7" ]; then
echo "Setting airport SSID to" $SSID
/usr/sbin/networksetup -setairportnetwork $wifiDevice $SSID $SECURITY $PASSWORD
else
echo "Setting airport SSID to $SSID..."
/usr/sbin/networksetup -setairportnetwork AirPort $SSID $SECURITY $PASSWORD
fi
Posted on 12-14-2011 12:38 PM
This is how I would do it. This is written on the fly, use at own risk, test, test, test, etc.
#!/bin/bash
# determine OS Version
OSvers=$(/usr/bin/sw_vers -productVersion)
case ${OSvers} in
10.6* ))`/usr/sbin/networksetup my-10.6-commands`;;
10.7* ))`/usr/sbin/networksetup my-10.7-commands`;;
esac
exit 0
Posted on 12-15-2011 03:58 AM
Thanks for all the feed back! What shall we do? Case or if else, best way to rewrite this so everyone can use it, and have it support 10.4 up ? Or just 10.5 and up
Thanks
Posted on 12-15-2011 03:58 AM
Thanks for all the feed back! What shall we do? Case or if else, best way to rewrite this so everyone can use it, and have it support 10.4 up ? Or just 10.5 and up
Thanks
Posted on 12-15-2011 03:58 AM
Thanks for all the feed back! What shall we do? Case or if else, best way to rewrite this so everyone can use it, and have it support 10.4 up ? Or just 10.5 and up
Thanks
Posted on 12-15-2011 03:58 AM
Thanks for all the feed back! What shall we do? Case or if else, best way to rewrite this so everyone can use it, and have it support 10.4 up ? Or just 10.5 and up
Thanks
Posted on 12-15-2011 06:36 AM
Correct, as far as I can tell the code:
sw_vers -productVersion
works on 10.4, 10.5, 10.6, and 10.7. Just verified on my old 10.4 box which acts as a file server
Odin:~ sadmin$ sw_vers
ProductName: Mac OS X Server
ProductVersion: 10.4.11
BuildVersion: 8S169
Odin:~ sadmin$ sw_vers -productVersion
10.4.11
Odin:~ sadmin$
So, you could write a case statement and wild card the OS version from 10.4 to 10.7 and then apply the proper code.
-Tom
Posted on 12-15-2011 07:18 AM
How is this folks? not sure if I should be using airport of networksetup for the older versions... It works on 10.7 and 10.6 for me, needs to be tested on the other versions, so if someone could test and let us know that would be great :-).
(Sorry about posting 4 times before, something with Safari didn't work.)
#!/bin/sh
####################################################################################################
#
# Copyright (c) 2010, JAMF Software, LLC. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the JAMF Software, LLC nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY JAMF SOFTWARE, LLC "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL JAMF SOFTWARE, LLC BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
####################################################################################################
#
# SUPPORT FOR THIS PROGRAM
#
# This program is distributed "as is" by JAMF Software, LLC's Resource Kit team. For more
# information or support for the Resource Kit, please utilize the following resources:
#
# http://list.jamfsoftware.com/mailman/listinfo/resourcekit
#
# http://www.jamfsoftware.com/support/resource-kit
#
# Please reference our SLA for information regarding support of this application:
#
# http://www.jamfsoftware.com/support/resource-kit-sla
#
####################################################################################################
#
# ABOUT THIS PROGRAM
#
# NAME
# setAirPortNetwork.sh -- Disassociates from the current wireless network and sets the SSID and WEP or
# WPA password on the AirPort assuming the AirPort is on
#
# SYNOPSIS
# sudo setAirPortNetwork.sh
# sudo setAirPortNetwork.sh <SSID> <password>
#
# DESCRIPTION
# This script was designed to configure the AirPort network settings, including which SSID the
# AirPort is pointed to, as well as what password should be used to connect to the network
# if the network is a secured wireless network.
#
####################################################################################################
#
# HISTORY
#
# Version: 1.1
#
# - Created by Eric Krause on March 5th, 2010
# - Modified by Eric Krause on June 22, 2010 to fix the command for 10.5
#
####################################################################################################
#
# DEFINE VARIABLES & READ IN PARAMETERS
#
####################################################################################################
# HARDCODED VALUES SET HERE
SSID="" #The SSID of the wireless network to connect to
password="" #This only needs to be set if a password is required
# CHECK TO SEE IF A VALUE WERE PASSED IN FOR PARAMETERS $4 THROUGH $5 AND, IF SO, ASSIGN THEM
if [ "$4" != "" ] && [ "$SSID" == "" ]; then
SSID=$4
fi
if [ "$5" != "" ] && [ "$password" == "" ]; then
password=$5
fi
####################################################################################################
#
# SCRIPT CONTENTS - DO NOT MODIFY BELOW THIS LINE
#
####################################################################################################
if [ "$SSID" == "" ]; then
echo “Error: The parameter ‘SSID’ is blank. Please specify a SSID.”
exit 1
fi
OS=`/usr/bin/sw_vers -productVersion | /usr/bin/colrm 5`
wifiDevice=`/usr/sbin/networksetup -listallhardwareports | awk '/^Hardware Port: Wi-Fi/,/^Ethernet Address/' | head -2 | tail -1 | cut -c 9-`
case $OS in
10.4*)
echo "Setting airport SSID to" $SSID
System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -z -A"$SSID" –password="$password"
;;
10.5*)
echo "Setting airport SSID to" $SSID
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -z -A"$SSID" –password="$password"
;;
10.6*)
echo "Setting airport SSID to $SSID..."
/usr/sbin/networksetup -setairportnetwork AirPort "$SSID" "$password"
;;
10.7*)
checkWireless=$(networksetup -listallhardwareports | egrep "Hardware Port: (Air|Wi-)" | cut -c 16-)
# First we need to get the Wi-Fi device's name
echo "Setting airport SSID to" $SSID
/usr/sbin/networksetup -setairportnetwork "$wifiDevice" "$SSID" "$password" ;;
esac
Posted on 12-15-2011 07:57 AM
looks good to me and you seem to have covered your bases on it. I'd say toss this in the resource kit, errrr or whatever the resource kit is going to be now.
Posted on 12-15-2011 08:00 AM
So should work then, 10.4 and 10.5 use airport ??
Posted on 12-15-2011 08:25 AM
Yes, Airport used to be the standard service name for the wireless card in OS X until 10.7.
Posted on 12-15-2011 09:27 AM
I'd be tempted to condense the main section down to the following (explanation below):
OS=/usr/bin/sw_vers -productVersion | /usr/bin/cut -d "." -f 1,2
case $OS in
10.[4-5])
logger -t $0 "Setting airport SSID to" $SSID
System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -z -A"$SSID" –password="$password"
;;
10.[6-7])
deviceName=networksetup -listallhardwareports | egrep -A 1 "Hardware Port: (Air|Wi-)" | tail -1 | awk '{print $NF}'
logger -t $0 "Setting airport SSID to" $SSID
/usr/sbin/networksetup -setairportnetwork $deviceName "$SSID" "$password"
;;
esac
The script will error on 10.4. networksetup lives in a different place prior to Leopard
/System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Support/networksetup
If you only want that command for 10.7 then run that in the case statement. Saying that, it doesn't seem to be doing anything.
I would also be tempted to replace the line
OS=/usr/bin/sw_vers -productVersion | /usr/bin/colrm 5
with
OS=/usr/bin/sw_vers -productVersion | cut -d "." -f 1,2
Maybe we wont get to 10.10, but if we do then this script would break with the above line.
As you are explicitly limiting the variable OS, then you don't need the * in each of the case statements
so
10.4)
10.5)
etc instead and in fact you can use ranges, so
10.[4-5])
I also believe you can use the device name on both 10.6 and 10.7
I've also chosen to write to system.log instead of using echo!
Posted on 12-15-2011 12:54 PM
Oh yeah I totally forgot in 10.4 networksetup was in a way different place, also the binary has had many updates so make sure the code works on each system.