我有后台进程作为经常尝试挂载 AFP 共享以备份某些数据的登录用户运行。如果无法安装共享,则应忽略此项。

在我的脚本(实际上是 bash)中,我通过 AppleScript mount volume 片段安装共享。与 mountmount_afp 命令相比,这似乎是使用来自 Kerberos 票证或用户钥匙串(keychain)的凭据在相应服务器上自动验证用户的唯一方法。特别是,我做 而不是 想要在脚本中存储密码:

try
    mount volume "afp://server/share"
on error errText number errNum
    log {errText, errNum}
end try

这通常工作正常,但尽管有 try ... on error 块,“mount volume”命令总是在出现错误时打开一个对话框:

我在寻找 :
  • 一种抑制此对话框的方法,或
  • 自动关闭它的解决方案(可能涉及一些 SystemEvents 诡计?),或
  • 是一种分别教 mountmount_afp 使用来自 Kerberos 票证和用户钥匙串(keychain)的凭据而无需提供密码的方法。

  • 我用谷歌搜索并尝试了几个小时,但还没有找到任何解决方案。

    最佳答案

    我一直在我的 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 挂载卷
    山。我最初使用查找器“安装卷”,并且代码也作为注释存在,但我不喜欢弹出错误的对话框;即使只有一秒钟,所以我继续使用 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
    --------------------------------------------------------------------------------------
    

    并非所有这些都是我自己的代码,非常感谢 applescript 社区和谷歌 - 记得转发

    关于shell - 如何在 AppleScript 中抑制/自动关闭错误对话框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22640297/

    10-12 00:09