8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)
  • Q:

    Bijdrager
    lord anubis

    Applescript – hoe het 'path' vinden naar een mounted share?

    Vreemd maar mijn topic was verdwenen, dus effe opnieuw.

    Moderators, de eerdere, van vannacht, als deze gevonden wordt, mag verwijderd worden.

    Hoe weet ik welk pad gemaakt wordt als ik met applescript een share mount?
    B.v ik heb op een bepaald moment een ‘public’ share van NAS1 welke dan een pad heeft ‘/Volumes/Public’.

    Daarna ( of ervoor ) komt er een Applescript geactiveerde mount van NAS2 welke ook een public share heeft en een pad krijgt van ‘/Volumes/Public2’.

    Maar hoe weet ik nu hoe het pad betrouwbaar is. Want als er geen ‘/Volumes/Public’ reeds aanwezig is dan heet het pad ‘/Volumes/Public’ ipv ‘Public2’?

    Is de enige juiste manier om b.v. van te voren een lijst met ‘disks’ ophalen en dan vergelijken, of is er een betrouwbaarder manier?

    Ik gebruik het volgende

     
    on mountAvailable(serverName, shareName)
    	tell application "System Events" to set diskNames to name of every disk
    	if gDebug = true then set theChosenOne to choose from list diskNames
    	if shareName is in diskNames then
    		if gDebug = true then display dialog quoted form of shareName & " is already mounted." & return buttons {"OK"} default button 1
    		log "Share Found"
    	else
    		set mountAddr to "afp://" & serverName & "/" & shareName
    		if gDebug = true then display dialog quoted form of mountAddr buttons {"OK"} default button 1
    		try
    			log "Disk Not Found, mounting now…"
    			set volumeName to POSIX path of ((mount volume mountAddr as user name "admin") as alias)
    		on error
    			if shareName is not in diskNames then
    				log "Mounting failed"
    				if gDebug = true then display dialog quoted form of shareName & " is failed to mount." & return buttons {"OK"} default button 1
    			end if
    		end try
    	end if	
    end mountAvailable
     

    maar dit is niet betrouwbaar vanwege eerder genoemde redenen.


    Bijdrager
    dj bazzie wazzie

    Hoe weet ik welk pad gemaakt wordt als ik met applescript een share mount?

    Dat weet je niet, daarom returned het command ook het pad naar het volume.

    Maar hoe weet ik nu hoe het pad betrouwbaar is. Want als er geen ‘/Volumes/Public’ reeds aanwezig is dan heet het pad ‘/Volumes/Public’ ipv ‘Public2’?

    Je bedoeld in plaats van “/Volumes/Public2”?

    Er zijn twee manieren om dit betrouwbaarder te maken. Ten eerste zou ik niet afgaan op disk names maar op werkelijke mount points. Mount points zijn de paden waarop de volumes zijn gemount. Maar dan nog heb je geen garantie of het volume van de juiste server is gemount. Het is beter om te achterhalen welke share van welke server komt. Op dit moment (ben aan het kijken of het zinvol is om dit te implementeren in AppleScript Toolbox.osax) kan dit alleen vanuit bash voor AppleScript voor zover ik weet. AppleScriptObjC heeft wel bridge support voor DiskAttributes.Framework maar vraag me af in hoeverre het met dit framework mogelijk is om de bron van het volume te achterhalen en deze informatie in AppleScript ook bruikbaar is. Het lijkt me dat dit een brtrouwbaardere oplossing is.

     
    on mounAvailable(theServer, theVolume, theUser, thePasswd)
    	set predictedLine to "//" & theUser & "@" & theServer & "/" & theVolume
    	set shellResults to do shell script "mount | grep ^" & quoted form of predictedLine & " || echo no"
    	if shellResults is not "no" then
    		set mountPoint to item 1 of (AST find regex " on (.*) \\(" in string shellResults regex group 2)
    	else
    		set mountPoint to POSIX path of (mount volume "afp:" & predictedLine)
    	end if
    end mounAvailable
     

    Als het volume al gemount is returned het het pad dat bij de gebruikersnaam, server en volume hoort. Het voorbeeld script maakt gebruikt van AppleScript Toolbox.osax[1] (zie: AST find regex). Indien je geen extra standard addition wil gebruiken kan je het pad ook ophalen middels AppleScript text item delimiters.

    [1]Ik merk dat de url-tag is gebroken op dit forum. Maar de link naar de scripting addition: https://astoolbox.wordpress.com/


    Bijdrager
    Franky Mac

    Je kunt met het volgende AppleScript command navragen welke server er bij een pad hoort:

     
    tell application "System Events" to get server of disk "Public"
     

    Het antwoord is dan NAS1 of NAS2 als het goed is. Dit werkt bij mij alleen als de shares gemount zijn met AFP, zoals in jou geval.


    Bijdrager
    dj bazzie wazzie
    Franky op 10 april 2016

    Het antwoord is dan NAS1 of NAS2 als het goed is.

    Server property bevat de AFP server naam dat meestal gelijk is aan de locale hostnaam van de machine (werkt ook alleen bij AFP). DNS of IP adres dat je gebruikt bij het verbinden kan anders zijn. Indien deze gelijk zijn gaat het inderdaad goed.


    Bijdrager
    Franky Mac

    Bedankt voor de toelichting. Dus als je een NAS geen vast IP-nummer geeft en de toewijzing vindt plaats via DHCP, dan is het niet 100% betrouwbaar.

    BTW Wat is AppleScript Toolbox.osax? Ik krijg deze foutmelding als ik je link volg:
    Warning! Domain mapping upgrade for this domain not found. Please log in and go to the Domains Upgrades page of your blog to use this domain.

    @lord anubis Wat ik niet begrijp is waarom je meerdere scripts hebt, ik heb één script dat aan het begin van een sessie alles wat het kan vinden mount. Dit script wordt opgestart door ControlPlane als dit programma heeft bepaald dat ik thuis ben. Hierdoor kun je zelf de volgorde van het mounten bepalen.


    Bijdrager
    dj bazzie wazzie
    Franky op 11 april 2016

    Bedankt voor de toelichting. Dus als je een NAS geen vast IP-nummer geeft en de toewijzing vindt plaats via DHCP, dan is het niet 100% betrouwbaar.

    Als je beide AFP servers een unieke naam geeft en deze opneemt in het script is het wel betrouwbaar. Er vanuit gaande dat dit om een klein thuisnetwerk gaat waar de client niet met allemaal onbekende servers verbind. Het is misschien allemaal heel erg theoretisch en komt in de praktijk niet tot zelden voor maar omdat ik het netwerk van Lord Anibus niet ken hou ik overal rekening mee zoals AFP servers met dezelfde naam.

    Franky op 11 april 2016

    BTW Wat is AppleScript Toolbox.osax? Ik krijg deze foutmelding als ik je link volg:
    Warning! Domain mapping upgrade for this domain not found. Please log in and go to the Domains Upgrades page of your blog to use this domain.

    Ik merk dat de URL tag gebroken is en heb linkje even als platte tekst in het bericht aangepast, dank je.

    AppleScript Toolbox.osax (AST) is een scripting addition die ik heb geschreven en zit voornamelijk commando’s in die ikzelf vaak miste in AppleScript. Ik ben zelf een actieve gebruiker op MacScripter.net (en was dit ooit op omt, toen nog macosx.nl) en een paar commando’s zijn ook gebaseerd op veel vragen zoals verplaatsen van muis cursor en datum formattering. satimage.osax is ook een veel gebruikte osax ook in verband met support voor reguliere expressies alleen AST heeft betere support voor het ophalen van specifieke groepen. uiteraard kan je ook één van de vele do shell script commando’s gebruiken maar vanwege de overhead van fork() gevolgd door execve() zijn do shell scripts relatief traag. Voor dit commando ben je dus AST niet per se nodig.


    Bijdrager
    lord anubis

    Bedankt voor de reactie’s, had niet verwacht dat mijn topic nog tot leven kwam.

    dj op 10 april 2016

    Dat weet je niet, daarom returned het command ook het pad naar het volume.

    Wat het command terug geeft is ook niet altijd juist.

    DJ Ik ga je script en de toolbox eens bekijken en ook even de andere opmerkingen doorlopen.


    Bijdrager
    dj bazzie wazzie
    lord

    Wat het command terug geeft is ook niet altijd juist.

    Ok, dat wist ik niet. Misschien heb je hier dan wat aan om te mounten, deze handler returned altijd het juiste pad na het mounten. Ik gebruik namelijk mount om een hele andere reden niet en deze handlers (aangepast) komen uit een script library van mijzelf.

     
    my mountVolume:"public" fromServer:"NAS2" asUser:"admin" withPassword:"adminpasswd"
     
    on mountVolume:theVolume atPath:thePath fromServer:theServer asUser:theUser withPassword:thePasswd
    	-- do not continue if the file path already exists
    	tell application "System Events" to set fileExists to exists of disk item thePath
    	if fileExists then return false
     
    	-- create directory (mount point)
    	do shell script "mkdir " & quoted form of thePath
     
    	-- mount the volume, if fails the directory created is removed
    	do shell script "mount_afp afp://" & theUser & ":" & thePasswd & "@" & theServer & "/" & theVolume & space & quoted form of thePath & " || rmdir " & quoted form of thePath
     
    	-- test if the volume is mounted or not
    	tell application "System Events" to set fileExists to exists of disk item thePath
    	return fileExists -- return if the mount was succesfull or not.
    end mountVolume:atPath:fromServer:asUser:withPassword:
     
    on mountVolume:theVolume fromServer:theServer asUser:theUser withPassword:thePasswd
    	-- create a default folder and mount to
    	set theMountPoint to "/Volumes/" & theVolume
    	set availableFilePath to theMountPoint
     
    	-- test if file exists
    	tell application "System Events" to set fileExists to exists of disk item availableFilePath
    	set i to 0
     
    	-- create a new path until the mountpoint no longer exists
    	repeat until fileExists is false
    		set i to i + 1
    		set availableFilePath to theMountPoint & space & i
    		tell application "System Events" to set fileExists to exists of disk item availableFilePath
    	end repeat
     
    	-- if mount was succesful then return the mountpoint
    	if (my mountVolume:theVolume atPath:availableFilePath fromServer:theServer asUser:theUser withPassword:thePasswd) then
    		return availableFilePath
    	end if
     
    	-- if mount failed return empty path
    	return missing value
    end mountVolume:fromServer:asUser:withPassword:
     
8 berichten aan het bekijken - 1 tot 8 (van in totaal 8)

Je moet ingelogd zijn om een reactie op dit onderwerp te kunnen geven.