apple-mac-os:macos-sequoia:automated-os-deployment-to-apple-mac-and-iphone-or-ipad-mobile-devices
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| apple-mac-os:macos-sequoia:automated-os-deployment-to-apple-mac-and-iphone-or-ipad-mobile-devices [10.12.2024 04:45] – ↷ Операцией перемещения обновлены ссылки Алексей Максимов | apple-mac-os:macos-sequoia:automated-os-deployment-to-apple-mac-and-iphone-or-ipad-mobile-devices [24.09.2025 19:18] (текущий) – Виталий Якоб | ||
|---|---|---|---|
| Строка 12: | Строка 12: | ||
| <code AppleScript> | <code AppleScript> | ||
| -- В скрипте используется утилита jq, которая встроена в macOS начиная с Sequoia. | -- В скрипте используется утилита jq, которая встроена в macOS начиная с Sequoia. | ||
| - | -- При использовании более ранних версий, jq нужно установить дополнительно. | + | -- При использовании более ранних вресий, jq нужно установить дополнительно. |
| -- Перед использованием с AppStore установить Apple Configurator 2, и выполнить установку средств автоматизации из меню. | -- Перед использованием с AppStore установить Apple Configurator 2, и выполнить установку средств автоматизации из меню. | ||
| Строка 18: | Строка 18: | ||
| global LogPath | global LogPath | ||
| set LogPath to "/ | set LogPath to "/ | ||
| + | |||
| + | -- Определение версии ОС для правильной работы с system_profiler, | ||
| + | -- В дальнейшем могут быть другие изменения, | ||
| + | set OSVer to system version of (system info) | ||
| + | global usbDataType | ||
| + | |||
| + | if OSVer is greater than or equal to 26 then | ||
| + | set usbDataType to " | ||
| + | else | ||
| + | set usbDataType to " | ||
| + | end if | ||
| Строка 24: | Строка 35: | ||
| -- Получаем список подключенных устройств с помощью system_profiler | -- Получаем список подключенных устройств с помощью system_profiler | ||
| set SPResult to my systemprofilerDevList() | set SPResult to my systemprofilerDevList() | ||
| - | -- Объединяем списки для получения требуемой инф. в одной списке | + | -- Объединяем списки для получаения требуемой инф. в одном списке |
| set MergedList to my MergeLists(cfgutilResult, | set MergedList to my MergeLists(cfgutilResult, | ||
| --return MergedList | --return MergedList | ||
| Строка 146: | Строка 157: | ||
| -- Проверяем ещё раз | -- Проверяем ещё раз | ||
| set CurrentDownloads to (do shell script PSShellCommand) as integer | set CurrentDownloads to (do shell script PSShellCommand) as integer | ||
| - | -- Если очередная проверка не обнаружила параллельный процесс, | + | -- Если очередная проверка |
| if CurrentDownloads is 1 then | if CurrentDownloads is 1 then | ||
| -- Процесс завершён, | -- Процесс завершён, | ||
| Строка 154: | Строка 165: | ||
| return true | return true | ||
| else | else | ||
| - | my WriteLog(" | + | my WriteLog(" |
| my WriteLog(" | my WriteLog(" | ||
| my WriteLog(" | my WriteLog(" | ||
| Строка 163: | Строка 174: | ||
| -- При достижении счётчика, | -- При достижении счётчика, | ||
| if Counter is 5 then | if Counter is 5 then | ||
| - | my WriteLog(" | + | my WriteLog(" |
| my WriteLog(" | my WriteLog(" | ||
| return false | return false | ||
| Строка 173: | Строка 184: | ||
| else if CurrentDownloads is 1 then | else if CurrentDownloads is 1 then | ||
| set curlShellCommand to "curl -L --retry 5 --retry-delay 10 --retry-all-errors -J -o" & space & quoted form of thisFile & space & thisURL | set curlShellCommand to "curl -L --retry 5 --retry-delay 10 --retry-all-errors -J -o" & space & quoted form of thisFile & space & thisURL | ||
| - | my WriteLog(" | + | my WriteLog(" |
| try | try | ||
| do shell script curlShellCommand | do shell script curlShellCommand | ||
| Строка 319: | Строка 330: | ||
| on cfgutilDevList() | on cfgutilDevList() | ||
| | | ||
| - | -- Получаем инф. о подключенных устройствах в формате JSON | + | -- Получаем инф. о подключенных устройсвах в формате JSON |
| set BaseJSON to do shell script "/ | set BaseJSON to do shell script "/ | ||
| - | -- Парсим JSON, выбирая нужные данные и сохраняем контент как CVS, разделитель ";" | + | -- Парсим JSON, выберая нужные данные и сохраняем контент как CVS, разделитель ";" |
| set ParsedCSV to do shell script " | set ParsedCSV to do shell script " | ||
| -- Разбиваем на строки | -- Разбиваем на строки | ||
| Строка 343: | Строка 354: | ||
| -- Вторая часть ECID | -- Вторая часть ECID | ||
| set ECID to item 2 of CSVParts | set ECID to item 2 of CSVParts | ||
| - | -- Третья часть DeviceType | + | -- Третяя часть DeviceType |
| set DeviceType to item 3 of CSVParts | set DeviceType to item 3 of CSVParts | ||
| | | ||
| Строка 351: | Строка 362: | ||
| set LocationID to " | set LocationID to " | ||
| | | ||
| - | -- Выполняем проверку существования log-файла с именем ECID устройства, | + | -- Выполняем проверку сущестования log-файла с именем ECID устройства, |
| -- Если лог есть, то считаем, | -- Если лог есть, то считаем, | ||
| try | try | ||
| Строка 372: | Строка 383: | ||
| --Поиск подключенных устройств с помощью system_profiler | --Поиск подключенных устройств с помощью system_profiler | ||
| on systemprofilerDevList() | on systemprofilerDevList() | ||
| - | --Ищем среди подключенных USB устройств имена в которых | + | --Получаем информацию о подключенных USB устройсвах, ищем |
| - | -- Отображаем найденные | + | --Так как формат system_profiler изменился |
| - | -- Location. | + | --Location необходим в качестве ключа для объединения со списком cfgutilDevList() |
| - | set SPUSBInfo to do shell script " | + | set SPUSBInfo to do shell script " |
| - | | + | .. | objects |
| - | } | + | | select(._name? |
| - | /Mac|DFU|Recovery/ { | + | | [ |
| - | | + | |
| - | mac_dfu_recovery_found = 1 | + | (.USBDeviceKeySerialNumber |
| - | } | + | (.USBKeyLocationID |
| - | /Serial Number:/ && | + | ] |
| - | serial_number_line = NR | + | | .[] |
| - | } | + | '" |
| - | | + | |
| - | if ( mac_dfu_recovery_found && serial_number_line && NR == mac_dfu_recovery_line + 8) { | + | |
| - | sub(/^ +/, \" | + | |
| - | sub(/^ +/, \" | + | |
| - | sub(/^ +/, \" | + | |
| - | + | ||
| - | print lines[mac_dfu_recovery_line] | + | |
| - | print lines[serial_number_line] | + | |
| - | print $0 | + | |
| - | + | ||
| - | | + | |
| - | serial_number_line = 0 | + | |
| - | } | + | |
| - | }'" | + | |
| | | ||
| -- Разделяем вывод на строки | -- Разделяем вывод на строки | ||
| Строка 413: | Строка 410: | ||
| | | ||
| -- Модифицируем полученные данные приводя в нужный вид | -- Модифицируем полученные данные приводя в нужный вид | ||
| - | --Последний символ строки ":", | ||
| - | set Model to text 1 thru -2 of Model | ||
| -- Серийный номер подключенный Mac отображается сразу, у iOS строка содержит множество другой информации | -- Серийный номер подключенный Mac отображается сразу, у iOS строка содержит множество другой информации | ||
| -- Mac загруженный в DFU режиме не отображает серийный номер. | -- Mac загруженный в DFU режиме не отображает серийный номер. | ||
| Строка 443: | Строка 438: | ||
| 0x00100000 --> 0x100000 | 0x00100000 --> 0x100000 | ||
| 0x08310000 --> 0x8310000 | 0x08310000 --> 0x8310000 | ||
| - | Поэтому конвертируем 0x08310000 в 8310000 и добавляем 0x спереди, | + | Поэтому конвертируем 0x08310000 в 8310000 и добавляем 0x спереди, |
| *) | *) | ||
| --Вырезаем значение из строки | --Вырезаем значение из строки | ||
| - | set LocationID to text 14 thru 23 of LocationID | + | |
| + | | ||
| set LocationID to " | set LocationID to " | ||
| | | ||
| - | -- Добавляем инф о каждом устройстве в подсписке в список | + | -- Добавялем инф о каждом устройстве в подсписке в список |
| set end of ResultList to {Model, Serial, LocationID} | set end of ResultList to {Model, Serial, LocationID} | ||
| end repeat | end repeat | ||
| Строка 462: | Строка 458: | ||
| --=================== | --=================== | ||
| - | -- Обработчик для объединения списков | + | -- Обработчик для объединения объединения списков |
| --https:// | --https:// | ||
| --=================== | --=================== | ||
| Строка 478: | Строка 474: | ||
| -- Извлекаем значения подсписков из второго списка " | -- Извлекаем значения подсписков из второго списка " | ||
| set {Value11, Value12, ID11} to subList2 | set {Value11, Value12, ID11} to subList2 | ||
| - | --Если ключевые значения равны, создаём итоговый новый список | + | --Если ключевые занечения равны, создаём итоговый новый список |
| if ID01 is equal to ID11 then | if ID01 is equal to ID11 then | ||
| set end of ResultList to {Value01, Value11, Value12, Value02, ID01} | set end of ResultList to {Value01, Value11, Value12, Value02, ID01} | ||
| Строка 630: | Строка 626: | ||
| ^ Версия ОС ^ | ^ Версия ОС ^ | ||
| | Apple macOS Sequoia (15.0) | | Apple macOS Sequoia (15.0) | ||
| + | | Apple macOS Tahoe (26.0) | ||
| ---- | ---- | ||
apple-mac-os/macos-sequoia/automated-os-deployment-to-apple-mac-and-iphone-or-ipad-mobile-devices.1733805948.txt.gz · Последнее изменение: — Алексей Максимов