Monday, May 14, 2012

Creating hashtables with a timer for Key


Powershell 3.0 lets you unroll the elapsed seconds from a current start time in three lines:

 $start = [datetime]::Now
 function Time {([datetime]::Now - $start)}
 function Timer {(Time).TotalSeconds}

while(1) {Timer;sleep 1}


PS C:\Windows\system32> while(1) {Timer;sleep 1}
1.6690955
2.6851536
3.7002116
4.7132696
5.7273276
6.7423856


You can use a new notation to create hash table with the elapsed time as the Key to almost any assigned Value. The notation is [object type]@{Name=Value}. I use the [array] object type below:

PS C:\Windows\system32> while(1)  {[array]@{$(Timer)=$(get-random)};sleep 1}

Name                           Value
----                           -----
0.2260129                      1128651864
1.2440711                      883153077
2.2581291                      181563121
3.2711871                      609183359
4.2852451                      1733733473
5.2993031                      1678081962
6.3133611                      504757582

(Look Ma! No Value):
PS C:\Windows\system32> while(1)  {[array]@{$(Timer)=$()};sleep 1}

Name                           Value
----                           -----
24.6504099
25.6584675
26.6705254
27.7005843
28.7146423
29.7297004
30.7427583
31.7668169

PS C:\Windows\system32> while(1)  {[array]@{$(Timer)=$((ps -ea 0 -module).count)};sleep 10}

Name                           Value
----                           -----
43.4584856                     3876
53.8810818                     3876
64.811707                      3876
75.2513041                     3876
85.7329036                     3876
96.1705006                     3876
106.6060975                    3876

PS C:\Windows\system32> while(1)  {[array]@{$(Timer)=$((Timer)-(Timer))};sleep 1}

Name                           Value
----                           -----
121.6359571                    0
122.6440148                    0
123.6580728                    0
124.6721308                    0
125.7001896                    -0.000999999999990564
126.7142476                    -0.00100000000000477
127.7283056                    0
128.7433637                    0
129.7574217                    -0.00100009999999884
130.7864805                    0

No comments: