valor de comando plistbuddy de csv, buscar e insertar

1

Tengo un comando plistbuddy que necesito ejecutar para 100 usuarios diferentes.

El valor que debo ingresar para los 100 usuarios individuales depende del nombre de host.

Estaba pensando que podría usar un csv que tenga una lista de los nombres de host / computernames y el correspondiente valor de plist, luego usar un script de shell para:

  1. Comprueba el nombre de host de la Mac
  2. Encuentre el nombre de host en el csv
  3. encuentre el valor del código correspondiente necesario para el comando plistbuddy y guárdelo en una variable
  4. inserte ese valor en el comando plistbuddy y ejecute, cambiando el valor del archivo plist deseado.

El csv se formatearía como:
nombre de host, código
hostname1, 2001
nombre de host2, 2002

Específicamente, el archivo plist es el archivo plist de preferencias de la impresora.

Aquí está el comando plistbuddy:

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

El valor que debe cambiar según el nombre de host es el valor "1001" en ese comando.

Esos son los únicos elementos; verifique el nombre de host, encuéntrelo en el csv, ejecute el comando plistbuddy usando el código correspondiente en el csv.

¿Alguien tiene alguna buena idea para esto? Ahorraría horas y horas de trabajo de GUI.

    
pregunta dns dave 12.07.2018 - 21:51

2 respuestas

2

Aquí hay un script de shell de tres líneas para bash . Supongamos que el archivo CSV se llama 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

La secuencia de comandos establece las variables de shell $h para el nombre de host y $c para el código que coincide con el host. Obtenga el nombre del host del comando hostname . Use $c en lugar del valor "1001" en el comando PlistBuddy .

Por defecto, el comando hostname devuelve información de dominio. Por lo tanto, si el archivo CSV tiene nombres de host sin información de dominio, use h='hostname -s' , de lo contrario use h='hostname' .

El comando sed coincide con una línea del archivo CSV que comienza con el nombre de host $h seguido de una coma y un carácter de espacio opcional. Para la línea que coincide, sed elimina todo menos el código de la línea.

    
respondido por el creidhne 13.07.2018 - 08:06
2

Puedes usar awk para procesar el archivo y encontrar el valor del código correspondiente.

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 busca la línea donde el primer valor es igual al nombre de host e imprime el segundo valor de esa línea. Como no puede haber coincidencia, la parte if ... garantiza que solo se llame a PlistBuddy si se encontró un valor de código.

    
respondido por el nohillside 13.07.2018 - 10:22

Lea otras preguntas en las etiquetas