powershell - Test-Connection Performance Better with HostName -
running test-connection ip address takes considerably longer running same command server's hostname.
however; if add -quiet parameter performance same (ip fraction faster, may expect).
using measure-command anomaly not show up; presumably quirk of output not being displayed.
the below code more accurately reflects anomaly seen:
$begin=(get-date).ticks;test-connection '123.45.67.89'; $a=((get-date).ticks - $begin) $begin=(get-date).ticks;test-connection 'myhostname'; $b=((get-date).ticks - $begin) $a-$b colleagues have reproduced same issue on machines.
question: aware of may cause this? i.e. suspect it's bug (and have reported such), implies there's clever going on powershell may work differently depending on whether output displayed or not / causing quantum-like effect; it's not running commands given in order, doing (de)optimisation under covers.
my environment
os: ms windows 7 pro sp1
$psversioninfo:
name value ---- ----- psversion 4.0 wsmanstackversion 3.0 serializationversion 1.1.0.1 clrversion 4.0.30319.18444 buildversion 6.3.9600.16406 pscompatibleversions {1.0, 2.0, 3.0, 4.0} psremotingprotocolversion 2.2 ms connect bug
i did wireshark trace while running test-connection , without quiet switch parameter, supplying ipv4 address computername parameter.
when quiet switch omitted, powershell seems send not 1, 6 netbios name queries target machine, after returns formatted output.
if assign output test-connection, returns right away, pipe format-table, hangs , sends nbstat queries again
the root cause not test-connection cmdlet itself, formatted output. 1 of properties (ipv4address) scriptproperty , has following definition:
ps c:\> $ping = test-connection -computername 10.0.0.101 -count 1 ps c:\> get-member -inputobject $ping -name ipv4address | select-object -expandproperty definition system.object ipv4address {get=$iphost = [system.net.dns]::gethostentry($this.address) $iphost.addresslist | ?{ $_.addressfamily -eq [system.net.sockets.addressfamily]::internetwork } | select -first 1;} so, when output shown, [system.net.dns]::gethostentry(10.0.0.101) called calculate ipv4address - causes waiting time
if don't care moot resolution of ip address, use select-object prevent calculation , output of ipv4address:
test-connection -computername 10.0.0.101 -count 1 | select address,statuscode
Comments
Post a Comment