我有后台进程作为登录用户运行,经常尝试挂载AFP共享来备份某些数据。如果无法安装共享,则应该忽略它。
在我的脚本中(实际上是bash)我通过AppleScript mount volume
代码段挂载共享。与mount
或mount_afp
命令相比,这似乎是使用Kerberos票证或用户钥匙串自动对相应服务器上的用户进行身份验证的唯一方法。特别是,我不希望在脚本中存储密码:
try
mount volume "afp://server/share"
on error errText number errNum
log {errText, errNum}
end try
这通常很好,但是尽管有try ... on error
块,'mount volume'命令总是会在出现错误时打开一个对话框:
我正在寻找:
mount
的方法,分别mount_afp
使用Kerberos票证和用户钥匙串中的凭据,而无需提供密码。 我用谷歌搜索并尝试了几个小时,但还没有找到任何解决方案。
答案 0 :(得分:2)
为蹩脚的回答道歉。我想如果你尝试这样的事情,你就不会被对话困扰(但你仍然可以让你的脚本对错误做出反应)。
(下面是一个简单版本。带有用户名/密码的mount_afp文档在这里:http://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man8/mount_afp.8.html)
try
alias (POSIX file "/Volumes/yourMountedVolumeName")--hacky check for mount point
on error
--does not exist, so make dir
do shell script "mkdir /Volumes/yourMountedVolumeName"
end try
--now use do shell to mount
try
do shell script "mount_afp 'afp://yourServer/yourMountedVolumeName/' /Volumes/yourMountedVolumeName"
on error errText number errnum
log {errText, errnum}
end try
[以下答案不足]
其中一些可能很明显,但您需要
我相信这样可以在不使用系统事件的情况下终止对话框... 在终端或外壳:
killall NetAuthAgent
或通过AppleScript:
do shell script "killall NetAuthAgent"
当然,在身份验证过程中你必须小心不要杀死它。
答案 1 :(得分:2)
我一直在我的mac mini媒体服务器上解决这个问题已经很久了,相信我终于有了解决方案。
我把它分成两个脚本:
第一个在空闲(而不是重复循环)上运行,并且每隔10秒调用第二个脚本来处理驱动器安装。
--------------------------------------------------------------------------------------
--"On Idle Launch Basic Drive Mounter.app"
on idle
try
--script loads on startup, so first we wait 5 seconds to ensure network
delay 5
--run the mounter script which is on the desktop
run script file ":Users:localusername:Desktop:Basic Drive Mounter.app"
on error errStr number errorNumber
--listen for the apple quit command and quit
if the errorNumber is equal to -128 then
quit
return 1
--listen for the unknown error and ignore it
else if the errorNumber is equal to -5014 then
return 5
else
--all other errors are also ignored
return 5
end if
end try
--return with a wait of 5 seconds before next idle run
return 5
end idle
--------------------------------------------------------------------------------------
第二个脚本检查网络,然后尝试使用shell挂载卷 安装。我最初使用的是一个取景器" mount volume"并且代码也作为注释存在,但我不喜欢弹出错误的对话框;即使只是一秒钟,所以我转向shell脚本。
--------------------------------------------------------------------------------------
--"Basic Drive Mounter.app"
try
set IP_address to "xxx.xxx.xxx.xxx"
set IP_Valid to true
try
do shell script ("ping -c 2 " & IP_address)
on error
set IP_Valid to false
end try
if IP_Valid then
tell application "Finder"
if disk "work" exists then
else
-->>shell script version
try
do shell script "mkdir /Volumes/work"
end try
do shell script "mount_afp afp://xxx.xxx.xxx.xxx/work /Volumes/work/"
--<<shell script version
-->>finder mount volume version
--with timeout of 1 second
-- mount volume "afp://xxx.xxx.xxx.xxx/work"
--end timeout
--<<finder mount volume version
end if
end tell
end if
on error
-->>finder mount volume version
--on error finder returns an error dialog which needs to be closed to go back and retry
--tell application "System Events"
-- keystroke return
--end tell
--<<finder mount volume version
return 0
end try
--------------------------------------------------------------------------------------
并非所有这些都是我自己的代码,所以非常感谢Applecript社区和谷歌 - 记得向前付款
答案 2 :(得分:2)
要安装驱动器,请创建一个这样的苹果脚本:
self.timer?.invalidate()
然后,要关闭出现的警告消息,请使用另一个脚本:
tell application "Finder"
try
mount volume "afp://192.168.0.0/test"
end try
end tell
延迟只是让消息框有机会出现,但您可能不需要它。
如果使用osacompile osascript从终端运行最后一个脚本,则需要提供对终端的辅助功能访问。