mapear unidades de red

3

Necesito obtener un script que asigne unidades de red según el nombre de usuario de una persona (usamos AD para permitir el acceso). Solía funcionar antes de las 10.10.

Tenemos un nuevo laboratorio de Mac que está ejecutando 10.12.6. El script anterior está abajo.

He instalado jq desde home-brew, pero continúo recibiendo un error cuando intento ejecutarlo. (También abajo)

Lo siento, no tengo experiencia con AppleScript y estoy totalmente perdido.

Cualquier ayuda sería apreciada

# Get Username and Tag Number.  Define the URL for the json request.

set user to do shell script "whoami"
set tag to do shell script "hostname -s"
set link to "https://my.gprc.ab.ca/AppService/api/NetworkMappings?UserName=" & user & "&ComputerName=" & tag
# Get the number of disks currently mounted.

set diskLength to length of (list disks)

# Get number of records in the json object.
# Define the first record number in the object.

set recordLength to do shell script "curl " & quoted form of link & " | jq 'length'"
set recordNumber to 0

# For each json record, determine if the object is a drive or printer and mount/install accordingly.

repeat recordLength times

    # Define a variable pointing to the first record returned by list disks.
    # set diskItem to 1

    try
        set networkPathVar to do shell script "curl " & quoted form of link & " | jq '.[" & recordNumber & "] | .NetworkPath' | cut -c 2- | sed 's:\\\\\\\\://:g' | sed 's:\\\\:/:g'  | sed 's:.$::'"
        set deviceType to do shell script "curl " & quoted form of link & " | jq '.[" & recordNumber & "] | .Type'"
    on error
        return
    end try


    if deviceType contains "Drive" then

        set recordNumber to recordNumber + 1

        # Check to see if the drive is already mounted.  If not mount it.

        # repeat diskLength times
        if networkPathVar does not contain items 1 thru diskLength of (list disks) then

            mount volume "smb:" & networkPathVar

        end if
        # end repeat

    else

        set recordNumber to recordNumber + 1
    end if # End of Device Type IF
end repeat

y el error que recibo es?

sh: jq: command not found
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    36  100    36    0     0    495      0 --:--:-- --:--:-- --:--:--   500
(23) Failed writing body

sh: jq: command not found
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100    36  100    36    0     0    495      0 --:--:-- --:--:-- --:--:--   500
(23) Failed writing body (127)
    
pregunta Steve Lunney 10.08.2017 - 19:51

2 respuestas

2

Probablemente instaló jq en /usr/local/bin (o cualquier otro directorio fuera de /bin:/sbin:/usr/bin:/usr/sbin ). Normalmente, este directorio no forma parte de PATH , por lo que debe especificar la ruta completa para ejecutarlo ( /usr/local/bin/jq ).

    
respondido por el nohillside 10.08.2017 - 20:29
2

El problema principal que se está señalando no es realmente un problema AppleScript en sí. En otras palabras, si bien el comando do shell script es un comando AppleScript , no obstante, el problema es que el comando (es) llamadas por el comando do shell script no son AppleScript comandos , son shell comandos y, como tales, están sujetos al entorno que se pasa al shell cuando se ejecuta el comando
do shell script .

El PATH pasado a un comando do shell script es /usr/bin:/bin:/usr/sbin:/sbin , y cualquier ejecutable llamado que no esté dentro de ese PATH , entonces nombre de ruta completo necesita ser utilizado.

La variable de entorno PATH es una lista delimitada por dos puntos de directorios en la que shell busca cuando ingresas un comando .

Aparentemente, jq no está dentro de ese PATH . En otras palabras, jq no se encuentra en una de las siguientes ubicaciones: /usr/bin:/bin:/usr/sbin:/sbin

Por lo tanto, sus opciones son enlace simbólico o mover jq a una de esas ubicaciones, o usar la ruta de acceso completa de la jq ejecutable en el comando jq dentro de los comandos del comando do shell script .

En el comando do shell script , cambie jq a /path/to/jq

Ejemplo: /usr/local/bin/jq

Sustituya /usr/local/bin/ con el /path/to/ real jq ejecutable.

Es posible que pueda determinar su ruta en Terminal utilizando el siguiente comando :

which jq

En mi sistema, el resultado de which jq es: /usr/local/bin/jq

Si eso no funciona, use el siguiente comando en Terminal :

find / -iname jq 2>/dev/null

Por lo tanto, realmente no necesita entender AppleScript porque el problema es un problema shell . Comprender cómo funcionan shells es donde debe centrarse en su falta de comprensión.

    
respondido por el user3439894 11.08.2017 - 19:16

Lea otras preguntas en las etiquetas