PowerShell muito lento para abrir / responder

11

Estou com um problema ao executar o PowerShell 3.0 no Windows 7 de 64 bits. Demora muito tempo para abrir / iniciar quando executá-lo. Também é bastante lento em resposta a praticamente qualquer coisa.

Acredito que isso se deve ao fato de meu perfil estar armazenado em meus documentos e a pasta meus documentos estar sincronizada com a nossa rede.

Existe alguma maneira de mover o local do meu perfil para que ele seja local em vez da rede?

czuroski
fonte
1
também é lento para mim e meu perfil está no acesso direto à unidade. também é lido uma vez, armazenado em cache pelo sistema operacional e fechado após a inicialização para que a rede ou não, não deve afetar nada. isto é apenas uma tentativa pobre da MS de refazer a roda, mas quadrada, mais uma vez.
v.oddou

Respostas:

17

O PowerShell conta com o .NET Framework , você pode tentar atualizar isso.

Esse script também ajudou minha velocidade

$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
fonte
1
Obrigado! Que grande diferença depois que eu executei esse script.
WeSam Abdallah
3
O que isso faz?
Pureferret
2
Instalação do 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 23/16
Estou… surpreso e impressionado :-)
Chris F Carroll
1

A resposta acima, que fala sobre NGEN, reduziu meu tempo de inicialização de mais de 30 segundos para menos de 5.

No entanto, também vi casos em que pressionar Ctrl-C depois de esperar alguns segundos me leva a um prompt, e eu já fiz o truque NGEN acima e, nesse caso, suspeito que sejam meus scripts que estão me atrasando.

Se demorar mais de 30 segundos e você já tentou o truque NGEN acima, o motivo mais comum é que seus scripts de PowerShell de perfil pessoal e do sistema estão demorando muito tempo para iniciar. Se você está reclamando de um atraso menor que 10 segundos, provavelmente é .net que demora para começar.

Se você estiver em uma VM e o host da VM estiver totalmente sobrecarregado e vinculado à IO, como a maioria dos ambientes de VM com excesso de provisionamento e recursos insuficientes, então é isso.

Warren P
fonte
0

Existem alguns locais padrão diferentes nos quais o perfil do PowerShell pode ser armazenado.

  • O primeiro local é o local global e seria útil quando você deseja que todos os usuários tenham um perfil personalizado do Powershell. Este perfil deve ser colocado em

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Profile.ps1
    
  • O segundo local é para o perfil local e seria específico para cada conta de usuário. Esse arquivo substitui o arquivo de configuração global e deve ser colocado em

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

Como teste, tente modificar o perfil global do Powershell (localizado no system32) e veja se isso acelera as coisas. Se isso acontecer, você saberá que a lentidão se deve de alguma forma à rede e você pode avançar a partir daí.

jmreicha
fonte
0

Recentemente, tive um problema semelhante ao desenvolver um módulo binário do PowerShell. Meu console estava extremamente lento em resposta a quase tudo. O script de Steven Penny funcionou para mim, mas apenas por instância do PowerShell. Eu realmente não entendi o que estava acontecendo em seu roteiro; então eu fui linha por linha para ver onde estava o meu problema.

Acabou sendo com a minha variável ambiental path. Eu tinha a string de caminho UNC na minha variável de caminho, e o atraso foi causado, porque o PowerShell abrirá / fechará a conexão para cada execução (ou seja, toda vez que você pressionar a tecla Enter).

Aaron Ray
fonte
2
O que é UNC? Como você consertou isso?
Tomáš Zato - Restabelece Monica
1
@ TomášZato - Convenção Universal de Nomenclatura (UNC) é um caminho que contém barras ou barras invertidas. Entendo que este comentário está atrasado 4 anos, imaginando que você gostaria de saber, já que ninguém nunca se incomodou em responder sua pergunta. Eu diria que o autor removeu o caminho UNC de sua variável de sistema.
Ramhound 2/10/19
@Ramhound Thanks!
Tomáš Zato - Restabelece Monica