Кроме минимизации того, что вы вкладываете в различные скрипты своего профиля (показано ниже), вы мало что можете сделать:
C:\PS> $profile | fl * -force
AllUsersAllHosts : C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1
AllUsersCurrentHost : C:\Windows\System32\WindowsPowerShell\v1.0\Microsoft.PowerShell_profile.ps1
CurrentUserAllHosts : C:\Users\hillr\Documents\WindowsPowerShell\profile.ps1
CurrentUserCurrentHost : C:\Users\hillr\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
Один из способов проверить, не вызывают ли задержки сценарии профиля, - запустить powershell с помощью параметра -noprofile. Если время запуска отличается, это будет связано со сценариями вашего профиля. Вы можете использовать секундомер .NET так:
function TimeThis([scriptblock]$scriptblock, $msg)
{
if (!$stopWatch)
{
$script:stopWatch = new-object System.Diagnostics.StopWatch
}
$stopWatch.Reset()
$stopWatch.Start()
. $scriptblock
$stopWatch.Stop()
if ($msg -eq $null) { $msg = "$scriptblock" }
"Execution time: $($stopWatch.ElapsedMilliseconds) mS for $msg"
}
. TimeThis {Import-Module $Module -args ~\Pscx.UserPreferences.ps1}
Хотя вы можете использовать Measure-Command, он не показывает, что выполняется, и вы не получаете вывод команды (только время очень многословно).
Раньше в более ранних CTP-файлах возникала проблема, когда установщик не генерировал сборки PowerShell, что могло привести к заметным задержкам загрузки. Тем не менее, я почти уверен, что это было исправлено с момента последней установки 2.0 (и, конечно, с PowerShell, встроенным в Windows 7 и Windows Server 2008 R2). Если существует следующий каталог и его содержимое, вы должны быть ngen'd:
dir 'C:\Windows\assembly\NativeImages_v2.0.50727_32\Microsoft.PowerShel#' -r