En el contexto del desarrollo de Cmdlet, y teniendo problemas con la descarga de su DLL, hay dos enfoques que yo uso.
En primer lugar, desarrollo en Visual Studio y configuro un programa externo (PowerShell) para cargar mi Cmdlet. De esta forma, mi módulo se carga cuando comienzo la depuración y se descarga cuando dejo de depurar.
En segundo lugar, en las ocasiones en que sé que quiero cargar un módulo, hacer algún trabajo y asegurar que el módulo se descargue después, utilizo una segunda instancia de PowerShell. Esto se ha discutido en otras respuestas, y mi respuesta a continuación muestra cómo habilito este flujo de trabajo mediante el uso de una función con un alias en mi perfil. Cambio el mensaje para que pueda tener un recordatorio visual de que estoy en una "ventana recursiva de PowerShell".
Crear una secuencia de comandos en su perfil para iniciar PowerShell
function Start-DebugPowerShell
{
PowerShell -NoProfile -NoExit -Command {
function prompt {
$newPrompt = "$pwd.Path [DEBUG]"
Write-Host -NoNewline -ForegroundColor Yellow $newPrompt
return '> '
}
}
}
Set-Alias -Name sdp -Value Start-DebugPowerShell
Editar configuración de depuración para su proyecto de cmdlet
programa externo de inicio:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
argumentos de línea de comandos:
-NoProfile -NoExit -Command "Import-Module .\MyCoolCmdlet.dll"
depurar el módulo
Ahora desde Visual Studio, iniciar depurador con F5, y usted tiene una nueva ventana de PowerShell con su carga de cmdlet, y puedes depurarlo como desees.
utiliza el alias 'SDP' desde cualquier ventana de PowerShell
Dado que la función de puesta en DebugPowerShell está en nuestro perfil y que nos dio un alias sdp
, se puede usar esto para iniciar una segunda instancia de PowerShell en cualquier momento lo necesita.
He estado explorando esto también - Quiero distribuir un paquete nuget como un complemento de Powershell, y para permitir que el paquete se actualice, necesita poder eliminar la versión anterior del paquete (que contiene el dlls de soporte). Creo que envolver las funciones en un ejecutable de línea de comandos probablemente sea la mejor opción. :( –