Mensagem de aviso do iTunes ao sair devido a scripts
-
09-06-2019 - |
Pergunta
Escrevi o seguinte no PowersHell como uma demonstração rápida do iTunes:
$iTunes = New-Object -ComObject iTunes.Application
$LibrarySource = $iTunes.LibrarySource
foreach ($PList in $LibrarySource.Playlists)
{
write-host $PList.name
}
Isso funciona bem e recupera uma lista de nomes de listas de reprodução.Porém ao tentar fechar o iTunes aparece um aviso
Um ou mais aplicativos estão usando a interface de script do iTunes.Você tem certeza que quer sair?
Obviamente, posso simplesmente ignorar a mensagem e pressionar [Sair] ou apenas esperar cerca de 20 segundos, mas existe uma maneira limpa de informar ao iTunes que terminei de trabalhar com ele?
Itunes 7.7.1, Windows XP
Solução
Aqui está uma coisa que fiz em meu script Powershell que adiciona podcasts ao iTunes.Eu uso o Juice em um servidor para baixar todos os podcasts que ouço.O script usa métodos .Net para liberar os objetos COM.Quando escrevi meu script do iTunes, li alguns artigos que afirmavam que você deveria liberar seus objetos COM usando .NET.
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$LibrarySource)
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$iTunes)
Também executo meus scripts na maioria das vezes a partir de um atalho, não do prompt do PowerShell.
Com base em seus comentários, fiz alguns testes e determinei que receberia a mensagem ao executar no iTunes, se executasse meu script de uma forma que deixasse o PowerShell em execução.O iTunes parece acompanhar isso.A execução do script de maneira que saia do processo após a execução eliminou a mensagem.
Um método de executar seu script no PowerShell é prefixá-lo com o PowerShell.
powershell .\scriptname.ps1
O comando acima iniciará seu script e sairá do processo usado para executá-lo, mas ainda deixando você no prompt do PowerShell.
Outras dicas
Você deve conseguir definir $itunes como $null.Alternativamente, $itunes deve ter um método quit que você possa chamar.$itunes.quit()