Powershell очень медленно открывается / отвечает

11

У меня проблема с запуском PowerShell 3.0 в 64-разрядной версии Windows 7. Открытие и запуск занимает очень много времени. Это также довольно вяло в ответ на что угодно.

Я полагаю, что это может быть связано с тем, что мой профиль хранится в моих документах, а папка «Мои документы» синхронизируется с нашей сетью.

Можно ли каким-либо образом переместить местоположение своего профиля, чтобы оно могло быть локальным, а не по сети?

czuroski
источник
1
Это слишком медленно для меня, и мой профиль находится на прямом доступе диска. также он читается один раз, кэшируется ОС и закрывается после запуска, так что сеть или нет, это не должно влиять. это просто скудная попытка MS переделать колесо, но квадратная, опять же.
v.oddou

Ответы:

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 Абдалла
3
Что оно делает?
Pureferret
2
Установка ngen.exe: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.
VertigoRay
Я… удивлен и впечатлен :-)
Крис Ф. Кэрролл
1

Приведенный выше ответ, в котором говорится о NGEN, сократил время запуска с 30 секунд до 5.

Однако я также видел случаи, когда нажатие Ctrl-C после ожидания в течение нескольких секунд выводит меня на экран, и я уже выполнил трюк NGEN выше, и в этом случае я подозреваю, что мои сценарии замедляют меня.

Если прошло более 30 секунд, и вы уже попробовали описанный выше трюк с NGEN, наиболее распространенная причина заключается в том, что запуск сценариев PowerShell для вашего личного и системного профиля занимает много времени. Если вы жалуетесь на задержку менее 10 секунд, то, вероятно, медленно запускается .net.

Если вы работаете на виртуальной машине, а хост виртуальной машины полностью перегружен и связан с вводом-выводом, как в большинстве сред виртуальных машин с избыточным количеством ресурсов и ресурсов, то это так.

Уоррен П
источник
0

Есть несколько разных мест по умолчанию, в которых можно хранить профиль Powershell.

  • Первое местоположение - это глобальное местоположение, которое будет полезно, если вы хотите, чтобы у всех пользователей был настроенный профиль Powershell. Этот профиль должен быть размещен в

    C:\WINDOWS\system32\WindowsPowerShell\v1.0\Profile.ps1
    
  • Второе местоположение предназначено для локального профиля и будет специфичным для каждой учетной записи пользователя. Этот файл переопределяет файл глобальной конфигурации и должен быть помещен в

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

В качестве теста попробуйте изменить глобальный профиль Powershell (расположенный в system32) и посмотреть, не ускоряет ли это процесс. Если это произойдет, вы будете знать, что медлительность как-то связана с сетью, и вы можете двигаться дальше оттуда.

jmreicha
источник
0

Недавно у меня возникла похожая проблема при разработке бинарного модуля PowerShell. Моя консоль была очень медленной в ответ почти на все. Сценарий Стивена Пенни работал для меня, но только для экземпляра PowerShell. Я не очень понял, что происходит в его сценарии; так что я пошел построчно, чтобы увидеть, где моя проблема.

Это закончилось тем, что было с моей переменной окружения пути. В моей переменной пути была UNC-строка пути, и была вызвана задержка, потому что PowerShell будет открывать / закрывать соединение для каждого выполнения (т. Е. Каждый раз, когда вы нажимаете клавишу ввода).

Аарон Рэй
источник
2
Что такое UNC? Как ты это починил?
Томаш Зато - Восстановить Монику
1
@ TomášZato - универсальное соглашение об именах (UNC) - это путь, который содержит прямую или обратную косую черту. Я понимаю, что этот комментарий опоздал на 4 года, подумал, что вы хотели бы знать, так как никто не удосужился ответить на ваш вопрос. Я бы предположил, что автор удалил путь UNC из их системной переменной.
Ramhound
@ Ramhound Спасибо!
Томаш Зато - Восстановить Монику