Autre que minimisez ce que vous mettez dans vos différents scripts de profil (ci-dessous) il n'y a pas grand-chose que vous pouvez faire:
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
Une façon de vérifier si le profil Les scripts provoquent le décalage est de démarrer powershell en utilisant l'option -noprofile. Si le temps de démarrage est différent, cela serait dû à vos scripts de profil. Vous pouvez utiliser un chronomètre .NET comme ceci:
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}
Alors que vous pouvez utiliser Measure-Command, il ne montre pas ce qui est exécuté et vous obtenez pas de sortie de commande (uniquement de temps de façon très bavard).
Il y avait un problème dans les CTP antérieurs où le programme d'installation n'enchaînait pas les assemblages PowerShell et pouvait causer des retards de chargement notables. Cependant, je suis à peu près sûr que cela a été corrigé à partir de l'installation 2.0 finale (et certainement avec PowerShell intégré dans Windows 7 et Windows Server 2008 R2). Si le répertoire de suivi et son contenu existent, vous devriez ngen'd:
dir 'C:\Windows\assembly\NativeImages_v2.0.50727_32\Microsoft.PowerShel#' -r
Keith, accepté comme réponse. Désolé pour le retard! – MagicAndi
Y at-il un moyen de charger les modules ngen par le profil? Comme PowerTab et PS Community Extensions? –
Oui mais manuellement. Trouvez les DLLs requises par les modules que vous chargez et exécutez ngen.exe sur celles-ci. Utilisez ngen.exe à partir du répertoire d'infrastructure 2.0, par exemple. 'C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727'. –