Powershellのオープン/応答が非常に遅い


11

Windows 7 64ビットでPowerShell 3.0を実行する際に問題が発生しました。実行時に開く/開始するのに非常に長い時間がかかります。それはまた、ほとんど何にでも対応してかなり遅いです。

これは、自分のプロファイルがドキュメントに保存されており、ドキュメントフォルダーがネットワークに同期されているためと考えられます。

プロファイルの場所を移動して、ネットワークではなくローカルにできるようにする方法はありますか?


1
私にとっても遅く、私のプロフィールは直接ドライブにアクセスしています。また、一度読み込まれ、OSによってキャッシュされ、起動後に閉じられるため、ネットワークに関係なく影響はありません。これは、MSのホイールのやり直しがうまくいっていないだけのことですが、四角です。
v.oddou 2013年

回答:


17

PowerShellは.NET Frameworkに依存してい ます。これを更新してみてください。

このスクリプトは私のスピードにも役立ちました

$Env:PATH = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
[AppDomain]::CurrentDomain.GetAssemblies() | % {
  $pt = $_.Location
  if (! $pt) {continue}
  if ($cn++) {''}
  $na = Split-Path -Leaf $pt
  Write-Host -ForegroundColor Yellow "NGENing $na"
  ngen install $pt
}

1
ありがとうございました!このスクリプトを実行した後の大きな違い。
WeSam Abdallah 2015

3
それは何をするためのものか?
Pureferret

2
Generate native images for an assembly and its dependencies and install them in the Native Images Cache. If /queue is specified compilation job is queued up. If a priority is not specified, the default priority used is 3.
ngen.exe

私は…驚いて感銘を受けました:-)
クリスFキャロル

1

NGENに関する上記の回答により、起動時間が30秒以上から5秒未満に短縮されました。

ただし、数秒待ってからCtrl-Cを押すとプロンプトが表示される場合もあり、すでに上記のNGENのトリックを実行しており、その場合、スクリプトが原因で速度が低下していると思われます。

それが30秒を超え、すでに上記のNGENトリックを試した場合、最も一般的な理由は、個人およびシステムプロファイルのpowershellスクリプトの起動に時間がかかることです。10秒未満の遅延について不平を言っている場合は、開始が遅いのはおそらく.netです。

VMを使用していて、VMホストが完全に行き詰まっており、ほとんどのオーバープロビジョニングされたリソース不足のVM環境のようにIOにバインドされている場合、それはそれです。


0

Powershellプロファイルを保存できるデフォルトの場所はいくつかあります。

  • 最初の場所はグローバルな場所であり、すべてのユーザーにカスタマイズされたPowershellプロファイルを持たせる場合に便利です。このプロファイルは

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Profile.ps1
    
  • 2番目の場所はローカルプロファイル用で、各ユーザーアカウントに固有です。このファイルはグローバル構成ファイルを上書きするため、次の場所に配置する必要があります

    C:\Username\My Documents\WindowsPowerShell\Profile.ps1
    

テストとして、(system32にある)グローバルPowershellプロファイルを変更して、速度が向上するかどうかを確認します。もしそうなら、ネットワークが原因で速度が低下していることがわかり、そこから先に進むことができます。


0

最近、バイナリPowerShellモジュールを開発するときに同様の問題が発生しました。私のコンソールは、ほとんど何にでも応答して非常に遅かった。Steven Pennyのスクリプトは私にとってはうまくいきましたが、PowerShellのインスタンスごとにのみです。私は彼のスクリプトで何が起こっているのか本当に理解していませんでした。だから私は私の問題がどこにあるかを確認するために行ごとに行きました。

それは私のパス環境変数になってしまいました。パス変数にUNCパス文字列があり、PowerShellが実行ごとに(つまり、Enterキーを押すたびに)接続を開いたり閉じたりするため、遅延が発生しました。


2
UNCとは?どのように修正しましたか?
トマーシュザト-モニカを復活させる

1
@TomášZato-汎用命名規則(UNC)は、スラッシュまたはバックスラッシュを含むパスです。このコメントが4年遅れていることを理解しています。知りたいと思ったのではないでしょうか。 著者がシステム変数からUNCパスを削除したと思います。
ラムハウンド

@ラムハウンドありがとう!
トマーシュZato -復活モニカ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.