我编写了以下测试,试图找到检索连接到当前机器的所有驱动器的最快方法:
################################################################# 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
如您所见,我使用两种不同的方法来检索驱动器:
GET-PSDrive来
GET-WmiObject可以
我也使用两种不同的技术来测量每个命令的速度:
测量命令
[Diagnostics.Stopwatch] :: StartNew()
然而,根据使用哪种方法测量所花费的时间,两种驱动检索技术中的每一种都被测量得更快.这是上面脚本的一些示例输出(我刚刚提供了相关的详细信息):
Get-PSDrive
Measure Command (TotalMilliseconds) : 0.6983
Stopwatch (TotalMilliseconds) : 408.9745
Get-WMIObject
Measure Command (TotalMilliseconds) : 46.8607
Stopwatch (TotalMilliseconds) : 158.0209
秒表(TotalMilliseconds):158.0209
所以我的问题是,哪一个(如果有的话)更可靠?或者是试图以这种方式测量我的代码完全浪费时间?非常感谢任何帮助.
更新
修改了将每个命令发送到变量的代码(例如$x = Get-PSDrive -PsProvider’FileSystem’),现在输出更有意义:
Measure-Command将丢弃管道输出,仅测量实际执行命令所需的时间.Get-PSDrive
Measure Command (TotalMilliseconds) : 0.6983
Stopwatch (TotalMilliseconds) : 408.9745
Get-WMIObject
Measure Command (TotalMilliseconds) : 46.8607
Stopwatch (TotalMilliseconds) : 158.0209
秒表计时器正在测量执行命令所需的时间,然后将所有输出显示到控制台.
要获取Measure-Command以测量写入控制台所需的时间,请在您正在测量的脚本块内向Out-Host添加显式管道.然后,您应该看到写入控制台的输出,以及完成的测量时间的相应增加.