micneu
Goto Top

MacOS NIC reihenfolge

Moin, ich bin Admin in einem macOS lastigen unternehmen.

Ich möchte die Reihenfolge der Netzwerkarte festlegen
1. Thunderbolt Ethernet
2. USB Ethernet
3. WLAN
usw.

im terminal kann man mit dem befehl "networksetup" kann ich das schön im terminal machen:
Usage: networksetup -ordernetworkservices <service1> <service2> <service3> <...>
	Order the services in order specified. Use "-listnetworkserviceorder" to view service order.  
	Note: use quotes around service names which contain spaces (ie. "Built-in Ethernet").  

mein problem ist alles was ich versuche kommt die fehlermeldung:
networksetup -ordernetworkservices "Thunderbolt Ethernet" "Thunderbolt Ethernet 2" "Apple USB Ethernet Adapter" "Wi-Fi" "Bluetooth PAN" "Thunderbolt Bridge"  
Wrong number of network services... No changes have been made.
Note: Quotes must be used around service names which contain spaces (ie. "Built-in Ethernet").  
** Error: The parameters were not valid.

wie gefordert habe ich alles in "" gesetzt.

kann einer mal von euch schauen ob ihr sehen könnt wo das problem ist?

ich hänge mal den code meines scriptes an:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Script Name:     order_network.py
# CreationDate:    10.04.2019
# Last Modified:
# Copyright:       Michael N. (c)2019
# Purpose:		   set the network service order for osx
#

import os
import subprocess
import re

bashCommand = "networksetup -listallnetworkservices"  
#networksetup = os.system(bashCommand)
p = subprocess.Popen(bashCommand, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()

nic_list = [y for y in (x.strip() for x in output.splitlines()) if y]
nic_list.pop(0)

def sort_thunderbolt():
	thunderbolt = ""  
	for i in nic_list:
		if re.search("Thunderbolt", i):  
			if not re.search("Thunderbolt Bridge", i):  
				index = nic_list.index(i)
				i = "\"" + i + "\""  
				#print("thunderbolt: " + str(index) + i)  
				if thunderbolt is None:
					thunderbolt = i
				else:
					thunderbolt += " " + i  
				nic_list.pop(index)
	thunderbolt = thunderbolt.strip()
	#print(thunderbolt)
	return thunderbolt

def sort_USB():
	USB = ""  
	for i in nic_list:
		if re.search("USB", i):  
			index = nic_list.index(i)
			i = "\"" + i + "\""  
			#print("thunderbolt: " + str(index) + i)  
			if USB is None:
				USB = i
			else:
				USB += " " + i  
			nic_list.pop(index)
	USB = USB.strip()
	#print(USB)
	return USB


def sort_WLAN():
	WLAN = ""  
	for i in nic_list:
		if re.search("Wi-Fi", i):  
			index = nic_list.index(i)
			i = "\"" + i + "\""  
			if WLAN is None:
				WLAN = i
			else:
				WLAN += " " + i  
			nic_list.pop(index)
	WLAN = WLAN.strip()
	#print(WLAN)
	return WLAN

def sort_TB():
	TB = ""  
	for i in nic_list:
		if re.search("Thunderbolt Bridge", i):  
			index = nic_list.index(i)
			i = "\"" + i + "\""  
			if TB is None:
				TB = i
			else:
				TB += " " + i  
			nic_list.pop(index)
	TB = TB.strip()
	#print(TB)
	return TB

def sort_OTHER():
	OTHER = ""  
	for i in nic_list:
		index = nic_list.index(i)
		i = "\"" + i + "\""  
		if OTHER is None:
			OTHER = i
		else:
			OTHER += " " + i  
			nic_list.pop(index)
	OTHER = OTHER.strip()
	#print(OTHER)
	return OTHER

THUNDERBOLT = sort_thunderbolt()
USB = sort_USB()
WLAN = sort_WLAN()
TB = sort_TB()
OTHER = sort_OTHER()
for i in nic_list:
	index = nic_list.index(i)
	print("index: " + str(index) + i)  

nic_prio = ""  
if THUNDERBOLT:
	nic_prio = THUNDERBOLT

if USB:
	if nic_prio:
		nic_prio += " " + USB  
	else:
		nic_prio = USB

if WLAN:
	if nic_prio:
		nic_prio += " " + WLAN  
	else:
		nic_prio = WLAN

if OTHER:
	if nic_prio:
		nic_prio += " " + OTHER  
	else:
		nic_prio = OTHER

if TB:
	if nic_prio:
		nic_prio += " " + TB  
	else:
		nic_prio = TB

networksetup = "networksetup -ordernetworkservices " + str(nic_prio)  
print(networksetup)
os.system(networksetup)

Content-Key: 438946

Url: https://administrator.de/contentid/438946

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: 139374
139374 10.04.2019 aktualisiert um 16:53:15 Uhr
Goto Top
Wrong number of network services...
Ich würde jetzt sagen da fehlt ein Device in deiner Liste.
Mitglied: aqui
aqui 10.04.2019 aktualisiert um 18:42:48 Uhr
Goto Top
$ networksetup -listallnetworkservices
Listet sie alle auf ! face-wink
Oder für die aktuelle Reihenfolge:
$ networksetup -listnetworkserviceorder
Es geht auch übers GUI:
https://www.tekrevue.com/tip/network-interface-service-order-os-x/
Mitglied: 139374
139374 10.04.2019 aktualisiert um 19:18:01 Uhr
Goto Top
Zitat von @aqui:

$ networksetup -listallnetworkservices
Listet sie alle auf ! face-wink
So weit war er dann schon, s. Zeile 14 face-wink
Schätze mal wie so oft hier ein Flüchtigkeitsfehler beim TO.
Mitglied: micneu
micneu 10.04.2019 um 19:23:12 Uhr
Goto Top
das mache ich ja, in zeile 14, und erstelle danach aus allen eine liste
habt ihr es mal bei euch laufen lassen?

ich habe gerade an dem rechner an dem ich gerade sitze nicht alles devices so einsortiert werden wie erwartet

hier meine NICs
An asterisk (*) denotes that a network service is disabled.
Thunderbolt Ethernet
Belkin USB-C LAN
Wi-Fi
Bluetooth PAN
USB 10/100/1000 LAN
Thunderbolt Bridge

mne-mbp:python micneu$ ./order_network.py
networksetup -ordernetworkservices "Thunderbolt Ethernet" "Belkin USB-C LAN" "USB 10/100/1000 LAN" "Wi-Fi" "Bluetooth PAN" "Thunderbolt Bridge"  
Wrong number of network services... No changes have been made.
Note: Quotes must be used around service names which contain spaces (ie. "Built-in Ethernet").  
** Error: The parameters were not valid.

ich denke ich habe keins übersehen

seht ihr was warum das nicht klappt?
Mitglied: 139374
139374 10.04.2019 aktualisiert um 19:48:32 Uhr
Goto Top
Machst du den Befehl nur über das Python Skript oder hast du den auch mal manuell ohne das Python Skript versucht? Shell ist eleviert?
Vielleicht testweise die Sonderzeichen mit Backslash escapen.
Mitglied: micneu
micneu 10.04.2019 um 19:52:57 Uhr
Goto Top
ich habe alles mal auf der console ausprobiert mit allen devices die mir angezeigt werden
mit und ohen tütlchen.

meine überlegung, kann es am text encoding liegen (habe utf8 genommen)
aber auch wo ich noch nicht explizit im code auf utf8 gestellt hatte ging es auch nicht.

schluß endlich habe ich diesen befehl noch nie wirklich erfolgreich ausfüllen können.
"networksetup -ordernetworkservices ....."
Mitglied: micneu
micneu 11.04.2019 um 08:55:06 Uhr
Goto Top
Zitat von @aqui:

$ networksetup -listallnetworkservices
Listet sie alle auf ! face-wink
Oder für die aktuelle Reihenfolge:
$ networksetup -listnetworkserviceorder
Es geht auch übers GUI:
https://www.tekrevue.com/tip/network-interface-service-order-os-x/
mach das mal auf ca. 90 rechnern über die gui, da habe ich keine lust und zeit für
Mitglied: 139374
139374 11.04.2019 aktualisiert um 09:01:10 Uhr
Goto Top
Escape mal alle Sonderzeichen wie ich oben geschrieben habe. Auch innerhalb von doppelten Anführungszeichen haben bestimmt Zeichen besondere Bedeutung, das entfällt wenn man einfache Hochkommata verwendet. Der Unterbau ist ja auch nur ein Unix Derivat.
Mitglied: micneu
micneu 11.04.2019 um 09:10:03 Uhr
Goto Top
Zitat von @139374:

Escape mal alle Sonderzeichen wie ich oben geschrieben habe. Auch innerhalb von doppelten Anführungszeichen haben bestimmt Zeichen besondere Bedeutung, das entfällt wenn man einfache Hochkommata verwendet. Der Unterbau ist ja auch nur ein Unix Derivat.

habe ich getestet und den fehler bekommen

** Error: The parameters were not valid.

hast du es denn mal laufen lassen und geht es bei euch?
Mitglied: 139374
139374 11.04.2019 aktualisiert um 09:12:13 Uhr
Goto Top
Zitat von @micneu:
habe ich getestet und den fehler bekommen

** Error: The parameters were not valid.
Tja wir sehen ja das was du machst nicht.

hast du es denn mal laufen lassen und geht es bei euch?
Sicher, geht hier testweise auf einem Mojave einwandfrei.
Mitglied: micneu
micneu 11.04.2019 um 09:25:02 Uhr
Goto Top
Zitat von @139374:

Zitat von @micneu:
habe ich getestet und den fehler bekommen

** Error: The parameters were not valid.
Tja wir sehen ja das was du machst nicht.

hast du es denn mal laufen lassen und geht es bei euch?
Sicher, geht hier testweise auf einem Mojave einwandfrei.

ich habe es auch auf einem mojave 10.14.4 getestet (unterschiedlichste hardware)
hast du das script getestet oder den befehl selber ausgeführt?

egal was ich mache, es will nicht
Mitglied: micneu
micneu 11.04.2019 um 09:25:53 Uhr
Goto Top
networksetup -ordernetworkservices Thunderbolt\ Ethernet Thunderbolt\ Ethernet\ Slot 1 Thunderbolt\ Ethernet\ Slot\ 2 Apple\ USB\ Ethernet\ Adapter Apple\ USB\ Ethernet\ Adapter\ 2 Apple\ USB\ Ethernet\ Adapter\ 3 Wi-Fi iPhone Thunderbolt\ Bridge
networksetup -ordernetworkservices "Thunderbolt\ Ethernet" "Thunderbolt\ Ethernet\ Slot 1" "Thunderbolt\ Ethernet\ Slot\ 2" "Apple\ USB\ Ethernet\ Adapter" "Apple\ USB\ Ethernet\ Adapter\ 2" "Apple\ USB\ Ethernet\ Adapter\ 3" "Wi-Fi" "iPhone" "Thunderbolt\ Bridge"  
networksetup -ordernetworkservices "Thunderbolt Ethernet" "Thunderbolt Ethernet Slot 1" "Thunderbolt Ethernet Slot 2" "Apple USB Ethernet Adapter" "Apple USB Ethernet Adapter 2" "Apple USB Ethernet Adapter 3" "Wi-Fi" "iPhone" "Bluetooth PAN" "Thunderbolt Bridge"  
keine will (habe alle ohne script probiert)
Wrong number of network services... No changes have been made.
Note: Quotes must be used around service names which contain spaces (ie. "Built-in Ethernet").  
** Error: The parameters were not valid.

hast du es denn mal laufen lassen und geht es bei euch?
Mitglied: 139374
139374 11.04.2019 aktualisiert um 09:47:05 Uhr
Goto Top
Skript probiere ich erst gar nicht das muss ja erst mal so laufen sonst bringt dir das nix!
Auf der Konsole geht's hier wie schon geschrieben einwandfrei.
Das du die Konsole/Befehl eleviert laufen lassen musst ist dir aber schon bewusst?!
Mitglied: micneu
micneu 11.04.2019 um 09:57:33 Uhr
Goto Top
Zitat von @139374:

Skript probiere ich erst gar nicht das muss ja erst mal so laufen sonst bringt dir das nix!
Auf der Konsole geht's hier wie schon geschrieben einwandfrei.
Das du die Konsole/Befehl eleviert laufen lassen musst ist dir aber schon bewusst?!

was meinst du "Das du die Konsole/Befehl eleviert laufen lassen " damit?
Mitglied: 139374
139374 11.04.2019 aktualisiert um 10:03:33 Uhr
Goto Top
Wäre ja schön blöd wenn ein normaler User die Reihenfolge beliebig ändern könnte face-big-smile. Als MAC Admin sollte man eigentlich wissen wie man mit sudo umgeht 😜.
Mitglied: micneu
micneu 11.04.2019 um 11:14:50 Uhr
Goto Top
das du "sudo" meinst hattest du nicht geschrieben.
klar.... das muss ich ja nicht extra erwähnen oder?.
Mitglied: 139374
139374 11.04.2019 aktualisiert um 11:28:29 Uhr
Goto Top
Zitat von @micneu:

das du "sudo" meinst hattest du nicht geschrieben.
klar.... das muss ich ja nicht extra erwähnen oder?.
Wir wissen ja nicht mit wem wir es hier zu tun haben, hier sind ja oft ziemliche "Spezialisten" unterwegs da fragt man halt besser zur Sicherheit nochmal nach face-wink.

Also ich bin jetzt raus, hier lübt dat, irgendwo hat bei dir da auf dem System was einen Hänger, k.A. vielleicht musst du Tim Cook erst vorher noch einen Blasen damit es geht, ich weiß es nicht. 😆
Mitglied: micneu
micneu 13.04.2019 um 10:16:10 Uhr
Goto Top
also, das script und der befehl laufen (ich habe das script nochmal überarbeitet)
es liegt an teilweise an den rechnern (konfiguration, warum habe ich noch nicht rausfinden können)
das ich den fehler bekomme.

hier die neue version des scripts:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Script Name:     order_network.py
# CreationDate:    10.04.2019
# Last Modified:   11.04.2019 20:14:38
# Copyright:       Michael N. (c)2019
# Purpose:		   set the network service order for osx
#

import os
import subprocess
import re

bashCommand = "networksetup -listallnetworkservices"  
#networksetup = os.system(bashCommand)
p = subprocess.Popen(bashCommand, stdout=subprocess.PIPE, shell=True)
(output, err) = p.communicate()

nic_list = [y for y in (x.strip() for x in output.splitlines()) if y]
nic_list.pop(0)


def sort_nics(nic):
	net = 
	for i in list(nic_list):
		#print("nic_list", nic_list)  
		if nic in i:
			#print("thunderbolt: " + str(index) + i)  
			net.append(i)
			index = nic_list.index(i)
			nic_list.pop(index)
	print(" ".join(["\"{}\"".format(t) for t in net]))  
	return "".join(" ".join(["\"{}\"".format(t) for t in net]))  


def sort_OTHER():
	net = 
	for i in list(nic_list):
		net.append(i)
		index = nic_list.index(i)
		nic_list.pop(index)
	print(" ".join(["\"{}\"".format(t) for t in net]))  
	return "".join(" ".join(["\"{}\"".format(t) for t in net]))  

TB = sort_nics("Thunderbolt Bridge")  
THUNDERBOLT = sort_nics("Thunderbolt")  
USB = sort_nics("USB")  
WLAN = sort_nics("Wi-Fi")  
BT = sort_nics("Bluetooth PAN")  
ETHERNET = sort_nics("Ethernet")  
OTHER = sort_OTHER()

for i in nic_list:
	index = nic_list.index(i)
	print("index: " + str(index) + i)  

nic_prio = ""  

if THUNDERBOLT:
	if nic_prio != "":  
		nic_prio += " " + THUNDERBOLT  
	else:
		nic_prio = THUNDERBOLT

if ETHERNET:
	if nic_prio != "":  
		nic_prio += " " + ETHERNET  
	else:
		nic_prio = ETHERNET

if USB:
	if nic_prio != "":  
		nic_prio += " " + USB  
	else:
		nic_prio = USB

if BT:
	if nic_prio != "":  
		nic_prio += " " + BT  
	else:
		nic_prio = BT

if WLAN:
	if nic_prio != "":  
		nic_prio += " " + WLAN  
	else:
		nic_prio = WLAN

if OTHER:
	if nic_prio != "":  
		nic_prio += " " + OTHER  
	else:
		nic_prio = OTHER

if TB:
	if nic_prio != "":  
		nic_prio += " " + TB  
	else:
		nic_prio = TB

networksetup = "networksetup -ordernetworkservices " + nic_prio  
print(networksetup)
os.system(networksetup)
Mitglied: 139374
139374 13.04.2019 um 10:21:25 Uhr
Goto Top
und der befehl laufen
Sach ich doch, glaubst du ich erzähl dir was vom Pferd?