web-dev-qa-db-ja.com

Windows 10でのPowershellの起動が遅い

Windows 10(バージョン1703-Creators Update)でのpowershellプロンプトの起動が遅い問題があります。

私のハードウェア仕様(かなり高速なマシン):Intel i5-7440HQ(クアッドコア)/ 32GB DDR4 RAM/512 Samsung SSDハードドライブ。

プロファイルと実行ポリシーをバイパスしようとしましたが、何も変わりません。

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

6,228067

私の友人のクリエーターアップデートなしのWindows 10搭載の同じラップトップは、Powershellを0.5秒未満で実行します。

また、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$_"}
}

この問題をどのように調査すればよいですか?

ご挨拶

10
mike

これは私にも起こっていました-最善のルートではないかもしれませんが、powershell.exeWindows Defenderの除外リスト のリストを20秒から1秒未満に短縮しました。

レガシーコンソールを使用し、PSReadLineを削除し、ngenを実行してもまったく効果がないようです。

2

あなたが試すことができるのは、powershell.exeへのショートカットを作成し、それを右クリックして>プロパティ、タブオプションに移動し、「レガシーコンソールを使用」をクリックします。スクリーンリーダー(マジックとズームテキスト)は、秋のアップデートに付属する「新しい」コンソールに耐えられませんでした(Powershellは非常に遅くなっていました)。

2
Peter Bakker

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/lzybkr/PSReadLine/issues/67

それまでに6 GBを超える~\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\の履歴ファイルを削除してみましたが、その後PowerShellコンソールがすぐに開き始めました。

おそらく、あなたが経験する遅いのは、PowerShellが大きな履歴ファイル(OutOfMemoryを引き起こすほどにはまだ大きくない)を読み取ろうとしていることです。

1
takemyoxygen

ロードされたすべてのアセンブリPowerShellをngeningする代わりに、Windows 10を更新するたびに実行する傾向があります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秒まで。

0
Carl Walsh