source

PowerShell 단계를 통해 느린 시작 수정

manysource 2023. 10. 2. 15:06

PowerShell 단계를 통해 느린 시작 수정

PowerShell 콘솔 시작 시간이 느려서(항상 5초 이상 대기) 병목 현상이 발생할 수 있는 문제 해결 단계에 대한 조언을 구하고 싶었습니까?

스크립트를 실행하기 위해 읽어본적이 있습니다.-NoProfile모듈 등이 로드되는 것을 방지하는 것은 중요하지만, 일반적으로 무엇이 속도를 늦추고 있는지 파악하는 데 어떻게 접근해야 합니까?저는 모듈이 많이 설치되어 있지 않고 PowerShell 3.0 이후로 모듈이 시작할 때 참조되고 완전히 로드되지 않는다는 것을 알고 있습니다(모듈은 지정된 모듈의 기능이 호출될 때만 완전히 로드됩니다). 따라서 베어 콘솔을 시작하는 데 5초 이상 걸리는 이유를 이해할 수 없습니다($프로필도 비어 있습니다).

콘솔 시작 프로세스를 디버깅하기 위해 살펴볼 수 있는 다양한 단계에 대한 조언을 주시면 감사하겠습니다.또한 콘솔 시작 프로세스의 다양한 단계를 디버깅하여 병목 현상을 찾는 마이크로소프트 또는 타사 도구가 일부 존재할 수 있습니까?

PowerShell 시작 시 속도가 느려지기 시작하면 의 업데이트를 수행합니다.NET 프레임워크가 원인일 수 있습니다.다시 속도를 높이려면 다음을 사용합니다.ngen.exe파워셸의 어셈블리에 저장되어 있습니다.어셈블리와 해당 종속성에 대한 네이티브 이미지를 생성하여 네이티브 이미지 캐시에 설치합니다.

관리자로 실행

$env:PATH = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | ForEach-Object {
    $path = $_.Location
    if ($path) { 
        $name = Split-Path $path -Leaf
        Write-Host -ForegroundColor Yellow "`r`nRunning ngen.exe on '$name'"
        ngen.exe install $path /nologo
    }
}

도움이 되기를 바랍니다.

저 같은 경우는 아나콘다 때문에 프로필 로딩에 시간이 오래 걸렸습니다.이 영역을 제거한 후:

#region conda initialize
# !! Contents within this block are managed by 'conda init' !!
(& "C:\Users\USERNAME\anaconda3\Scripts\conda.exe" "shell.powershell" "hook") | Out-String | Invoke-Expression
#endregion

C:\Users\USERNAME\OneDrive\Documents\Windows PowerShell[profile.ps1|마이크로소프트.PowerShell_profile.ps1] 경로에서 로드가 즉시 완료되었습니다.

하지만 물론, 당신의 경우에는 문제를 일으키지 않을 것임을 알아야 합니다.

내 업무용 컴퓨터는 메인 프로파일을 원격 서버에 저장했습니다.또 다른 사소한 문제는 4개의 다른 profile.ps1 파일에서 중복 모듈을 가져온다는 것입니다.

다음 명령을 사용하여 프로파일 및 모듈이 저장된 위치를 확인할 수 있습니다.불필요한 profile.ps1을 삭제하고 모든 모듈을 하나의 디렉토리로 이동합니다.

echo $env:PSModulePath

$profile | select *

로딩 시간이 21000ms에서 1300ms로 단축되었습니다.

같은 문제가 있는 구글을 검색했을 때 2022년에 이 솔루션을 찾았습니다.불행하게도 이것은 제 문제를 해결하지 못했습니다.

당사 시스템에는 "PowerShell Transcription 사용"에 대한 그룹 정책 보안 요구 사항이 있습니다.정책에 따라 "Central Log Server 또는 다른 안전한 위치를 가리키기 위한 Transcript 출력 디렉토리"를 지정해야 합니다.서버 이름이 변경되었고 아무도 정책을 업데이트하지 않았습니다.GPO를 새 위치로 업데이트하자마자 PowerShell이 다시 열렸습니다.

컴퓨터가 인터넷에 직접 접속할 수 없는 경우 다음과 같은 해결책이 도움이 될 수 있습니다.

이 솔루션은 eizedev에서 요약한 이 PowerShell 문제에 대한 의견에서 삭제되었습니다.

이 의견을 따르는 것을 권장하지만 SO 지침을 위해 일부 내용을 여기에 재현했습니다.

원인

인터넷에서 연결이 끊어진 시스템의 경우 인터넷에서 인증서 해지 목록을 검색하려고 시도하는 경우가 여전히 있으며, PowerShell 시작 프로세스가 완료되기 전에 이 요청이 시간 초과되어야 합니다.

특히 모듈 PSReadLine을 가져오는 동안 이 작업이 수행됩니다.

해결책

이러한 목록을 직접 인터넷에 접속하지 않고도 컴퓨터에서 사용할 수 있도록 하는 방법을 고려합니다.(예: 인증서 해지 목록 배포 지점 구성?)

해결방법

이 해결 방법은 연결이 끊긴 시스템에서 시스템 인증서를 검사할 때의 시간 초과를 15초에서 1초로 줄이는 것입니다.

경고 이 변경 사항은 시스템 전체에 걸쳐 적용되며 PowerShell에만 영향을 미치는 것은 아닙니다.

이 작업을 실행하기 전에 전체 고려 사항을 보려면 링크된 PowerShell 문제 스레드를 참조하십시오.

# Create the keys if missing 
If((Test-Path 'HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ChainEngine') -eq $false ) { New-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ChainEngine' -Force -ErrorAction SilentlyContinue }
If((Test-Path 'HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ChainEngine\Config') -eq $false ) { New-Item -Path 'HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ChainEngine\Config' -Force -ErrorAction SilentlyContinue }

# Set Timeout values to 1 second (1000 ms)
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ChainEngine\Config" -Name ChainUrlRetrievalTimeoutMilliseconds -Value 1000 -PropertyType DWORD -Force
New-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\SystemCertificates\ChainEngine\Config" -Name ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds -Value 1000 -PropertyType DWORD -Force

Windows+R Type %temp% 를 누르고 C+A & SHIFT+DEL 입력을 누르면 됩니다.

언급URL : https://stackoverflow.com/questions/59341482/powershell-steps-to-fix-slow-startup