Я новичок во всем этом программировании, но пытаюсь учиться. У меня был умеренный успех, но я чувствую, что это скорее случайно, чем преднамеренно. Я был бы признателен за помощь в изучении и понимании AppleScript в частности, а также в работе с сетями, автоматизации и программировании в целом.
Вот обстановка: почти вся Apple с двумя Mini, парой ноутбуков и различными iOS-девайсами, включая AppleTV. Сеть состоит из Apple Airport Extreme и более старого коммутатора D-Link, который я спас (с разрешения) из корзины на работе. Также есть три камеры Foscam с Wi-Fi. Один из Mini (названный Dora) действует как файловый сервер, на котором запущены Yosemite и приложение OS X Server с растущим массивом RAID 1 для хранения мультимедиа.
Что я хотел бы сделать, так это запустить один AppleScript с моего ноутбука (Macbook Адама), который делает следующее:
- Запустите приложение iCamSource на Macbook Адама.
- Измените «Требовать пароль для пробуждения» на true на Macbook Адама.
- Выйдите из iTunes на Macbook Адама, если он запущен
- Запустите текущую заставку, блокирующую Macbook Адама.
- Выйдите из iTunes на Доре, если он запущен
- Запустите текущую заставку на Доре, если она еще не запущена, тем самым заблокировав Дору.
Я также хотел бы иметь один сценарий на Macbook Адама, который отменяет эти действия.
Мне удалось запустить iCamSource
, установить для параметра «Требовать пароль для пробуждения» значение true и запустить экранную заставку на Macbook Адама с большим количеством Google-Fu, методом проб и ошибок и небольшим разочарованием. Я еще не пытался выйти из iTunes
, если он запущен. Это новая идея/требование, но я думаю, что это должно быть довольно просто добавить к функционирующему сценарию.
У меня возникают проблемы, когда я управляю Дорой из сценария на Macbook Адама. Я сталкиваюсь с ошибками доступа (обычно 905
и 927
) примерно в половине-двух третях времени запуска сценария. Я пробовал каждый вариант синтаксиса и множество комбинаций синтаксиса, которые я нашел с помощью поиска Google, но это тот, который имеет наибольший (но все же непоследовательный) успех.
set remoteMachine to "eppc://remoteMachineadam:[email protected]"
tell application "iTunes" of machine remoteMachine
quit
end tell
При чтении различных статей, объясняющих, как это сделать, иногда сценарии используют eppc
, другие используют epps
, и я не видел последовательного результата ни с одним из них. В некоторых статьях используется фактический IP-адрес удаленной машины, в других — [email protected]
, поэтому синтаксис будет [email protected]
. Это изменение также кажется непоследовательным в своих результатах.
Это кажется довольно простой задачей, и я нашел много статей, которые делают именно это, но их методы не работают в моей среде. Многие статьи, которые я читал, довольно старые, поэтому синтаксис может быть устаревшим. Я как бы на пределе своих возможностей, но чувствую, что должен справиться с этой задачей. Любая помощь, которую вы все могли бы оказать, будет ОЧЕНЬ оценена.
Обновление. Вчера вечером у меня были сценарии, работающие во всех отношениях, кроме управления удаленной машиной. Этим утром я попытался открыть сценарий «Нет на месте», чтобы снова решить проблему с удаленным управлением, и я получаю сообщение «Синтаксическая ошибка, не позволяющая аутентифицировать пользователя», и сценарий не компилируется. Вот код: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
Сценарии «В гостях» и «Дома» запускаются из меню AppleScript. Когда я разблокирую заставку после запуска сценария «В гостях», я получаю диалоговое окно с сообщением «Произошла проблема с подключением к серверу «Dora's Airport Extreme». Общий ресурс не существует на сервере. Пожалуйста, проверьте имя общего ресурса и повторите попытку." Я начинаю думать, что у меня может быть ошибка разрешений на одной или нескольких машинах, или есть другая проблема, из-за которой сценарии работают непоследовательно.
Спасибо за всю помощь!
ОБНОВЛЕНИЕ Хорошо, похоже, возникла проблема с взаимодействием iPhoto и заставки с файлами на сетевом жестком диске. Открытие iPhoto и медленное открытие каждого изображения и повторное связывание тех, которые потеряли свое местоположение, похоже, решили эту проблему. Я все еще сталкиваюсь с кодом ошибки доступа 905. Чтобы устранить неполадки в этом процессе, я разделяю сценарий на одну задачу, чтобы выйти из iTunes на удаленной машине с именем «Дора». Вот код:
set Dora to "epps://adam:[email protected]"
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
Когда я сначала запустил скрипт, у меня появилось два диалоговых окна с запросом имени пользователя и пароля. Я предоставил их и установил флажок «Сохранить в связке ключей». Сценарий не открыл TextEdit, но я не получаю ошибок доступа. Однако я получаю разные ошибки, -600 или -10010, в зависимости от того, использую ли я системные события или Finder. Используя список на этой странице: Коды ошибок AppleScript Николаса Рейлинга я обнаружил, что с системными событиями Я получаю сообщение об ошибке -600, что означает, что приложение не запущено. Неудивительно, я пытаюсь его открыть. Когда я использую Finder вместо Системных событий, я получаю сообщение об ошибке -10010, которое в списке указано как «Обработчик не может обрабатывать объекты этого класса». Итак, прогресс есть, но я все еще в тупике.
ОБНОВЛЕНИЕ 4. Чтобы еще больше уточнить/упростить, я попытался запустить простой сценарий, чтобы открыть iTunes на Office Mini локально на этом компьютере, и он работал нормально.tell application "iTunes" to activate
Замена «quit» на «quit» «активировать», и попытка использовать этот синтаксис с несколькими различными приложениями работала достаточно хорошо и очень быстро. Я попробовал тот же сценарий и его вариации на машине Доры с такими же успешными результатами.
Затем я попытался заставить этот синтаксис работать удаленно с помощью этого кода: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:[email protected]» и получил такое же сообщение об ошибке. . Я даже попробовал «Адам» вместо «Адам» без каких-либо изменений в результатах.