脚本检测NAS是否连接,如果连接,则挂载共享



我正试图找到一种自动在我的NAS上挂载share (afp)的方法。我使用登录来控制计算机可以访问哪些共享(出于隐私和其他原因)。当切换登录时,并不是所有的共享都被重新挂载,这对我运行的一些应用程序造成了问题。

我想做的是有一个脚本,每次我登录到NAS(即使它只是客户登录),然后这个脚本将挂载共享。

我想知道是否有人能给我指个正确的方向。这是在OS X电脑上,所以我想用applescript来实现。

Thanks in advance

汤姆

我已经在我的mac上解决这个问题很久了,我相信我终于有了解决办法。

我把它分成了两个脚本:

第一个脚本(在applescript编辑器中导出为保持打开的应用程序)在空闲状态下运行(而不是重复循环),并且每10秒调用第二个脚本来处理驱动器挂载。我在第一个脚本中检查的错误非常重要,因为-128确保您仍然可以通过右键单击或osx关机退出保持打开的脚本,而-5014是一个未知的错误,除非显式处理,否则在我的情况下会弹出一个对话框。

--------------------------------------------------------------------------------------
--"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
                try
                    do shell script "mkdir /Volumes/work"
                end try
                do shell script "mount_afp afp://xxx.xxx.xxx.xxx/work /Volumes/work/"
                -->>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
    return 0
    -->>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
end try    
--------------------------------------------------------------------------------------

一旦你让它工作,把第一个脚本/应用程序拖到你的用户登录项,让它在你登录时自动启动。如果你不需要持久的重新映射,那么就把第二个脚本/应用拖到登录项中运行一次。

基本思想是让一个启动代理监视文件夹的更改。您将需要监视/Volumes文件夹,因为当您登录到NAS时,会在Volumes文件夹中挂载一些东西。因此,watch代理将检测到Volumes文件夹中的某些内容发生了变化,并将运行一个脚本。

这很简单。你可以谷歌一下launch,找到很多例子。但是要设置watch文件夹,可以使用如下命令…

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>WatchPaths</key>
    <array>
        <string>/Volumes</string>
    </array>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/osascript</string>
        <string>/path/to/applescript</string>
    </array>
    <key>Label</key>
    <string>com.someName.plistFileName</string>
</dict>
</plist>

所以用上面的代码创建一个文本文件。保存它的扩展名为"。plist"。在ProgramArguments部分插入到applescript的路径,并在Label部分给出它的名称。

把这个列表放到~/Library/LaunchAgents文件夹中,然后重新启动计算机。现在,每当/Volumes文件夹中的内容发生变化时,applescript就会运行。

那么你只需正确地创建applescript。首先需要检查Volumes文件夹,看看您的NAS是否已挂载。如果是,那么挂载您想要的任何其他共享,如果不是,那么什么都不做。你可以谷歌(或搜索堆栈溢出)如何使用applescript挂载共享。

好运。

相关内容

  • 没有找到相关文章

最新更新