У меня была похожая проблема - запуск сценариев занимал несколько секунд.
Проблема оказалась сочетанием двух факторов:
- У меня было
ExecutionPolicy
force-установить RemoteSigned
через GPO (запустить Get-ExecutionPolicy -List
и проверить значение для MachinePolicy
) - У меня было довольно много запущенных процессов, поэтому их перечисление занимало много времени
... так что это было исправлено перезагрузкой.(Я думаю, что переопределение значения, установленного для GPO также будет работать, но я не пробовал.)
Что не сработало:
Я заметил, что простой запуск PowerShell был относительно быстрым, только выполнение скрипта (через параметры командной строки или &
/ Оператор вызова ) был медленнымНапример, я мог запустить скрипт, отправив его по каналу powershell, что не повлекло за собой замедления:
type "script.ps1" | powershell.exe -noprofile -nologo -executionpolicy Bypass -file -
В этот момент я попытался устранить неполадки с ProcMon , но этого не произошлопоказать все длительные вызовы.
Далее я попытался открыть Process Explorer, чтобы проверить стек процесса powershell.exe во время загрузки сценария.Вершина стека была:
ntdll.dll!RtlGetNativeSystemInformation+0x14
KERNEL32.DLL!lstrcmpA+0x12d
KERNEL32.DLL!CreateToolhelp32Snapshot+0x108
[Native Frame: IL Method without Metadata]
[Managed to Unmanaged Transition]
System.Management.Automation.dll!System.Management.Automation.PsUtils.GetParentProcess+0x73
System.Management.Automation.dll!System.Management.Automation.Internal.SecuritySupport.GetExecutionPolicy+0x138
, что привело меня к выпуску # 2578 , который объяснил поведение, которое я видел.