Владелец большой фонотеки, управляемой iTunes, рано или поздно задаётся вопросом как автоматизировать рутинные процессы её обслуживания. Как и в других случаях, на помощь здесь приходят скрипты. Если владелец фонотеки работает в операционной системе Windows и уже знаком с написанием скриптов PowerShell, то эти знания пригодятся и для управления iTunes.

Для начала немного сведений о технологиях Microsoft и почему для управления музыкальным плеером выбран PowerShell.

В операционной системе Windows доступна технология Active Scripting, основанная на Microsoft OLE Automation, позволяющей обращаться к COM-объектам из интерпретаторов скриптовых языков, например, предустановленных VBScript и JScript. При желании в сети можно найти примеры скриптов, работающих с iTunes, написанных на этих языках.

Однако с появлением PowerShell и .NET популярность Active Scripting стала снижаться. Пользователю операционной системы Windows, занимающемуся автоматизацией для личных целей, нет практического смысла в изучении и применении сразу всех доступных технологий и скриптовых языков. Поэтому предлагаю рассмотреть работу с iTunes именно в PowerShell, так как полученные знания найдут применение и в других задачах, где PowerShell будет подходящим инструментом.

Работа с iTunes в PowerShell начинается с создания экземпляра COM-объекта iTunes.Application при помощи командлета New-Object.

$itunes = New-Object -ComObject iTunes.Application

Если iTunes не был запущен во время выполнения этой команды, то он запустится автоматически. Переменная $itunes содержит экземпляр COM-объекта и теперь можно просмотреть его структуру, узнать какие свойства и методы доступны для работы с ними. Для этого используется командлет Get-Member.

$itunes | Get-Member

После выполнения команды будет выведен список элементов объекта:


   TypeName: System.__ComObject#{9dd6680b-3edc-40db-a771-e6fe4832e34a}

Name                               MemberType            Definition                                                
----                               ----------            ----------                                                
Authorize                          Method                void Authorize (int, Variant, string)                     
BackTrack                          Method                void BackTrack ()                                         
CheckVersion                       Method                bool CheckVersion (int, int)                              
ConvertFile                        Method                IITOperationStatus ConvertFile (string)                   
ConvertFile2                       Method                IITConvertOperationStatus ConvertFile2 (string)           
ConvertFiles                       Method                IITOperationStatus ConvertFiles (Variant)                 
ConvertFiles2                      Method                IITConvertOperationStatus ConvertFiles2 (Variant)         
ConvertTrack                       Method                IITOperationStatus ConvertTrack (Variant)                 
ConvertTrack2                      Method                IITConvertOperationStatus ConvertTrack2 (Variant)         
ConvertTracks                      Method                IITOperationStatus ConvertTracks (Variant)                
ConvertTracks2                     Method                IITConvertOperationStatus ConvertTracks2 (Variant)        
CreateEQPreset                     Method                IITEQPreset CreateEQPreset (string)                       
CreateFolder                       Method                IITPlaylist CreateFolder (string)                         
CreateFolderInSource               Method                IITPlaylist CreateFolderInSource (string, Variant)        
CreatePlaylist                     Method                IITPlaylist CreatePlaylist (string)                       
CreatePlaylistInSource             Method                IITPlaylist CreatePlaylistInSource (string, Variant)      
FastForward                        Method                void FastForward ()                                       
GetITObjectByID                    Method                IITObject GetITObjectByID (int, int, int, int)            
GetITObjectPersistentIDs           Method                void GetITObjectPersistentIDs (Variant, int, int)         
GetPlayerButtonsState              Method                void GetPlayerButtonsState (bool, ITPlayButtonState, bool)
GotoMusicStoreHomePage             Method                void GotoMusicStoreHomePage ()                            
NextTrack                          Method                void NextTrack ()                                         
OpenURL                            Method                void OpenURL (string)                                     
Pause                              Method                void Pause ()                                             
Play                               Method                void Play ()                                              
PlayerButtonClicked                Method                void PlayerButtonClicked (ITPlayerButton, int)            
PlayFile                           Method                void PlayFile (string)                                    
PlayPause                          Method                void PlayPause ()                                         
PreviousTrack                      Method                void PreviousTrack ()                                     
Quit                               Method                void Quit ()                                              
Resume                             Method                void Resume ()                                            
Rewind                             Method                void Rewind ()                                            
SetOptions                         Method                void SetOptions (int)                                     
Stop                               Method                void Stop ()                                              
SubscribeToPodcast                 Method                void SubscribeToPodcast (string)                          
UpdateIPod                         Method                void UpdateIPod ()                                        
UpdatePodcastFeeds                 Method                void UpdatePodcastFeeds ()                                
CanSetShuffle                      ParameterizedProperty bool CanSetShuffle (Variant) {get}                        
CanSetSongRepeat                   ParameterizedProperty bool CanSetSongRepeat (Variant) {get}                     
ITObjectPersistentIDHigh           ParameterizedProperty int ITObjectPersistentIDHigh (Variant) {get}              
ITObjectPersistentIDLow            ParameterizedProperty int ITObjectPersistentIDLow (Variant) {get}               
AppCommandMessageProcessingEnabled Property              bool AppCommandMessageProcessingEnabled () {get} {set}    
BrowserWindow                      Property              IITBrowserWindow BrowserWindow () {get}                   
ConvertOperationStatus             Property              IITConvertOperationStatus ConvertOperationStatus () {get} 
CurrentEncoder                     Property              IITEncoder CurrentEncoder () {get} {set}                  
CurrentEQPreset                    Property              IITEQPreset CurrentEQPreset () {get} {set}                
CurrentPlaylist                    Property              IITPlaylist CurrentPlaylist () {get}                      
CurrentStreamTitle                 Property              string CurrentStreamTitle () {get}                        
CurrentStreamURL                   Property              string CurrentStreamURL () {get}                          
CurrentTrack                       Property              IITTrack CurrentTrack () {get}                            
CurrentVisual                      Property              IITVisual CurrentVisual () {get} {set}                    
Encoders                           Property              IITEncoderCollection Encoders () {get}                    
EQEnabled                          Property              bool EQEnabled () {get} {set}                             
EQPresets                          Property              IITEQPresetCollection EQPresets () {get}                  
EQWindow                           Property              IITWindow EQWindow () {get}                               
ForceToForegroundOnDialog          Property              bool ForceToForegroundOnDialog () {get} {set}             
FullScreenVisuals                  Property              bool FullScreenVisuals () {get} {set}                     
LibraryPlaylist                    Property              IITLibraryPlaylist LibraryPlaylist () {get}               
LibrarySource                      Property              IITSource LibrarySource () {get}                          
LibraryXMLPath                     Property              string LibraryXMLPath () {get}                            
Mute                               Property              bool Mute () {get} {set}                                  
PlayerPosition                     Property              int PlayerPosition () {get} {set}                         
PlayerPositionMS                   Property              int PlayerPositionMS () {get} {set}                       
PlayerState                        Property              ITPlayerState PlayerState () {get}                        
SelectedTracks                     Property              IITTrackCollection SelectedTracks () {get}                
SoundVolume                        Property              int SoundVolume () {get} {set}                            
SoundVolumeControlEnabled          Property              bool SoundVolumeControlEnabled () {get}                   
Sources                            Property              IITSourceCollection Sources () {get}                      
Version                            Property              string Version () {get}                                   
Visuals                            Property              IITVisualCollection Visuals () {get}                      
VisualsEnabled                     Property              bool VisualsEnabled () {get} {set}                        
VisualSize                         Property              ITVisualSize VisualSize () {get} {set}                    
Windows                            Property              IITWindowCollection Windows () {get}                      

Свойство MemberType определяет тип элемента объекта:

  • Method - метод;
  • ParameterizedProperty и Property - свойства.

О назначении перечисленных методов и свойств можно догадаться исходя из их имён (Name), о работе с ними говорят их определения (Definition). Например, свойства, в описании которых указано только {get}, доступны исключительно для чтения.

Примеры вызова методов COM-объекта iTunes:

#Перейти на главную страницу музыкального магазина iTunes
$itunes.GotoMusicStoreHomePage()

#Обновить ленты подкастов
$itunes.UpdatePodcastFeeds()

Примеры работы со свойствами COM-объекта iTunes:

#Получить версию iTunes
$itunes.Version

#Получить текущий уровень громкости
$itunes.SoundVolume

#Установить уровень громкости 50 (значение от 0 до 100) 
$itunes.SoundVolume = 50

#Выключить звук
$itunes.Mute = $true

#Включить звук
$itunes.Mute = $false

Если логика работы скрипта требует завершения работы iTunes после завершения его выполнения, то для этого используется метод Quit(). После его вызова iTunes будет закрыт.

Однако можно пойти дальше. Так как работа велась с COM-объектом, не лишним будет обратить внимание на освобождение памяти. Делается это так.

#Завершение работы iTunes
itunes.Quit()

#Очистка памяти
#Обнуление счётчика ссылок на COM-объект
$null = [System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$itunes)
#Принудительная сборка мусора
[gc]::Collect()
#Удаление переменной
Remove-Variable itunes

На этом первое знакомство с принципом и возможностями управления iTunes из PowerShell завершено. После изучения доступных методов и свойств можно приступить к рассмотрению конкретных задач по управлению воспроизведением и работой с библиотекой iTunes.