2012-01-09 24 views
6

Jak odświeżyć Powershell_ise dla zawartości zmodyfikowanej poza IDE.Powershell_ise nie odświeża modyfikacji wykonanych poza

Większość czasu I byłby otwarty zarówno Powershell_ise i Notepad ++

Gdybym robi zmian w Powershell_ise, Notepad ++ prosi o przeładowanie ale jeśli modyfikować w Notepad ++ nie ma sposobu, aby odświeżyć w Powershell_ise.

Czy można odświeżyć zawartość, czy też pomijam jakąkolwiek funkcję, która to zapewnia?

+0

Jaką wersję Powerhellgui używasz? Mój robi to teraz i jest wersja 2.4.0.1659 – JNK

+0

@JPBlanc Fwiw, Znalazłem PowerGUI jako nieco błędne. [Względna ścieżka zakończenia jest wyłączona] (http://en.community.dell.com/techcenter/powergui/f/4833/t/19603445), a przy skomplikowanym debugowaniu często dostaję się do stanów, w których to, co jest w niektórych zmiennych, nie zmieni się, dopóki nie zrestartuję PowerGUI, stanu, który jest trudny do wykrycia. Może też czasami trochę odczuwać pamięć RAM. Gdybyśmy mogli mieć stabilność ISE z niuansami PowerGUI (lub nawet po prostu edytować detekcję), byłbym o wiele szczęśliwszy. Ta * jest * "cechą zabójcy", której brakuje w ISE 3. – ruffin

+0

Ponieważ PowerShell 3 używam ISE, to jest dla mnie w porządku. – JPBlanc

Odpowiedz

3

PowerShell ISE nie obsługuje automatycznego odświeżania zmienionych plików automatycznie. Nie ma go nawet w ISE v3.

Jest connect sugestia na ten temat: https://connect.microsoft.com/PowerShell/feedback/details/711915/open-ise-files-should-update-when-edited-externally

Jednak można to zrobić za pomocą PowerShell ISE PowerShell model obiektowy i WKKW. Przeglądaj kolekcję $ psise.CurrentFile i $ psise.CurrentPowerShellTab.Files. To musi dać ci wystarczającą ilość informacji do napisania własnego prostego dodatku.

+1

Głosowało ... +1. Nigdy nie lubiłem ISE. Po prostu brakuje mu zbyt wiele. Powinni popracować nad pracą zespołu visual studio. Do tego czasu PowerGUI FTW :-) –

+0

Użyłeś ISE w wersji 3? Możesz zrobić całkiem sporo! – ravikanth

+1

Krótko mówiąc, spojrzałem jeszcze raz i masz rację, że jest o wiele lepszy. Intellisense dla dostawców woot: 'hklm: \' ... i drop down ... nice. –

3

Ten post jest stary, ale doszedłem do wniosku, że mogę go opublikować, ponieważ google przywiózł mnie tutaj z tym samym problemem.

I w końcu po prostu napisał ten mały funkcję, która nie robi dokładnie to, co PO chciała, ale być może inne Googlersi znajdzie to przydatne:

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') 

Nie jest idealny, ale jest wystarczająco dobre dla mnie teraz . Wszystko co robisz to tworzenie wiązania klucza, które zamyka, ponownie otwiera, a następnie wykonuje bieżący plik. Jest to trochę drażliwe, ponieważ po uruchomieniu go stracisz aktualną pozycję kursora, gdy plik zostanie zamknięty i ponownie otwarty. Jestem pewien, że możesz przechowywać pozycję kolumny i linii kursora i przywracać ją podczas ponownego ładowania, ale jestem zbyt leniwy, aby na razie zawracać sobie tym głowę.

Edytuj: Przypadkowo opublikowałem starszą, niedziałającą wersję mojego kodu. Zaktualizowano wersję roboczą.

2

Oto inny spin na skrypcie red888 za:

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 

Przywraca pozycję karetki po przeładowaniu. Usunąłem linia

iex $PsISE.CurrentPowerShellTab.Files.Editor.Text 

Ponieważ nie muszę go i jego też nie to samo uruchomienie skryptu (a więc wyniki w dziwne zachowanie sprawozdań jak $script:MyInvocation.MyCommand.Path).

Nawiasem mówiąc, jeśli umieścisz ten kod w swoim profilu ISE, zostanie on automatycznie uruchomiony po pierwszym załadowaniu ISE. Profil ISE jest po prostu skryptem powershell, którego lokalizacja jest określona przez zmienną $profile.

Oto niektóre polecenia, które tworzą profil, jeśli nie istnieje, a następnie otwiera go. Uruchom go z poziomu ISE:

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

Miło, ale gdzie mogę to umieścić, aby automatycznie uruchamiał się po uruchomieniu PS-ISE? Ponadto, wykonywanie utrzymuje pozycję karetki, ale nadal traci "wybór" i "dokładną pozycję (przewijanie a.k.a)" w pliku. Gorzej jest prawdopodobnie, że nowa karta nie otwiera się ponownie w tym samym indeksie na pasku kart. Czy można naprawić któryś z nich? – Balmipour

+1

@Balmipour Wpisz "$ profile" w wierszu polecenia ISE, a następnie umieść kod w tym pliku. Jeśli chodzi o inne rzeczy - nie jestem tego pewien, zauważyłem również, że to rozwiązanie nie jest idealne. – Oliver

Powiązane problemy