为什么 PowerShell 需要这么长时间?

pab*_*ams 1 powershell

我在 PowerShell 中所做的任何事情似乎都需要很长时间。

P> Measure-Command -Expression {Write-Output "hi"}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 12
Milliseconds      : 513
Ticks             : 125130193
TotalDays         : 0.000144826612268519
TotalHours        : 0.00347583869444444
TotalMinutes      : 0.208550321666667
TotalSeconds      : 12.5130193
TotalMilliseconds : 12513.0193
Run Code Online (Sandbox Code Playgroud)

我检查了我的 $profile,它是空的。但 PowerShell 确实需要很长时间才能告诉我我的个人资料在哪里:

PS F:\> Measure-Command -Expression {$profile}


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 12
Milliseconds      : 398
Ticks             : 123980891
TotalDays         : 0.00014349640162037
TotalHours        : 0.00344391363888889
TotalMinutes      : 0.206634818333333
TotalSeconds      : 12.3980891
TotalMilliseconds : 12398.0891
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?我正在使用 PowerShell 5:

PS F:\> get-host | select-object version

Version
-------
5.1.18362.1801


PS F:\>
Run Code Online (Sandbox Code Playgroud)

但这也需要 12 秒来计算:

PS F:\> measure-command { get-host | select-object version }


Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 12
Milliseconds      : 442
Ticks             : 124426798
TotalDays         : 0.000144012497685185
TotalHours        : 0.00345629994444444
TotalMinutes      : 0.207377996666667
TotalSeconds      : 12.4426798
TotalMilliseconds : 12442.6798
Run Code Online (Sandbox Code Playgroud)

Abd*_*P M 5

我相信这是因为防病毒软件。它可能会在 PowerShell 模块之前加载一些防病毒相关模块。确认这一点的一种方法是在 cmd 中运行以下命令。

powershell.exe -c "Write-Host $PID;Start-Sleep -s 30"
Run Code Online (Sandbox Code Playgroud)

这将打印与 PowerShell 进程关联的 PID 并休眠 30 秒,同时打开另一个 PowerShell 会话并运行

Get-Process | where {$_.Id -eq <PASTE_YOUR_PID>} | select -ExpandProperty modules
Run Code Online (Sandbox Code Playgroud)

这将列出PowerShell 进程已加载的模块。如果您在列表中看到与防病毒相关的 DLL,很可能会导致速度变慢。