Powershell bardzo wolno się otwiera / reaguje

12

Mam problem z uruchomieniem programu PowerShell 3.0 w systemie Windows 7 64-bit. Uruchamianie / uruchamianie zajmuje bardzo dużo czasu. Jest również dość powolny w odpowiedzi na prawie wszystko.

Myślę, że może to wynikać z faktu, że mój profil jest przechowywany w moich dokumentach, a folder moich dokumentów jest synchronizowany z naszą siecią.

Czy jest jakiś sposób na przeniesienie lokalizacji mojego profilu, aby mógł on być lokalny zamiast przez sieć?

czuroski
źródło
1
dla mnie też jest wolny, a mój profil ma bezpośredni dostęp do dysku. również jest odczytywany raz, buforowany przez system operacyjny i zamykany po uruchomieniu, więc sieć nie powinna mieć żadnego wpływu. to tylko stwardnienie rozsiane stwardnienie rozsiane próba przerobienia koła, ale znowu kwadrat.
v.oddou

Odpowiedzi:

17

PowerShell opiera się na .NET Framework , możesz spróbować zaktualizować to.

Ten skrypt również pomógł mojej prędkości

$Env:PATH = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | % {
  $pt = $_.Location
  if (! $pt) {continue}
  if ($cn++) {''}
  $na = Split-Path -Leaf $pt
  Write-Host -ForegroundColor Yellow "NGENing $na"
  ngen install $pt
}
Steven Penny
źródło
1
Dziękuję Ci! Co za duża różnica po uruchomieniu tego skryptu.
WeSam Abdallah
3
Co to robi?
Pureferret,
2
Instalacja ngen.exe:Generate native images for an assembly and its dependencies and install them in the Native Images Cache. If /queue is specified compilation job is queued up. If a priority is not specified, the default priority used is 3.
VertigoRay
Jestem… zaskoczony i pod wrażeniem :-)
Chris F Carroll
1

Powyższa odpowiedź, która mówi o NGEN, skróciła mój czas uruchamiania z ponad 30 sekund do poniżej 5.

Jednak widziałem również przypadki, w których naciśnięcie Ctrl-C po odczekaniu kilku sekund powoduje wyświetlenie monitu i już wykonałem sztuczkę NGEN powyżej i podejrzewam, że to moje skrypty spowalniają mnie.

Jeśli minęło ponad 30 sekund, a wypróbowałeś już sztuczkę NGEN powyżej, najczęstszą przyczyną jest to, że skrypty PowerShell profilu osobistego i systemowego długo się uruchamiają. Jeśli narzekasz na opóźnienie krótsze niż 10 sekund, to prawdopodobnie .net zaczyna się wolno.

Jeśli pracujesz na maszynie wirtualnej, a host maszyny wirtualnej jest całkowicie zajęty i związany z operacjami we / wy, podobnie jak większość środowisk VM o nadmiernej dostępności i niedofinansowanych, to tyle.

Warren P.
źródło
0

Istnieje kilka różnych domyślnych miejsc, w których można przechowywać profil Powershell.

  • Pierwsza lokalizacja to lokalizacja globalna i byłaby przydatna, gdy chcesz, aby wszyscy użytkownicy mieli dostosowany profil programu PowerShell. Ten profil powinien zostać umieszczony w

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Profile.ps1
    
  • Druga lokalizacja dotyczy profilu lokalnego i byłaby specyficzna dla każdego konta użytkownika. Ten plik zastępuje globalny plik konfiguracyjny i powinien zostać umieszczony w

    C:\Username\My Documents\WindowsPowerShell\Profile.ps1
    

W ramach testu spróbuj zmodyfikować globalny profil Powershell (znajdujący się w systemie32) i sprawdź, czy to przyspieszy. Jeśli tak, będziesz wiedział, że powolność jest w jakiś sposób spowodowana siecią i możesz stamtąd iść do przodu.

jmreicha
źródło
0

Ostatnio miałem podobny problem podczas tworzenia binarnego modułu PowerShell. Moja konsola była bardzo wolna w odpowiedzi na prawie wszystko. Skrypt Stevena Penny'ego zadziałał dla mnie, ale tylko na instancję PowerShell. Naprawdę nie rozumiałem, co się dzieje w jego scenariuszu; więc szedłem linia po linii, żeby zobaczyć, gdzie jest mój problem.

Skończyło się to na zmiennej środowiskowej mojej ścieżki. Miałem ciąg ścieżki UNC w mojej zmiennej ścieżki i opóźnienie zostało spowodowane, ponieważ PowerShell otworzy / zamknie połączenie dla każdego wykonania (tj. Za każdym razem, gdy naciśniesz klawisz Enter).

Aaron Ray
źródło
2
Co to jest UNC? Jak to naprawiłeś?
Tomáš Zato - Przywróć Monikę
1
@ TomášZato - Universal Naming Convention (UNC) to ścieżka zawierająca ukośniki do przodu lub do tyłu. Rozumiem, że ten komentarz jest spóźniony 4 lata, pomyślałem, że chciałbyś wiedzieć, ponieważ nikt nigdy nie zadał sobie trudu, by odpowiedzieć na twoje pytanie. Zakładam, że autor usunął ścieżkę UNC ze swojej zmiennej systemowej.
Ramhound,
@Ramhound Thanks!
Tomáš Zato - Przywróć Monikę