Powershell muy lento para abrir / responder

11

Tengo un problema al ejecutar PowerShell 3.0 en Windows 7 de 64 bits. Se tarda mucho tiempo en abrir / iniciar cuando se ejecuta. También es bastante lento en respuesta a casi cualquier cosa.

Creo que esto puede deberse al hecho de que mi perfil está almacenado en mis documentos y la carpeta de mis documentos está sincronizada con nuestra red.

¿Hay alguna manera de que pueda mover la ubicación de mi perfil para que pueda tenerlo local en lugar de a través de la red?

czuroski
fuente
1
también es lento para mí y mi perfil está en acceso directo al disco. También se lee una vez, se almacena en caché por el sistema operativo y se cierra después del inicio para que la red o no afecte nada. esto es solo un intento pobre de MS de rehacer la rueda, pero cuadrado, una vez más.
v.oddou

Respuestas:

17

PowerShell se basa en .NET Framework , puede intentar actualizarlo.

Este script también ayudó a mi velocidad

$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
fuente
1
¡Gracias! Qué gran diferencia después de ejecutar este script.
WeSam Abdallah
3
¿Qué hace?
Pureferret
2
Instalación de 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
Estoy ... sorprendido e impresionado :-)
Chris F Carroll
1

La respuesta anterior que habla sobre NGEN redujo mi tiempo de inicio de más de 30 segundos a menos de 5.

Sin embargo, también he visto casos en los que presionar Ctrl-C después de esperar unos segundos me lleva a un mensaje, y ya hice el truco NGEN anterior, y en ese caso, sospecho que son mis scripts los que me están ralentizando.

Si han pasado más de 30 segundos y ya probaste el truco NGEN anterior, la razón más común es que tus scripts de PowerShell de perfil personal y del sistema están tardando mucho en comenzar. Si se queja de un retraso de menos de 10 segundos, entonces es probable que .net sea lento para comenzar.

Si está en una máquina virtual y el host de la máquina virtual está totalmente acorralado y sujeto a E / S como la mayoría de los entornos de máquinas virtuales con exceso de aprovisionamiento y recursos insuficientes, entonces eso es todo.

Warren P
fuente
0

Hay algunos lugares predeterminados diferentes en los que se puede almacenar el perfil de Powershell.

  • La primera ubicación es la ubicación global y sería útil cuando desee que todos los usuarios tengan un perfil Powershell personalizado. Este perfil debe colocarse en

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Profile.ps1
    
  • La segunda ubicación es para el perfil local y sería específica para cada cuenta de usuario. Este archivo anula el archivo de configuración global y debe colocarse en

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

Como prueba, intente modificar el perfil global de Powershell (ubicado en system32) y vea si eso acelera las cosas. Si lo hace, sabrá que la lentitud se debe de alguna manera a la red y puede avanzar desde allí.

jmreicha
fuente
0

Recientemente, tuve un problema similar al desarrollar un módulo binario de PowerShell. Mi consola fue extremadamente lenta en respuesta a casi cualquier cosa. El script de Steven Penny funcionó para mí, pero solo por instancia de PowerShell. Realmente no entendí lo que estaba sucediendo en su guión; Así que fui línea por línea para ver dónde estaba mi problema.

Terminó siendo con mi camino variable ambiental. Tenía la cadena de ruta UNC en mi variable de ruta y se produjo el retraso, porque PowerShell abrirá / cerrará la conexión para cada ejecución (es decir, cada vez que presione la tecla Intro).

Aaron Ray
fuente
2
¿Qué es UNC? ¿Cómo lo arreglaste?
Tomáš Zato - Restablece a Mónica el
1
@ TomášZato: la Convención de nomenclatura universal (UNC) es una ruta que contiene barras inclinadas hacia adelante o hacia atrás. Entiendo que este comentario lleva 4 años de retraso, pensé que querría saberlo, ya que nadie se molestó en responder su pregunta. Supongo que el autor eliminó la ruta UNC de su variable de sistema.
Ramhound
@Ramhound ¡Gracias!
Tomáš Zato - Restablece a Monica el