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



我对所有这些编程内容都是新手,但正在努力学习。我取得了适度的成功,但感觉这更多的是偶然而非故意的。我非常感谢帮助学习和理解AppleScript,尤其是网络、自动化和编程。

环境是这样的:几乎所有的苹果都有两台Mini、几台笔记本电脑和各种iOS设备,包括一台AppleTV。该网络由一个Apple Airport Extreme和一个我在工作中(经许可)从回收站救出来的旧D-Link交换机组成。还有三个Foscam无线摄像头。其中一款Mini(名为Dora)充当了运行Yosemite和OS X server应用程序的文件服务器,该应用程序具有不断增长的RAID 1阵列,用于媒体存储。

我想做的是从我的笔记本电脑(Adam's Macbook)上运行一个AppleScript,它可以执行以下操作:

  1. 在Adam's Macbook上启动应用程序iCamSource
  2. 在Adam's Macbook上将"需要密码才能唤醒"更改为true
  3. 如果亚当的Macbook正在运行,请退出iTunes
  4. 启动当前ScreenSaver锁定Adam's Macbook
  5. 如果正在运行,请退出多拉上的iTunes
  6. 如果当前的ScreenSaver尚未运行,请在Dora上启动它,从而锁定Dora

我也想在亚当的Macbook上有一个能逆转这些动作的脚本。

我已经能够启动iCamSource,将"需要密码才能唤醒"设置为true,并在Adam's Macbook上启动ScreenSaver,使用了大量的Google Fu、大量的试错和相当多的挫折。如果iTunes正在运行,我还没有尝试退出它。这是一个新的想法/需求,但我认为添加到运行脚本中应该非常简单。

我遇到麻烦的地方是从亚当的Macbook上的一个脚本中控制多拉。在运行脚本的大约一半到三分之二的时间里,我会遇到访问错误(通常是905927)。我尝试了通过谷歌搜索找到的每一种语法选项和许多语法组合,但这是最成功的(但仍然不一致)。

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

"Away"one_answers"Home"脚本都从AppleScript菜单运行。当我在运行"Away"脚本后解锁ScreenSaver时,我会看到一个对话框,上面写着"连接到服务器时出现问题"。服务器上不存在共享。请检查共享名称,然后重试。"我开始认为我可能在一台或多台机器上出现了权限错误,或者如果有另一个问题导致脚本运行不一致。

感谢到目前为止所有的帮助!

更新好的,iPhoto和屏幕保护程序与网络硬盘上的文件交互时似乎出现了问题。打开iPhoto,慢慢打开每张图片,并重新链接那些丢失位置的图片,似乎已经解决了这个问题。我仍然遇到访问错误代码905。为了解决这个过程,我将脚本剥离为一项任务,即退出名为"多拉"的远程机器上的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应用程序是否可能配置错误,并阻止脚本控制远程机器?还有其他想法或事情可以尝试吗?

谢谢!

UPDATE 2
在远程机器上运行的OS X Server应用程序的Groups部分,我发现有一个名为Apple remote Events ACL的组。当我点击编辑按钮查看它的设置时,我看到实际的帐户名是"com.apple.access_remote_disabled"。我想知道这是否告诉了我们什么。我在几个图书馆里搜索了"com.apple.access",以为它可能是可以编辑的东西,但一无所获。我是那个小组的成员。我试着把自己从小组中删除,并在结果没有变化的情况下尝试了脚本,所以我把自己重新加入了其中。

UPDATE 3
根据建议,我正在尝试从等式中删除OSX服务器。要做到这一点,我将尝试在第三台机器上启动TextEdit(因为它比iTunes更快),称为Office Mini,它上没有服务器应用程序。下面是脚本:
set OfficeMini to "eppc://10.0.1.196"
try
tell application "System Events" of machine OfficeMini
open "/Applications/TextEdit.app"
end tell
end try

当我最初运行脚本时,我看到两个对话框询问用户名和密码。我提供了它们,并选中了"保存在钥匙扣中"复选框。脚本没有打开TextEdit,但我没有收到访问错误。不过,我会得到不同的错误,-600或-10010,这取决于我是使用系统事件还是Finder。使用这个页面上的列表:Nicholas Reilingh AppleScript错误代码我发现在系统事件中我得到了一个错误-600,这意味着应用程序没有运行。这并不奇怪,我正在尝试打开它。当我使用Finder而不是System Events时,我得到了一个错误-10010,列表显示为"Handler无法处理此类对象"。所以,虽然有进展,但我仍然感到困惑。

UPDATE 4为了进一步澄清/简化,我尝试运行一个简单的脚本,在该机器上本地打开Office Mini上的iTunes,效果很好
tell application "iTunes" to activate
用"quit"代替"activate",并在几个不同的应用程序中尝试这种语法,效果都很好,速度也很快。我在多拉机器上尝试了同样的脚本和变体,取得了同样成功的结果。

然后,我尝试使用以下代码使该语法远程工作:
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服务器没有在Office Mini上运行,这似乎消除了导致错误的罪魁祸首。我试着用我在网上看到的另一个变体修改代码,该变体使用"epps"代替"eppc",这导致了类似的错误消息:"iTunes出现错误:不允许远程访问。"编号-905。我没有收到请求凭据的对话框。当我在网上看到"epps"字符串时,它的格式是"epps://username:password@位置"所以我用了"epps://adam:slajdlll@10.0.11.196",并收到相同的错误消息。我甚至尝试用"Adam"代替"Adam",但结果没有变化。

是的,第1步是尽量简化脚本,以缩小失败点。

我已经把你的最小脚本复制到我的机器上;让它发挥作用:

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

几个注意事项:

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

我希望启用"远程苹果事件"是您简化问题的最终解决方案。

*苹果菜单->系统首选项->共享

最新更新