mapear unidades de red

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

Tenemos un nuevo laboratorio de Mac que ejecuta 10.12.6. El antiguo guión está debajo.

Instalé jq desde home-brew, pero sigo recibiendo un error cuando intento ejecutarlo. (También debajo)

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 me sale 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)
El PATHpasado a un do shell script comando es /usr/bin:/bin:/usr/sbin:/sbin, y cualquier ejecutable llamado que no esté dentro de esa 'RUTA', se debe usar el nombre de ruta completo . Además, no puedo probar su código , pero la salida a la que se pasa | cut -c 2- | sed 's:\\\\\\\\\\\\\\\\://:g' | sed 's:\\\\\\\\:/:g' | sed 's:.$::'probablemente podría reemplazarse con un solo awkcomando o, al menos, los tres sed comandos canalizados podrían escribirse como un solo sed comando usando -e commandy no tener que canalizar a dos ocurrencias adicionales de sed.

Respuestas (2)

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

lo siento, estás hablando con alguien que es tan nuevo en applyscript
Todos hemos estado ahí. ¿Qué parte de la respuesta necesito explicar mejor?
@SteveLunney Simplemente reemplace las tres apariciones de jq en AppleScript con /usr/local/bin/jq y debería funcionar. Probado: hasta donde puedo llegar sin una cuenta adecuada en gprc.ab.ca.

El problema principal que se señala no es realmente un problema de AppleScript per se. En otras palabras, aunque el do shell script comando es un comando de AppleScript , el problema es que los comandos llamados por el comando no son comandos de AppleScript , son comandos y, como tales, están sujetos al entorno que se transmite cuando se ejecuta el comando . ejecutado.do shell script shell shell
do shell script

El PATHpasado a un do shell script comando es /usr/bin:/bin:/usr/sbin:/sbin, y cualquier ejecutable llamado que no esté dentro de ese PATH, entonces se debe usar el nombre de ruta completo .

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

Al parecer jqno está dentro de eso PATH. En otras palabras, jqno está ubicado en una de las siguientes ubicaciones:/usr/bin:/bin:/usr/sbin:/sbin

Por lo tanto, sus opciones son enlace simbólico o moverse jq a una de esas ubicaciones, o usar el nombre de ruta completamente calificado del jqejecutable en el jq comando dentro de los comandos del do shell script comando .

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

Ejemplo:/usr/local/bin/jq

Sustituir /usr/local/bin/con el actual /path/to/el jqejecutable.

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

which jq

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

Si eso no funciona, utilice el siguiente comando en la Terminal :

find / -iname jq 2>/dev/null

Entonces, realmente no necesita entender AppleScript porque el problema es un shellproblema. Comprender cómo funcionan las conchas es donde debe concentrarse en su falta de comprensión.