Powershell molto lento ad aprire / rispondere


11

Sto riscontrando un problema con PowerShell 3.0 su Windows 7 a 64 bit. Ci vuole molto tempo per aprirlo / avviarlo quando lo si esegue. È anche piuttosto lento in risposta a qualsiasi cosa.

Ritengo che ciò possa essere dovuto al fatto che il mio profilo è archiviato nei miei documenti e che la cartella dei miei documenti è sincronizzata con la nostra rete.

Esiste un modo per spostare la posizione del mio profilo in modo da poterlo localizzare anziché sulla rete?


1
è lento anche per me e il mio profilo è in accesso diretto all'unità. inoltre viene letto una volta, memorizzato nella cache dal sistema operativo e chiuso dopo l'avvio in modo che la rete o no non dovrebbe influenzare nulla. questo è solo uno scarso tentativo di MS di rifare la ruota, ma quadrato, ancora una volta.
v.

Risposte:


17

PowerShell si basa su .NET Framework , puoi provare ad aggiornarlo.

Questo script ha anche aiutato la mia velocità

$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
}

1
Grazie! Che grande differenza dopo aver eseguito questo script.
WeSam Abdallah,

3
Che cosa fa?
Pureferret,

2
Installazione di 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,

Sono ... sorpreso e impressionato :-)
Chris F Carroll,

1

La risposta sopra che parla di NGEN ha ridotto il mio tempo di avvio da oltre 30 secondi a meno di 5.

Tuttavia, ho anche visto casi in cui premere Ctrl-C dopo aver atteso qualche secondo mi porta a un prompt, e ho già fatto il trucco NGEN sopra, e in quel caso, sospetto che siano i miei script a rallentarmi.

Se sono trascorsi più di 30 secondi e hai già provato il trucco NGEN sopra, la ragione più comune è che gli script PowerShell del tuo profilo personale e di sistema impiegano molto tempo per avviarsi. Se ti lamenti per un ritardo inferiore a 10 secondi, probabilmente è .net che è lento ad avviarsi.

Se ci si trova su una macchina virtuale e l'host di macchine virtuali è totalmente abilitato e vincolato a IO come la maggior parte degli ambienti di macchine virtuali con provisioning eccessivo e con risorse insufficienti, allora è quello.


0

Esistono diverse posizioni predefinite in cui è possibile memorizzare il profilo Powershell.

  • La prima posizione è la posizione globale e sarebbe utile quando si desidera che tutti gli utenti dispongano di un profilo Powershell personalizzato. Questo profilo deve essere inserito in

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Profile.ps1
    
  • La seconda posizione è per il profilo locale e sarebbe specifica per ciascun account utente. Questo file sovrascrive il file di configurazione globale e deve essere inserito

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

Come test, prova a modificare il profilo Powershell globale (situato in system32) e vedi se questo accelera le cose. In tal caso saprai che la lentezza è in qualche modo dovuta alla rete e puoi andare avanti da lì.


0

Di recente, ho riscontrato un problema simile durante lo sviluppo di un modulo binario PowerShell. La mia console era estremamente lenta in risposta a quasi tutto. La sceneggiatura di Steven Penny ha funzionato per me, ma solo per istanza di PowerShell. Non capivo davvero cosa stesse succedendo nella sua sceneggiatura; così sono andato linea per linea per vedere dov'era il mio problema.

È finito con il mio percorso variabile ambientale. Avevo una stringa di percorso UNC nella mia variabile di percorso e il ritardo è stato causato, perché PowerShell aprirà / chiuderà la connessione per ogni esecuzione (cioè ogni volta che premi il tasto Invio).


2
Che cos'è UNC? Come lo hai risolto?
Tomáš Zato - Ripristina Monica il

1
@ TomášZato - Universal Naming Convention (UNC) è un percorso che contiene barre in avanti o all'indietro. Capisco che questo commento è in ritardo di 4 anni, ho pensato che avresti voluto saperlo, dal momento che nessuno si è mai preoccupato di rispondere alla tua domanda. Suppongo che l'autore abbia rimosso il percorso UNC dalla sua variabile di sistema.
Ramhound,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.