解决启动缓慢的 PowerShell 步骤

Yor*_*ubs 10 console powershell startup

我的 PowerShell 控制台启动时间很慢(等待时间总是超过 5 秒),并且希望获得有关故障排除步骤的建议,以找出瓶颈可能在哪里?

我已经读过,对于运行脚本来说,-NoProfile对于防止模块等加载很重要,但一般来说,我们应该如何找出导致事情变慢的原因?我没有安装很多模块,我知道从 PowerShell 3.0 开始,模块只是在启动时引用而不是完全加载(模块只有在调用给定模块的函数时才完全加载),所以我无法理解为什么启动一个裸控制台需要 5 秒以上(我的 $profile 也是空的)。

关于调试控制台启动过程的各个步骤的任何建议将不胜感激?另外,是否可能存在一些 Microsoft 或第三方工具来调试控制台启动过程中的各个步骤以查找瓶颈?

The*_*heo 10

当 PowerShell 在启动时开始变慢时,原因可能是 .NET 框架的更新。要再次加速,请ngen.exe在 PowerShell 的程序集上使用。它为程序集及其依赖项生成本机映像,并将它们安装在本机映像缓存中。

管理员身份运行

$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
    }
}
Run Code Online (Sandbox Code Playgroud)

希望有帮助

  • 感谢 Theo,但这根本没有影响我的启动时间(之后我还完全重新启动,以防万一可能有帮助,但没有运气)。这作为要采取的步骤的一部分很有用,也许它可以帮助其他人。关于控制台启动缓慢的原因还有其他想法吗? (2认同)
  • 谢谢西奥,这是一篇非常有趣的文章,我已经阅读了所有这些文章,但没有运气。通过执行所有这些操作,我可能在启动时重新获得了 0.5 秒的时间,但它仍然非常慢(值得注意的是,我发现在具有非常快的现代 i5 CPU 的现代操作系统上打开控制台需要 5 秒以上的时间,这非常糟糕 -我的意思是,如果控制台在不到 1 秒内没有打开,至少可以说这对 PowerShell 来说不是一个好的广告!)。 (2认同)

小智 7

就我而言,是 Anaconda 导致我的个人资料加载需要很长时间。我删除该区域后:

#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
Run Code Online (Sandbox Code Playgroud)

从我的C:\Users\USERNAME\OneDrive\Documents\WindowsPowerShell[profile.ps1|Microsoft.PowerShell_profile.ps1]路径,加载变得即时。

但是,当然,您必须知道它不会对您的情况造成任何问题。


Vic*_*eur 6

我的工作计算机将主要配置文件存储在远程服务器上。另一个小问题是它从 4 个不同的 profile.ps1 文件导入了重复的模块。

使用以下命令查看配置文件和模块的存储位置。删除不必要的 profile.ps1 并将所有模块移至一个目录中。

echo $env:PSModulePath

$profile | select *
Run Code Online (Sandbox Code Playgroud)

我的加载时间从 21000 毫秒减少到 1300 毫秒。