2012-01-09 8 views
6

Cómo actualizar Powershell_ise para los contenidos modificados fuera del IDE.Powershell_ise no actualiza la modificación realizada fuera de

mayor parte del tiempo me habría abierto tanto Powershell_ise y Notepad ++

Si I no cambios en Powershell_ise, Notepad ++ pide recarga pero si modifico en Notepad ++ no hay manera de refrescar en Powershell_ise.

Si hay alguna manera de actualizar el contenido o estoy pasando por alto cualquier característica que proporciona esto?

+0

¿Qué versión de powershellgui está utilizando? La mía lo hace ahora y es la versión 2.4.0.1659 – JNK

+0

@JPBlanc Fwiw, he encontrado que PowerGUI tiene problemas. [La finalización relativa de la ruta está desactivada] (http://en.community.dell.com/techcenter/powergui/f/4833/t/19603445), y con la depuración complicada, a menudo llegué a estados en los que lo que hay en algunas variables no cambiará hasta que reinicie PowerGUI, un estado que es difícil de detectar. También puede obtener un poco de RAM con hambre a veces. Si pudiéramos tener la estabilidad de ISE con las sutilezas de PowerGUI (o incluso solo la detección de edición), estaría mucho más feliz. Esta * es * la "característica asesina" que falta ISE 3. – ruffin

+0

Desde PowerShell 3 utilizo ISE, está bien para mí. – JPBlanc

Respuesta

3

PowerShell ISE no admite la actualización automática de los archivos modificados. No está allí incluso en ISE v3.

Hay conexión sugerencia sobre este tema: https://connect.microsoft.com/PowerShell/feedback/details/711915/open-ise-files-should-update-when-edited-externally

Sin embargo, esto se puede hacer mediante el modelo de objetos de PowerShell ISE y concurso completo PowerShell. Explore la colección $ psise.CurrentFile y $ psise.CurrentPowerShellTab.Files. Esto debe darle suficiente información para escribir su propio complemento simple.

+1

Votado ... +1. Nunca me ha gustado el ISE. Solo falta demasiado. Deberían conseguir que parte del equipo visual studio trabaje en ello. Hasta entonces PowerGUI FTW :-) –

+0

¿Has usado ISE en v3? ¡Puedes hacer bastante! – ravikanth

+1

En pocas palabras, solo le di otra mirada y tiene razón, ha mejorado mucho. Intellisense para proveedores woot: 'hklm: \' ... y desplegable ... agradable. –

3

Esta publicación es antigua, pero pensé que publicaría esto porque google me trajo aquí con el mismo problema.

que finalmente acabo de escribir esta pequeña función que no hace exactamente lo que el PO quería, pero tal vez otros empleados de Google encontrarán útil:

function Build { 
    #Reload file 
    $CurrentFile = $psise.CurrentFile 
    $FilePath = $CurrentFile.FullPath 
    $PsISE.CurrentPowerShellTab.Files.remove($CurrentFile) 
    $PsISE.CurrentPowerShellTab.Files.add($FilePath) 

    iex $PsISE.CurrentPowerShellTab.Files.Editor.Text 
} 

$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear() 
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Reload file and run",{Build},'f4') 

No es perfecto, pero es lo suficientemente bueno para mí por ahora . Todo lo que hace es crear un enlace de clave que se cierra, se vuelve a abrir y luego ejecuta el archivo actual. Es un poco discordante porque cuando lo ejecutas perderás la posición actual del cursor cuando el archivo se cierre y se vuelva a abrir. Estoy seguro de que podría almacenar la columna y la posición de línea del cursor y restaurarlo al volver a cargar, pero soy demasiado perezoso para molestarme con eso por el momento.

Editar: Accidentalmente publiqué una versión antigua que no funciona de mi código. Actualizado con la versión de trabajo.

2

Aquí es un giro diferente en el guión de red888:

function Reload { 

    $CurrentFile = $psise.CurrentFile 
    $FilePath = $CurrentFile.FullPath 

    $lineNum = $psise.CurrentFile.Editor.CaretLine 
    $colNum = $psise.CurrentFile.Editor.CaretColumn 

    $PsISE.CurrentPowerShellTab.Files.remove($CurrentFile) > $null 

    $newFile = $PsISE.CurrentPowerShellTab.Files.add($FilePath) 

    $newfile.Editor.SetCaretPosition($lineNum,$colNum) 
} 

$psISE.CurrentPowerShellTab.AddOnsMenu.SubMenus.Clear() 
$psISE.CurrentPowerShellTab.AddOnsMenu.Submenus.Add("Reload File",{Reload},'f4') > $null 

Restaura la posición del cursor después de la recarga. Quité la línea

iex $PsISE.CurrentPowerShellTab.Files.Editor.Text 

Como no ella y su también no es el mismo que ejecutar la secuencia de comandos (y por lo que los resultados en el extraño comportamiento de declaraciones como $script:MyInvocation.MyCommand.Path) necesitaba.

Dicho sea de paso, si coloca este código en su perfil ISE, se ejecutará automáticamente cuando cargue por primera vez el ISE. El perfil de ISE es solo un script de powershell cuya ubicación viene dada por la variable $profile.

Aquí hay algunos comandos que crean el perfil si no existe, y luego lo abre. Ejecútelo desde el interior del ISE:

if (!(Test-Path (Split-Path $profile))) { mkdir (Split-Path $profile) } ; 
if (!(Test-Path $profile)) { New-Item $profile -ItemType file } ; 
notepad $profile 
+0

Bien, pero ¿dónde puedo poner eso para que se ejecute automáticamente cuando ejecuto PS-ISE? Además, la ejecución mantiene la posición de intercalación, pero aún pierde 'la selección', y la' posición exacta (a.k.a. desplazamiento) 'en el archivo. Lo peor es que probablemente la nueva pestaña no vuelva a abrir en el mismo índice en la barra de pestañas. ¿Se puede reparar alguno de estos? – Balmipour

+1

@Balmipour Escriba '$ profile' en el símbolo del sistema de ISE, luego coloque el código en ese archivo. En cuanto a las otras cosas, no estoy tan seguro, también noté que esta solución no es ideal. – Oliver

Cuestiones relacionadas