valore comando plistbuddy da csv, ricerca e inserimento

1

Ho un comando plistbuddy che devo eseguire per 100 utenti diversi.

Il valore che devo inserire per i 100 singoli utenti dipende dal nome host.

Stavo pensando che potrei usare un csv che ha un elenco di nomi host / computernames e il valore plist corrispondente, quindi utilizzare uno script di shell per:

  1. Controlla il nome host del Mac
  2. trova il nome host in csv
  3. trova il valore del codice corrispondente necessario per il comando plistbuddy e lo salva in una variabile
  4. inserisci quel valore nel comando plistbuddy ed esegui, cambiando il valore del file plist desiderato.

Il CSV sarebbe stato appena formattato come:
nome host, codice
hostname1, 2001
hostname2, 2002

In particolare il file Plist è il file plist delle preferenze della stampante.

Ecco il comando plistbuddy:

/usr/libexec/PlistBuddy -c "Set :2ndfloor:com.apple.print.preset.settings:ManagementCodeValue 1001" ~/Library/Preferences/com.apple.print.custompresets.forprinter.CMI2ndFloorColor.plist

Il valore che deve essere modificato in base al nome host è il valore "1001" nel comando.

Questi sono gli unici elementi; controlla il nome host, trovalo nel csv, esegui il comando plistbuddy usando il codice corrispondente nel csv.

Qualcuno ha qualche buona idea per questo? Risparmierebbe ore e ore di lavoro con la GUI.

    
posta dns dave 12.07.2018 - 21:51
fonte

2 risposte

2

Ecco uno script di shell a tre righe per bash . Supponi che il file CSV sia denominato hosts.csv .

h='hostname -s'
c='sed -nE -e "/^$h, ?/s/^.+, ?//p" hosts.csv'
/usr/libexec/PlistBuddy -c "Set :2ndfloor:com.apple.print.preset.settings:ManagementCodeValue $c" ~/Library/Preferences/com.apple.print.custompresets.forprinter.CMI2ndFloorColor.plist

Lo script imposta le variabili di shell $h sul nome host e $c sul codice che corrisponde all'host. Ottieni il nome dell'host dal comando hostname . Usa $c al posto del valore "1001" nel comando PlistBuddy .

Di default il comando hostname restituisce le informazioni del dominio. Pertanto se il file CSV ha nomi host senza informazioni sul dominio, usa h='hostname -s' , altrimenti usa h='hostname' .

Il comando sed corrisponde a una riga del file CSV che inizia con il nome host $h seguito da una virgola e un carattere spazio opzionale. Per la riga che corrisponde, sed rimuove tutto tranne il codice dalla riga.

    
risposta data 13.07.2018 - 08:06
fonte
2

Puoi utilizzare awk per elaborare il file e trovare il valore del codice corrispondente.

code=$(awk -F , '$1 == "'$(hostname -s)'" { print $2 }' hosts.csv)
if [[ -n "$code" ]]; then
    /usr/libexec/PlistBuddy -c "Set :2ndfloor:com.apple.print.preset.settings:ManagementCodeValue $code" ~/Library/Preferences/com.apple.print.custompresets.forprinter.CMI2ndFloorColor.plist
else
    echo "No code for $(hostname -s)"
fi

La parte awk cerca la linea in cui il primo valore è uguale al nome host e stampa il secondo valore di quella linea. Poiché potrebbe non esserci corrispondenza, la parte if ... garantisce che PlistBuddy venga chiamato solo se è stato trovato un valore di codice.

    
risposta data 13.07.2018 - 10:22
fonte

Leggi altre domande sui tag