Windows 10에서 Powershell이 ​​느리게 시작됨

Windows 10에서 Powershell이 ​​느리게 시작됨

Windows 10(버전 1703 - 크리에이터스 업데이트)에서 powershell 프롬프트가 느리게 시작되는 문제가 있습니다.

내 하드웨어 사양(매우 빠른 컴퓨터): Intel i5-7440HQ(쿼드 코어) / 32GB DDR4 RAM / 512 Samsung SSD 하드 드라이브.

프로필과 실행 정책을 우회하려고 했지만 아무 것도 변경되지 않았습니다.

powershell -noprofile -ExecutionPolicy 우회(Measure-Command { powershell "Write-Host 1" } ).TotalSeconds

6,228067

크리에이터스 업데이트가 없는 Windows 10이 설치된 내 친구의 동일한 노트북은 0.5초 이내에 powershell을 실행합니다.

또한 ngen.exe로 컴파일을 시도했지만 도움이 되지 않았습니다.

$env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | % {
  if (! $_.location) {continue}
  $Name = Split-Path $_.location -leaf
  Write-Host -ForegroundColor Yellow "NGENing : $Name"
  ngen install $_.location | % {"`t$_"}
}

이 문제를 어떻게 조사할 수 있을까요?

인사말

답변1

나에게도 이런 일이 일어났습니다. 비록 최선의 경로는 아닐 수도 있지만, powershell.exe목록에 추가했습니다.Windows Defender 제외20초에서 1초 미만으로 속도를 높였습니다.

레거시 콘솔을 사용하고 PSReadLine을 제거하고 ngen을 실행하는 것은 전혀 도움이 되지 않는 것 같습니다.

답변2

다음 오류로 인해 PowerShell이 ​​시작 시 실패하기 시작할 때까지 꽤 오랫동안 동일한 문제가 발생했습니다.

Exception:
System.OutOfMemoryException: Array dimensions exceeded supported range.
   at System.Collections.Generic.List`1.set_Capacity(Int32 value)
   at System.Collections.Generic.List`1.EnsureCapacity(Int32 min)
   at System.Collections.Generic.List`1.Add(T item)
   at System.IO.File.InternalReadAllLines(String path, Encoding encoding)
   at Microsoft.PowerShell.PSConsoleReadLine.<ReadHistoryFile>b__67_0()
   at Microsoft.PowerShell.PSConsoleReadLine.WithHistoryFileMutexDo(Int32 timeout, Action action)
   at Microsoft.PowerShell.PSConsoleReadLine.DelayedOneTimeInitialize()
   at Microsoft.PowerShell.PSConsoleReadLine.Initialize(Runspace runspace, EngineIntrinsics engineIntrinsics)
   at Microsoft.PowerShell.PSConsoleReadLine.ReadLine(Runspace runspace, EngineIntrinsics engineIntrinsics)
-----------------------------------------------------------------------

이로 인해 기존 Github 문제가 발생했습니다.https://github.com/Powershell/PSReadLine/issues/673

~\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\그때까지 6GB가 넘는 기록 파일을 삭제하려고 시도한 후 PowerShell 콘솔이 꽤 빨리 열리기 시작했습니다.

어쩌면 여러분이 경험하는 속도 저하는 PowerShell이 ​​대용량 기록 파일(아직 OutOfMemory.

답변3

Powershell 시작 속도가 느려지는 원인에는 다른 이유가 있을 수 있지만언제나속도 저하의 원인은 Windows 업데이트입니다.

ngen로드된 모든 어셈블리 Powershell에서 실행하는 대신 , 제가 하고 싶은 것은 ngen update전역적으로 설치된 모든 어셈블리를 최적화하는 실행입니다.

. (Join-Path ([Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()) ngen.exe) update

2019년 5월 Win10으로 업데이트한 후 성능이 개선된 것을 확인했습니다.

(measure-command { powershell.exe -command "1+1" }).TotalSeconds

~1.35초에서 ~0.55초까지.

답변4

procmon(sysinternals 도구)을 사용하여 powershell.exe를 분석한 후 프로세스가 catroot2 폴더에서 작업을 시도하고 있는 것을 볼 수 있으므로 이름을 바꾼 후(폴더를 차단하는 CryptSvc 서비스를 중지해야 함) 자동으로 생성되었습니다. 그래서 결론은 폴더가 손상되었다는 것입니다. (내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다)

다음 .bat 실행

net stop CryptSvc /y
rename c:\windows\system32\catroot2 Catroot2.bak
net start CryptSvc

관련 정보