Недавно я получил новый компьютер с большим количеством лошадиных сил, и он работает очень быстро везде, кроме 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; для появления 'hello' на экране требуется около 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 для общедоступных профилей ограничивает доступ к удаленным компьютерам в одной локальной подсети.
Последовательность в задержках заставляет меня думать, что есть некоторый тип попытки соединения и тайм-аута, но я не знаю, что это может быть. Есть гуру с идеями?