VBS'den dönüştürdüğüm bir powershell oturum açma komut dosyasının performansını artırmaya çalışıyorum ve testlerimde bir sorunla karşılaştım. Ölçü-Komutu veya StopWatch Karışık/Yanlış Sonuçları Geri Alma
Ben şimdiki makineye bağlı tüm sürücüleri alınırken en hızlı yolu denemek ve bulmak için aşağıdaki testi yazdı:################################################################# PSDrive
Measure-Command { Get-PSDrive -PSProvider 'FileSystem' }
$sw = [Diagnostics.Stopwatch]::StartNew()
Get-PSDrive -PSProvider 'FileSystem'
$sw.Stop()
$elapsed = $sw.Elapsed.TotalMilliseconds
write-host $elapsed
############################################################# END PSDrive
##################################################################### WMI
Measure-Command { Get-WMIObject -query "Select * From Win32_LogicalDisk Where DriveType = 4" }
$sw = [Diagnostics.Stopwatch]::StartNew()
Get-WMIObject -query "Select * From Win32_LogicalDisk Where DriveType = 4"
$sw.Stop()
$elapsed = $sw.Elapsed.TotalMilliseconds
write-host $elapsed
################################################################# END WMI
Gördüğünüz gibi ben sürücüleri almak için 2 farklı yöntem kullanıyorum:
Get-PSDrive
Get-WMIObject
Her komut e hızı:
[Diagnostics.Stopwatch]::StartNew()
Measure-Command
Get PsDrive
ölçün Komutanlığı (TotalMilliseconds): Bu, yukarıda senaryo bazı örnek çıkışı (sadece ilgili ayrıntıları dahil ettik) 'dir 0,6983
Kronometre (TotalMilliseconds) : 408.9745
ölçün-WMIObject alın Komut (TotalMilliseconds): 46,8607
Kronometre (TotalMilliseconds): 158,0209
Kronometre (TotalMilliseconds): 158,0209
Benim soru daha güvenilir hangisinin (eğer varsa), nedir? Ya da kodumu bu şekilde toplam zaman kaybı ölçmeye mi çalışıyor? Bu konuda herhangi bir yardım için çok teşekkür ederiz.
Güncelleme
bir değişken (örn $x = Get-PSDrive -PsProvider 'FileSystem'
) içine her komutu göndermek için kod Değişik ve şimdi çıkış çok daha mantıklıdır:
Get PsDrive
Ölçü Komutu (TotalMilliseconds): 0,6983
Kronometre (TotalMilliseconds): 408.9745
al-WMIObject
ölçün Komutanlığı (TotalMilliseconds): 46,8607
Kronometre (TotalMilliseconds): 158,0209
Bu doğru görünüyor - teşekkürler Mjolinor. Konsola yazdırmak için harcanan süreyi yakalamak için Measure-Command almanın bir yolu olup olmadığını biliyor musunuz? Ben $ x = [statement] ölçtüğümde; $ x' hala ilk parçayı ölçüyor gibi görünüyor ve ekrana yazılan parçayı hesaba katmıyor – Bassie
Ölçüm yaptığınız komut satırında Out-Host'a açık bir boru ekleyin. Daha sonra konsola yazılan çıktıyı ve tamamlanması için ölçülen zamanda karşılık gelen bir artışı görmelisiniz. – mjolinor