Skip to content

Instantly share code, notes, and snippets.

@winmillwill
Created September 18, 2014 16:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save winmillwill/3b6037560b9a65cf9c09 to your computer and use it in GitHub Desktop.
Save winmillwill/3b6037560b9a65cf9c09 to your computer and use it in GitHub Desktop.
require 'plist'
name_servers = ['172.17.42.1', '8.8.4.4', '8.8.8.8']
plist_file = '/Library/Preferences/SystemConfiguration/preferences.plist'
plist = Plist::parse_xml(plist_file)
current_set_key = plist['CurrentSet'].split('/').at(-1)
service_key = nil
plist['NetworkServices'].each do |key, dict|
if (addresses = dict['DNS']['ServerAddresses'])
addresses = addresses + (name_servers - addresses)
dict['DNS']['ServerAddresses'] = addresses
plist['NetworkServices'][key] = dict
service_key = key
break
end
end
plist['Sets'][current_set_key]['Network']['Global']['IPv4']['ServiceOrder'].delete_if do |s|
s == service_key
end
plist['Sets'][current_set_key]['Network']['Global']['IPv4']['ServiceOrder'].unshift(service_key)
File.open(plist_file, 'w') do |file|
file.write(plist.to_plist)
end
system("defaults read #{plist_file} > /dev/null")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment