For years I’ve been using file commands to mount server volumes. Lately I’ve noticed that it’s not very reliable, and the connection isn’t as robust as when I use “Connect to Server…” from Finder’s “Go” menu.
So I’m wondering what is the best practice these days for mounting server volumes via appleScript?
Are there AppleScriptObjC commands; Shell scripts?
mount volume "smb://server/volume" as user name Username with password Password```
use framework "Foundation"
use framework "AppKit"
use scripting additions
set theURL to current application's NSURL's URLWithString:"smb://userName:password@server/volume"
current application's NSWorkspace's sharedWorkspace()'s openURL:theURL
Just make sure you encode the name and password correctly.
If you wanted to pass the name and/or password in at run time, you could use this:
my mountVolume:"smb://server/volume" userName:"Me" withPassword:"top^secret"
on mountVolume:hostAndPath userName:theName withPassword:thePwd
set theName to current application's NSString's stringWithString:theName
set theName to theName's stringByAddingPercentEncodingWithAllowedCharacters:(current application's NSCharacterSet's URLUserAllowedCharacterSet())
set thePwd to current application's NSString's stringWithString:thePwd
set thePwd to thePwd's stringByAddingPercentEncodingWithAllowedCharacters:(current application's NSCharacterSet's URLPasswordAllowedCharacterSet())
set urlString to current application's NSString's stringWithString:hostAndPath
set nameAndPwd to current application's NSString's stringWithFormat_("://%@:%@@", theName, thePwd)
set urlString to urlString's stringByReplacingOccurrencesOfString:"://" withString:nameAndPwd
set theURL to current application's NSURL's URLWithString:urlString
current application's NSWorkspace's sharedWorkspace()'s openURL:theURL
end mountVolume:userName:withPassword:
So both work great. This is exactly what need, but I’m wondering which is better (more robust?) the version in the handler or the two lines.
Considering that I’ll be hard coding the servers/volumes in each script it do I need the character filtering in the handler? What other benefit is there?
With the handler if the username or password are incorrect I get a dialog, but not with the two lines. But they give me a trapable error and I can ask the user for the password and save it in a property (which I know isn’t that secure, and is probably what your “that said” was leading to!).
Either way, thanks, it’s exactly what I needed and gives me a better result than what I’ve been using for years.
If the name or password contain illegal characters, they can mess up the whole URL, whereas the longer version effectively confines any problem to just the invalid name or password.
The longer version is probably going to save you time next time someone changes the passwords, because you won’t even have to think about encoding them.
“robust”
adjective (robuster, robustest)
strong and healthy; vigorous: the Caplans are a robust, healthy lot.
• (of an object) sturdy in construction: a robust metal cabinet.
• (of a process, system, organization, etc.) able to withstand or overcome adverse conditions: California’s robust property market.