PowerShell 64-разрядная версия висит на новой машине
Недавно я получил новый компьютер с большим количеством лошадиных сил, и он работает очень быстро везде, кроме PowerShell.
Среда:
- Dell XPS 8930 (i7-8700K, 32 ГБ ОЗУ, 1 ТБ NVMe SSD)
- Windows 10 Pro с последними обновлениями (1809 / 10.0.17763)
- PowerShell 5.1.17763.316 и PowerShell Core 6.1.1
- У меня осталось достаточно памяти (>16 ГБ), и процессор почти простаивает, пока он зависает.
- Только Windows Defender (другого антивируса нет)
Некоторые из симптомов, которые кажутся постоянными:
- Открытие PowerShell показывает информацию об авторских правах и висит там в течение 2 минут, прежде чем показывать приглашение.
- Я начинаю набирать команду, и текст появляется почти минуту
- Как только появится текст, я могу изменить команду, и она будет отзывчивой.
- Я ввожу простую команду, такую как
echo 'hello'
и нажмите Enter, для того, чтобы на экране появилось "привет", требуется около 45 секунд, а для возврата к подсказке - еще 45 секунд. - Однажды при вводе подсказки команда реагирует, но ее выполнение снова замедляется.
- Запустить
dir
Команда в моем домашнем каталоге (несколько файлов / папок): примерно за 2:30 до просмотра каталога, еще 15 секунд, чтобы вернуться к приглашению.
Некоторые пытались устранить неполадки:
- PowerShell ISE: требуется около 5 минут, чтобы получить подсказку.
- PowerShell ISE (x86): работает быстро!
- PowerShell (x86): также работает быстро!
- PowerShell Core: тоже очень медленно.
- Устаревшая консоль PowerShell: без изменений.
- Открытие обычной командной строки и запуск
powershell -NoProfile
: Без изменений. sfc /scannow
: Проблем не обнаружено, перезагрузка не помогает.- Отключить сетевые подключения: без изменений.
- Запустите Sysinternals procmon: Ничего очевидного, но он всегда зависает сразу после некоторых операций "Выход из потока".
- Посмотрите на стеки потоков в Sysinternals procxp: когда он висит, основной поток всегда находится на ntdll.dll
ZwWaitForMultipleObjects
, - Удалите WSL/Hyper-V: без изменений.
- Запустил "Средство восстановления Microsoft .NET Framework" и перезагрузил, без изменений.
- Проверьте
C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline
, только один файл 4 КБ. $PSModuleAutoloadingPreference = 'none'
: без изменений. Я не представляю, как можно запустить одну из основных команд, напримерecho
несколько раз всегда будет пытаться загрузить модули.netsh http show iplist
:
IP-адреса, присутствующие в списке прослушивания IP:
127.0.0.1
- Включить WinRM (
winrm quickconfig
): Служба запускается, но затем не может подключиться.- Я вижу, что порт 5985 прослушивается PID 4 при запуске службы.
- Брандмауэр Windows имеет две записи "Удаленное управление Windows (HTTP-In)" для порта 5985 (разрешить любой удаленный адрес, когда он находится в частной сети / профиле).
- Я могу успешно
telnet localhost 5985
- После запуска службы WinRM на ответ требуется около 7 минут:
WSManFault...
Номер ошибки: -2144108250 0x80338126 WinRM не может завершить операцию. Убедитесь, что указанное имя компьютера является действительным, что компьютер доступен по сети и что исключение брандмауэра для службы WinRM включено и разрешает доступ с этого компьютера. По умолчанию исключение брандмауэра WinRM для общедоступных профилей ограничивает доступ к удаленным компьютерам в одной локальной подсети.
Последовательность в задержках заставляет меня думать, что есть некоторый тип попытки соединения и тайм-аута, но я в растерянности относительно того, что это может быть. Есть гуру с идеями?
5 ответов
Может быть установлен другой 64-разрядный продукт, который замедляет работу PowerShell. Для проверки загрузитесь в безопасном режиме, чтобы отключить все сторонние продукты и драйверы. Если проблема исчезнет, вы можете использовать автозапуск для отключения запуска приложений в пакетах и перезагрузки, пока не найдете нужный.
Другая возможность заключается в том, что задержка вызвана установленной вами 64-битной надстройкой. Инструментом для использования здесь является Process Explorer для сравнения библиотек DLL, используемых как в 64-разрядной, так и в 32-разрядной версиях PowerShell.
В меню "Просмотр" Process Explorer включите "Показать нижнюю панель", а в "Представлении нижней панели> DLL" выберите "DLL". Используйте Ctrl + A, чтобы сохранить списки как текстовые файлы, затем используйте продукт сравнения файлов, чтобы сравнить оба результата после сортировки. Вы можете упростить поиск, ограничив отображаемый список только именами DLL, щелкнув правой кнопкой мыши заголовок и выбрав "Выбрать столбцы...".
У меня есть Acronis True Image с защитой от вымогателей. Я обнаружил, что True Image несколько глючит / ненадежен, поэтому меня не удивит, если это виновник.
У меня также это установлено. Это не виновник.
когда я бегу netsh http show iplist
он отображает следующую информацию.
IP addresses present in the IP listen list:
-------------------------------------------
Что и должно отображаться при запуске команды.
Есть ли гуру с идеями?
Вам нужно выполнить следующую команду в командной строке PowerShell с повышенными привилегиями.
netsh http delete iplisten ipaddress=127.0.0.1
сразу вывод netstat -anp tcp
будет следующим:
> PS C:\> netstat -anp tcp
Active Connections
Proto Local Address Foreign Address State
TCP 0.0.0.0:903 0.0.0.0:0 LISTENING
TCP 0.0.0.0:913 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49666 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49667 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49759 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49830 0.0.0.0:0 LISTENING
TCP 0.0.0.0:49921 0.0.0.0:0 LISTENING
TCP 0.0.0.0:54235 0.0.0.0:0 LISTENING
TCP 0.0.0.0:54236 0.0.0.0:0 LISTENING
TCP 0.0.0.0:58091 0.0.0.0:0 LISTENING
TCP 0.0.0.0:58101 0.0.0.0:0 LISTENING
TCP 0.0.0.0:58607 0.0.0.0:0 LISTENING
TCP 0.0.0.0:62401 0.0.0.0:0 LISTENING
TCP 127.0.0.1:843 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1120 0.0.0.0:0 LISTENING
TCP 192.168.0.11:64811 24.105.29.76:443 ESTABLISHED
TCP 192.168.0.11:64828 52.114.76.37:443 TIME_WAIT
TCP 192.168.0.11:65133 23.79.18.217:443 CLOSE_WAIT
TCP 192.168.0.11:65135 17.248.136.9:443 CLOSE_WAIT
TCP 192.168.120.1:139 0.0.0.0:0 LISTENING
TCP 192.168.174.1:139 0.0.0.0:0 LISTENING
Источник: Remote PowerShell, WinRM Сбои: WinRM не может завершить операцию
Благодаря комментарию антивируса на https://stackoverflow.com/questions/45021585/powershell-hangs-on-launch! У меня был установлен антивирус Bitdefender. Отключение не решило проблему, но удаление сделало. Я попытался переустановить, и проблема снова появилась. Добавление всего C:\
к списку исключений не удалось решить проблему.
Обновление 2/20: У меня все еще удален антивирус Bitdefender, но проблема появилась несколько недель назад.
Попробуйте заблокировать доступ к сети на брандмауэре. Это исключит ожидание PowerShell на внешних ресурсах.
Если вы заблокируете все сетевые подключения для Powershell, это должно выглядеть так
ПРИМЕРНЫЕ ПРАВИЛА:
Powershell All Yes Block No %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe Any Any Any Any Any Any Any Any Any
Powershell2 All Yes Block No %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe Any Any Any Any Any Any Any Any Any
Если это не работает, проблема внутренняя. Может быть проще запустить сброс Windows 10:
- Выберите кнопку Пуск
- Выберите Настройки
- Выберите Обновление и безопасность
- Выберите Восстановление
- В разделе "Перезагрузить этот компьютер" выберите "Начать".
У меня возникла аналогичная проблема. Я считаю, что у PowerShell есть проблемы с загрузкой ресурсов при запуске. Я не уверен, есть ли способ отключить эту функцию. Я обнаружил, что если я спам Ctrl+Cпосле запуска, с этого момента все работает нормально. Когда я впервые использую вкладку для автозаполнения чего-либо, загрузка занимает 1–2 секунды, но в остальном у меня сейчас нет проблем. Я не уверен, какие еще ресурсы он будет загружать, но это единственное, что имеет смысл, поскольку это влияет на меня на разных компьютерах.
PS Не нажимайте Ctrl+Cв течение первой секунды, иначе программа вообще закроется. Кроме того, если этот ответ не работает для кого-либо еще, дайте мне знать, и я удалю его.