Nel contesto dello sviluppo di cmdlet e problemi di scaricamento della DLL, esistono due approcci che utilizzo.
In primo luogo, sviluppo in Visual Studio e programma un programma esterno (PowerShell) per caricare il cmdlet. In questo modo, il mio modulo si carica quando avvio il debug e scarica quando interrompo il debug.
In secondo luogo, in quelle occasioni in cui so che voglio caricare un modulo, fare un po 'di lavoro e assicurarmi che il modulo venga scaricato successivamente, io uso una seconda istanza di PowerShell. Questo è stato discusso in altre risposte, e la mia risposta qui sotto mostra come abilito questo flusso di lavoro usando una funzione con un alias nel mio profilo. Io cambio il prompt in modo da avere un promemoria visivo in cui sono in una "finestra ricorsiva di PowerShell".
Creare uno script nel tuo profilo per iniziare a 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
Modifica le impostazioni di debug per il progetto Cmdlet
programma esterno Inizio:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
argomenti della riga di comando:
-NoProfile -NoExit -Command "Import-Module .\MyCoolCmdlet.dll"
eseguire il debug del modulo
Ora da Visual Studio, avviare debugger con F5, e si dispone di una nuova finestra di PowerShell con il cmdlet caricato, e puoi eseguire il debug come preferisci.
utilizzare l'alias 'SDP' da qualsiasi finestra PowerShell
Dal momento che la funzione Start-DebugPowerShell è nel nostro profilo e abbiamo dato un alias sdp
, è possibile utilizzare questo per avviare una seconda istanza di PowerShell in qualsiasi momento ne hai bisogno.
Ho esplorato anche questo - voglio distribuire un pacchetto di nuget come plug-in di PowerShell e, per consentire l'aggiornamento del pacchetto, deve essere in grado di eliminare la vecchia versione del pacchetto (che contiene il supporto dll). Penso che avvolgere le funzioni in una riga di comando exe sarà probabilmente la migliore scommessa. :( –