3 votos

mapear las unidades de red

Necesito conseguir un script que mapee las unidades de red basándose en el nombre de usuario de una persona (usamos AD para permitir el acceso). Solía funcionar antes de 10.10.

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

He instalado jq desde home-brew , pero sigue apareciendo un error cuando intento ejecutarlo. (También abajo)

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

Se agradece cualquier ayuda

# 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 obtengo 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)

0 votos

El PATH pasado a un do shell script comando es /usr/bin:/bin:/usr/sbin:/sbin y cualquier ejecutable llamado que no esté dentro de ese 'PATH` el nombre de ruta completamente calificado debe ser utilizado. Además, no puedo probar su código pero el salida que se pasa a | cut -c 2- | sed 's:\\\\\\\\\\\\\\\\://:g' | sed 's:\\\\\\\\:/:g' | sed 's:.$::' probablemente podría sustituirse por un único awk o en el contrato de arrendamiento las tres tuberías sed comandos podría escribirse como un único sed comando utilizando -e command y no tener que canalizar a dos ocurrencias adicionales de sed .

2voto

Probablemente haya instalado 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 es necesario especificar la ruta completa para ejecutarlo ( /usr/local/bin/jq ).

0 votos

Siento que estés hablando con alguien que es taaaan nuevo en el mundo de las aplicaciones.

0 votos

Todos hemos pasado por ello. ¿Qué parte de la respuesta tengo que explicar mejor?

1 votos

@SteveLunney Simplemente reemplaza las tres ocurrencias de jq en el AppleScript con /usr/local/bin/jq y debería funcionar. Probado - por lo que puedo conseguir sin cuenta adecuada en gprc.ab.ca.

2voto

user3439894 Puntos 5883

La cuestión principal que se señala no es realmente una AppleScript cuestión en sí misma. En otras palabras, aunque el do shell script comando es un AppleScript comando Sin embargo, la cuestión es que el comando(s) llamado por el do shell script comando no son AppleScript comandos son shell comandos y como tal están sujetos a la medio ambiente pasado a la shell cuando el
do shell script comando se ejecuta.

El PATH pasado 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 el nombre de ruta completamente calificado debe ser utilizado.

El PATH variable de entorno es un delimitado por dos puntos lista de directorios que su shell busca a través de cuando se introduce un comando .

Al parecer, jq no está dentro de ese PATH . En otras palabras, jq no se encuentra en uno de los siguientes lugares: /usr/bin:/bin:/usr/sbin:/sbin

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

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

Ejemplo: /usr/local/bin/jq

Sustituir /usr/local/bin/ con el actual /path/to/ el jq ejecutable.

Es posible que pueda averiguar su camino en Terminal utilizando lo siguiente comando :

which jq

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

Si eso no funciona, utilice lo siguiente comando en Terminal :

find / -iname jq 2>/dev/null

Por lo tanto, realmente no es necesario entender AppleScript porque el tema es un shell tema. Entender cómo conchas trabajo es donde tienes que centrarte en tu falta de comprensión.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X