使用AppleScript控制远程mac时出现问题

时间:2014-12-23 18:27:25

标签: network-programming applescript remote-access remote-server osx-server

我对所有这些编程新手都很陌生,但我正在努力学习。我取得了一定的成功,但感觉它比意外更容易发生意外。我非常感谢帮助学习和理解AppleScript,特别是网络,自动化和编程。

这里的环境:几乎所有Apple都配有两台Minis,几台笔记本电脑和各种iOS设备,包括AppleTV。该网络由一台Apple Airport Extreme和一台旧的D-Link交换机组成,我在工作时从回收站获救(经过许可)。还有三台Foscam wi-fi相机。其中一个Mini(名为Dora)充当运行Yosemite的文件服务器和OS X Server应用程序,其中包含用于媒体存储的不断增长的RAID 1阵列。

我希望能够从我的笔记本电脑(Adam的Macbook)运行一个AppleScript,它可以执行以下操作:

  1. 在Adam的Macbook上启动应用程序iCamSource
  2. 在Adam的Macbook上将“需要密码唤醒”更改为true
  3. 在Adam的Macbook上退出iTunes,如果它正在运行
  4. 启动当前的ScreenSaver锁定Adam的Macbook
  5. 如果Dora正在运行,请退出iTunes
  6. 在Dora上启动当前的ScreenSaver,如果它尚未运行,从而锁定Dora
  7. 我也希望在Adam的Macbook上有一个可以反转这些动作的脚本。

    我已经能够启动iCamSource,将“需要密码唤醒”设置为true并在Adam的Macbook上启动ScreenSaver,其中有很多Google-Fu,很多试验和错误,以及相当多的挫败感。如果它正在运行,我还没有尝试退出iTunes。这是一个新的想法/要求,但我认为添加到正常运行的脚本应该非常简单。

    我遇到麻烦的地方是从Adam的Macbook上的脚本控制Dora。我遇到访问错误(通常为905927)大约有一半到三分之二的时间我运行脚本。我已经尝试了通过Google搜索找到的每种语法选项和多种语法组合,但这是成功率最高(但仍然不一致)的选项。

    set remoteMachine to "eppc://remoteMachineadam:slajdlll@10.0.1.2"
    tell application "iTunes" of machine remoteMachine
        quit
    end tell
    

    在阅读解释如何执行此操作的各种文章时,有时脚本使用eppc,其他人使用epps,而我没有看到任何一个的结果一致。有些文章使用远程计算机的实际IP地址,其他文章使用password@name.local,因此语法为slajdlll@dora.local。这种变化在结果上似乎也不一致。

    这似乎是一项非常基本的任务,我发现很多文章都是这样做的,但是他们的方法在我的环境中不起作用。我读过的很多文章都很旧,所以语法可能已经过时了。我有点在我的智慧结束,但觉得我应该能够做到这一点。你们所能提供的任何帮助都会非常感激。

    更新 - 除了控制远程机器外,我昨晚在所有方面都使用了脚本。今天早上,我试图打开" Away"脚本再次解决远程控制问题,我得到一个语法错误无法验证用户消息,脚本不会编译。这是代码:
    tell application "System Events" try tell application "iTunes" to quit end try try tell application "iTunes" of machine "eppc://Dora.local" to quit end try tell security preferences set require password to wake to true tell application "iCamSource" to activate tell application "System Events" to start current screen saver end tell end tell

    两者"离开"和" Home"脚本从AppleScript菜单运行。当我在运行"离开"之后解锁屏幕保护程序时脚本我得到一个对话框,说明"连接到服务器" Dora的Airport Extreme时出现问题。服务器上不存在共享。请检查共享名称,然后重试。"我开始认为我的一台或多台机器上可能存在权限错误,或者是否存在导致脚本行为不一致的另一个问题。

    感谢迄今为止的所有帮助!

    更新好吧,似乎iPhoto和屏幕保护程序与网络硬盘上的文件交互时出现问题。打开iPhoto并慢慢打开每个图像并重新链接那些丢失了位置的图像似乎已经解决了这个问题。我仍然遇到访问错误代码905.为了解决此过程,我将脚本解压缩到一个任务,退出名为" Dora"的远程计算机上的iTunes。这是代码:

    set Dora to "epps://adam:slajdlll@10.0.1.2" try tell application "iTunes" of machine Dora to quit end try

    这是运行该脚本生成的事件日志:

    tell application "iTunes" of machine "eppc://epps/adam%253kslajdlll%4010.0.1.2.local" quit --> error number -905 end tell

    是否可能/可能OS X Server应用程序配置错误并且阻止脚本控制远程计算机?还有其他想法或事吗?

    谢谢!

    更新2
    在远程计算机上运行的OS X Server应用程序的“组”部分中,我发现有一个名为Apple Remote Events ACL的组。当我点击“编辑”按钮查看其设置时,我看到实际的帐户名称为“#com; apple.access_remote_ae-disabled"”。我想知道这是不是告诉了我们什么。我在几个图书馆搜索了#com; apple.access"认为它可能是可以编辑的东西,但一无所获。我是该组的成员。我尝试将自己从群组中移除并尝试使用脚本而不更改结果,因此我将自己添加回来。

    更新3
    正如所建议的那样,我试图从等式中消除OSX Server。要做到这一点,我将尝试在第三台计算机上启动TextEdit(因为它比iTunes更快启动),称为Office Mini,它上面没有Server应用程序。这是剧本:
    set OfficeMini to "eppc://10.0.1.196"
    try
    tell application "System Events" of machine OfficeMini
    open "/Applications/TextEdit.app"
    end tell
    end try

    当我最初运行脚本时,我有两个对话框,询问用户名和密码。我提供了它们并检查了" Save in Keychain"复选框。该脚本没有打开TextEdit,但我没有收到访问错误。我会得到不同的错误,-600或-10010,具体取决于我是使用系统事件还是Finder。使用此页面上的列表:Nicholas Reilingh AppleScript Error Codes我发现使用System Events我收到错误-600,这意味着应用程序没有运行。这并不奇怪,我试图打开它。当我使用Finder而不是系统事件时,我得到一个错误-10010,列表指示是" Handler无法处理此类的对象。"所以,有进步,但我仍然难倒。

    更新4 为了进一步澄清/简化,我尝试运行一个简单的脚本在该机器上本地打开Office Mini上的iTunes,它工作正常。
    tell application "iTunes" to activate
    替换"退出"对于"激活",并尝试使用几个不同的应用程序的这种语法都很好,非常快。我在Dora机器上尝试了相同的脚本和变体,并获得了相同的成功结果。

    然后我尝试使用此代码使该语法远程工作:
    set OfficeMini to "eppc://10.0.1.196"
    tell application "iTunes" of machine OfficeMini to quit

    我在事件日志中收到此错误消息:
    tell application "iTunes" of machine "eppc://10.0.1.196" quit --> error number -927 Result: error "iTunes got an error: Unable to authenticate user." number -927

    因此,由于OSX Server不在Office Mini上运行,这似乎消除了这个错误的罪魁祸首。我尝试用我在网上看到的另一种使用" epps"代替" eppc"这会导致类似的错误消息:" iTunes收到错误:不允许远程访问。"数字-905。我没有得到请求凭据的对话框。当我看到" epps"在线使用的字符串,格式为" epps:// username:password @ location"所以我使用了" epps:// adam:slajdlll@10.0.1.196"并收到相同的错误消息。我甚至试过"亚当"代替" adam"没有改变结果。

1 个答案:

答案 0 :(得分:0)

是的,第1步是尝试使脚本尽可能简单,以缩小故障点。

我已将您的最小脚本复制到我的机器上得到了它的工作:

set Dora to "minipuppy.local"
try
    tell application "iTunes" of machine Dora to quit
end try

一些注意事项:

  • 我使用了“minipuppy.local”(Bonjour linklocal名称)而不是你的eppc东西,因为我知道前者是什么,而不是后者。 (您可以从“共享首选项”面板*中获取链接本地名称,其中显示“本地网络上的计算机可以访问您的计算机:XXXXX”
  • 弹出一个身份验证对话框,说我需要输入目标计算机的用户名和密码 - 但确实 对话框中的eppc地址(我没有截屏:-()
  • 输入用户名/密码后,我的脚本什么也没做。有趣的是,我不能像你的那样打印出日志吗?
  • 我通过转到目标Mac的系统偏好设置&在“共享”面板中启用“远程Apple事件”*。打开它后,我的脚本工作了。

我希望启用“远程Apple事件”是您简化问题的最终解决方案。

* Apple菜单 - >系统偏好设置 - >共享