Pregunta

Escribí lo siguiente en PowersHell como una demostración rápida de iTunes:

$iTunes = New-Object -ComObject iTunes.Application
$LibrarySource = $iTunes.LibrarySource
foreach ($PList in $LibrarySource.Playlists)
{
  write-host $PList.name
}

Esto funciona bien y muestra una lista de nombres de listas de reproducción.Sin embargo, al intentar cerrar iTunes aparece una advertencia.

Una o más aplicaciones están utilizando la interfaz de secuencias de comandos de iTunes.¿Seguro que quieres salir?

Obviamente puedo ignorar el mensaje y presionar [Salir] o simplemente esperar unos 20 segundos, pero ¿hay una manera limpia de decirle a iTunes que terminé de trabajar con él?

Itunes 7.7.1, Windows XP
¿Fue útil?

Solución

Aquí hay una cosa que hice en mi script de Powershell que agrega podcasts a iTunes.Utilizo Juice en un servidor para descargar todos los podcasts que escucho.El script utiliza métodos .Net para liberar los objetos COM.Cuando escribí mi script de iTunes, leí un par de artículos que decían que deberías liberar tus objetos COM usando .NET.


    [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$LibrarySource)
    [void][System.Runtime.InteropServices.Marshal]::ReleaseComObject([System.__ComObject]$iTunes)

También ejecuto mis scripts la mayor parte del tiempo desde un acceso directo, no desde el indicador de PowerShell.

Según sus comentarios, hice algunas pruebas y determiné que recibiría el mensaje cuando ejecutara en iTunes, si ejecutaba mi script de una manera que dejara PowerShell ejecutándose.iTunes parece realizar un seguimiento de eso.Al ejecutar el script de manera que salga de su proceso después de ejecutarlo, se eliminó el mensaje.

Un método para ejecutar su secuencia de comandos desde PowerShell es anteponer su secuencia de comandos con PowerShell.

powershell .\scriptname.ps1

El comando anterior iniciará su secuencia de comandos y luego saldrá del proceso que se utilizó para ejecutarlo, pero aún lo dejará en el indicador de PowerShell.

Otros consejos

Debería poder configurar $itunes en $null.Alternativamente, $itunes debería tener un método de salida al que puedas llamar.$itunes.salir()

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top