mappare le unità di rete

3

Ho bisogno di ottenere uno script che mapperebbe le unità di rete in base al nome utente di una persona (usiamo AD per consentire l'accesso). Funzionava prima del 10.10.

Abbiamo un nuovo Mac Lab che esegue 10.12.6. Il vecchio script è sotto.

Ho installato jq da home-brew, ma continuo a ricevere un errore quando provo ad eseguirlo. (Anche sotto)

Scusa se non ho esperienza con AppleScript e sono completamente perso.

Qualsiasi aiuto sarebbe apprezzato

# 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

e l'errore che ottengo è?

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)
    
posta Steve Lunney 10.08.2017 - 19:51
fonte

2 risposte

2

Probabilmente hai installato jq in /usr/local/bin (o qualsiasi altra directory al di fuori di /bin:/sbin:/usr/bin:/usr/sbin ). Solitamente questa directory non fa parte di PATH quindi è necessario specificare il percorso completo per eseguirlo ( /usr/local/bin/jq ).

    
risposta data 10.08.2017 - 20:29
fonte
2

Il problema principale che viene evidenziato non è in realtà un problema di AppleScript di per sé. In altre parole, mentre il comando do shell script è un AppleScript comando , tuttavia, il problema è che i comandi chiamati dal comando do shell script non sono comandi AppleScript , sono shell comandi e come tali sono soggetti all'ambiente passato a shell quando viene eseguito il comando
do shell script .

Il PATH passato a do shell script comando è /usr/bin:/bin:/usr/sbin:/sbin , e qualsiasi eseguibile chiamato non è all'interno di quel PATH , quindi il nome percorso completo deve essere usato.

La variabile di ambiente PATH è un elenco delimitato da due punti delle directory che la tua shell ricerca attraverso quando inserisci un comando .

Apparentemente jq non rientra in tale PATH . In altre parole, jq non si trova in uno dei seguenti percorsi: /usr/bin:/bin:/usr/sbin:/sbin

Quindi, le tue scelte sono link simbolico o sposta jq in una di quelle posizioni, o usa il nome di percorso completo del jq eseguibile nel comando% em_de% comando all'interno dei comandi del comando jq .

Nel comando do shell script , modifica do shell script in jq

Esempio: /path/to/jq

Sostituisci /usr/local/bin/jq con il% effettivo/usr/local/bin/ dell'eseguibile /path/to/ .

Potresti essere in grado di accertare il suo percorso nel Terminale utilizzando il seguente comando :

which jq

Sul mio sistema il risultato di jq è: which jq

Se non funziona, utilizza il seguente comando in Terminale :

find / -iname jq 2>/dev/null

Quindi, non è necessario comprendere AppleScript perché il problema è un problema di /usr/local/bin/jq . Capire come funzionano shell dove devi concentrarti sulla tua mancanza di comprensione.

    
risposta data 11.08.2017 - 19:16
fonte

Leggi altre domande sui tag