Ich brauche ein Skript, das Netzlaufwerke basierend auf dem Benutzernamen einer Person zuordnet (wir verwenden AD, um den Zugriff zu ermöglichen). Vor dem 10.10 hat es funktioniert.
Wir haben ein neues Mac-Labor, auf dem 10.12.6 ausgeführt wird. Das alte Skript ist unten.
Ich habe jq von home-brew installiert , erhalte aber immer wieder eine Fehlermeldung, wenn ich versuche, es auszuführen. (Auch unten)
Leider habe ich keine Erfahrung mit AppleScript und völlig verloren.
Jede Hilfe wäre willkommen
# 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
und der Fehler, den ich bekomme, ist?
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)
Sie haben wahrscheinlich jq
in /usr/local/bin
(oder einem anderen Verzeichnis außerhalb von /bin:/sbin:/usr/bin:/usr/sbin
) installiert. Normalerweise gehört dieses Verzeichnis nicht dazu, PATH
daher müssen Sie den vollständigen Pfad angeben, um es auszuführen ( /usr/local/bin/jq
).
Das Hauptproblem, auf das hingewiesen wird, ist nicht wirklich ein AppleScript- Problem an sich. Mit anderen Worten, obwohl der do shell script
Befehl ein AppleScript- Befehl ist , besteht das Problem darin, dass die vom Befehl aufgerufenen Befehle keine AppleScript- Befehle sind , sondern Befehle und als solche der Umgebung unterliegen, die an übergeben wird, wenn der Befehl ausgeführt wird hingerichtet.do shell script
shell
shell
do shell script
Der an einen BefehlPATH
übergebene ist , und jede aufgerufene ausführbare Datei, die sich nicht darin befindet , muss der vollständig qualifizierte Pfadname verwendet werden.do shell script
/usr/bin:/bin:/usr/sbin:/sbin
PATH
Die PATH
Umgebungsvariable ist eine durch Doppelpunkte getrennte Liste von Verzeichnissen , die Ihre Shell durchsucht, wenn Sie einen Befehl eingeben .
Anscheinend jq
ist das nicht drin PATH
. Mit anderen Worten, jq
befindet sich nicht an einem der folgenden Orte:/usr/bin:/bin:/usr/sbin:/sbin
Ihre Wahlmöglichkeiten sind also entweder Symlink oder Verschieben jq
an einen dieser Orte, oder Sie verwenden den vollständig qualifizierten Pfadnamen der jq
ausführbaren Datei im jq
Befehl innerhalb der Befehle des do shell script
Befehls .
Wechseln Sie im do shell script
Befehljq
zu/path/to/jq
Beispiel:/usr/local/bin/jq
Ersetzen Sie die ausführbare Datei /usr/local/bin/
durch die tatsächliche ./path/to/
jq
Möglicherweise können Sie den Pfad im Terminal mit dem folgenden Befehl ermitteln :
which jq
Auf meinem System which jq
ist das Ergebnis von:/usr/local/bin/jq
Wenn das nicht funktioniert, verwenden Sie den folgenden Befehl im Terminal :
find / -iname jq 2>/dev/null
Sie müssen AppleScript also wirklich nicht verstehen, da das Problem ein shell
Problem ist. Wenn Sie verstehen, wie Muscheln funktionieren, müssen Sie sich auf Ihr mangelndes Verständnis konzentrieren.
Benutzer3439894
PATH
an einen Befehl übergebenedo shell script
Befehl ist/usr/bin:/bin:/usr/sbin:/sbin
, und für jede aufgerufene ausführbare Datei, die sich nicht in diesem "PATH" befindet, muss der vollständig qualifizierte Pfadname verwendet werden. Außerdem kann ich Ihren Code nicht testen , aber die Ausgabe , an die übergeben wird,| cut -c 2- | sed 's:\\\\\\\\\\\\\\\\://:g' | sed 's:\\\\\\\\:/:g' | sed 's:.$::'
könnte wahrscheinlich durch einen einzigen Befehl ersetzt werden,awk
oder die drei geleiteten Befehlesed
könnten als ein einzigersed
Befehl geschrieben werden-e command
und müssen nicht an zwei zusätzliche Vorkommen von geleitet werdensed
.