2010-12-09 12 views
16

¿Hay un comando que borre las variables de sesión actuales de powershell que he agregado?sesión de clear powershell

Estoy usando el comando Add-Type y obtengo el error "No se puede agregar el tipo. El nombre del tipo ya existe".

Respuesta

7

Desafortunadamente, no puede descargar los ensamblados .NET que se han cargado en el AppDomain predeterminado, que es lo que hace Add-Type. Puede cambiar el nombre de los tipos o espacios de nombres para que colapse, pero en algún momento solo tiene que salir y reiniciar PowerShell.

Esto no es una limitación de PowerShell tanto como una limitación de .NET/CLR. Puede cargar ensamblados de .NET en AppDomains separados que pueden descargarse más tarde, pero tendría que codificarlo usted mismo e impone restricciones sobre los tipos que planea usar en el Dominio de la aplicación por separado. Es decir, esos tipos necesitan trabajar a través de .NET Remoting, por lo que deben derivarse de MarshByRefObject o tienen que ser serializables (y esto se aplica a todos los objetos a los que hacen referencia sus propiedades, y así sucesivamente, al gráfico del objeto).

+4

¿Pero hay algún comando para reiniciar su sesión de PowerShell? – Agzam

+0

No hay forma de descargar los ensamblados agregados a través de Add-Type. Debe reiniciar PowerShell. Puede cargar los ensamblajes a través de Add-Type y experimentar con esos tipos usando trabajos en segundo plano (Start-Job). Cada trabajo genera una nueva instancia de PowerShell que desaparece cuando se completa ese trabajo. –

+0

Pero, ¿y si tienes código en línea C# en el script? Hace que depurar la secuencia de comandos sea doloroso – Agzam

6

Una posible "trabajo en torno a": Abre una ventana de PowerShell y después de ejecutar la secuencia de comandos entrar powershell .\yourScriptHere.ps1

este modo se inicia una nueva instancia de PowerShell que sale cuando el script finaliza. Si desea "jugar" en la nueva instancia, cambie la invocación al powershell -NoExit .\yourScriptHere.ps1 y la nueva instancia no se cerrará cuando finalice la secuencia de comandos. Ingrese exit cuando necesite otro reinicio y presione la tecla "flecha arriba" para obtener el comando anterior. Todos los resultados del script aparecerán en la misma ventana. La sobrecarga para iniciar una nueva instancia de PowerShell es baja, parece ser menos de 1 segundo en mi computadora portátil.