Powershell très lent à ouvrir / répondre

11

Je rencontre un problème lors de l'exécution de PowerShell 3.0 sur Windows 7 64 bits. Il faut très longtemps pour s'ouvrir / démarrer lors de son exécution. Il est également assez lent en réponse à presque tout.

Je pense que cela peut être dû au fait que mon profil est stocké dans mes documents et que le dossier mes documents est synchronisé avec notre réseau.

Existe-t-il un moyen de déplacer l'emplacement de mon profil afin de pouvoir l'avoir local plutôt que sur le réseau?

czuroski
la source
1
son lent pour moi aussi et mon profil est sur l'accès direct au lecteur. il est également lu une fois, mis en cache par le système d'exploitation et fermé après le démarrage afin que le réseau ou non n'affecte rien. c'est juste une mauvaise tentative de MS pour refaire la roue, mais carrée, encore une fois.
v.oddou

Réponses:

17

PowerShell s'appuie sur le .NET Framework , vous pouvez essayer de le mettre à jour.

Ce script a également aidé ma vitesse

$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
la source
1
Je vous remercie! Quelle grande différence après avoir exécuté ce script.
WeSam Abdallah
3
Qu'est ce que ça fait?
Pureferret
2
Installation 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
Je suis… surpris et impressionné :-)
Chris F Carroll
1

La réponse ci-dessus qui parle de NGEN a réduit mon temps de démarrage de plus de 30 secondes à moins de 5.

Cependant, j'ai également vu des cas où appuyer sur Ctrl-C après avoir attendu quelques secondes me donne une invite, et j'ai déjà fait l'astuce NGEN ci-dessus, et dans ce cas, je soupçonne que ce sont mes scripts qui me ralentissent.

Si cela dépasse 30 secondes et que vous avez déjà essayé l'astuce NGEN ci-dessus, la raison la plus courante est que vos scripts PowerShell de profil personnel et système prennent beaucoup de temps à démarrer. Si vous vous plaignez d'un retard de moins de 10 secondes, c'est probablement .net qui est lent à démarrer.

Si vous êtes sur une machine virtuelle et que l'hôte VM est totalement hogtied et lié aux E / S comme le sont la plupart des environnements de machine virtuelle surapprovisionnés et sous-financés, alors c'est tout.

Warren P
la source
0

Il existe plusieurs emplacements par défaut différents où le profil Powershell peut être stocké.

  • Le premier emplacement est l'emplacement global et serait utile lorsque vous souhaitez que tous les utilisateurs aient un profil Powershell personnalisé. Ce profil doit être placé dans

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Profile.ps1
    
  • Le deuxième emplacement est pour le profil local et serait spécifique à chaque compte d'utilisateur. Ce fichier remplace le fichier de configuration globale et doit être placé dans

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

À titre de test, essayez de modifier le profil Powershell global (situé dans system32) et voyez si cela accélère les choses. Si c'est le cas, vous saurez que la lenteur est en quelque sorte due au réseau et vous pouvez avancer à partir de là.

jmreicha
la source
0

Récemment, j'ai eu un problème similaire lors du développement d'un module PowerShell binaire. Ma console était extrêmement lente en réponse à presque tout. Le script de Steven Penny a fonctionné pour moi, mais uniquement par instance de PowerShell. Je ne comprenais pas vraiment ce qui se passait dans son script; donc je suis allé ligne par ligne pour voir où était mon problème.

Il a fini par être avec ma variable environnementale de chemin. J'avais une chaîne de chemin UNC dans ma variable de chemin, et le retard a été causé, car PowerShell ouvrira / fermera la connexion pour chaque exécution (c'est-à-dire chaque fois que vous appuyez sur la touche Entrée).

Aaron Ray
la source
2
Qu'est-ce que l'UNC? Comment l'avez-vous réparé?
Tomáš Zato - Réintègre Monica
1
@ TomášZato - Universal Naming Convention (UNC) est un chemin qui contient des barres obliques avant ou arrière. Je comprends que ce commentaire a 4 ans de retard, pensait que vous voudriez le savoir, car personne n'a jamais pris la peine de répondre à votre question. Je suppose que l'auteur a supprimé le chemin UNC de leur variable système.
Ramhound
@Ramhound Merci!
Tomáš Zato - Rétablir Monica