Currently at the 26C3 and the network is pretty flaky here. At least
on the first day. Out of necessity a friend implemented a simple network
connectivity checker as a Windows Sidebar gadget. I started playing around a
bit with WPK and decided to do the same in PowerShell with a nice WPK
interface.
After a long learning process and much trial and error the following
came out:
Import-Module WPK
New-Window -AllowsTransparency
-WindowStyle None -Background
Transparent -SizeToContent WidthAndHeight -Topmost -BitmapEffect { New-DropShadowBitmapEffect -Opacity .5 } {
New-StackPanel -Orientation Horizontal {
New-Border -Width
40 -Margin ‚5,5,0,10‘ -Child {
New-StackPanel {
New-TextBlock ‚4‘ -FontSize 24 -Foreground White -HorizontalAlignment Center
New-TextBlock -On_Loaded { Set-Variable tb4 $this } -Foreground ‚#80ffffff‘ -HorizontalAlignment Center
} -On_Loaded
{ Set-Variable c4 $this }
} -CornerRadius
‚20,0,0,0‘ -BorderThickness ‚2,2,0,2‘ -BorderBrush Black -On_Loaded { Set-Variable -Name v4 -Value $this }
New-Border -Width
40 -Margin ‚0,5,10,10‘ -Child {
New-StackPanel {
New-TextBlock ‚6‘ -FontSize 24 -Foreground White -HorizontalAlignment Center
New-TextBlock -On_Loaded { Set-Variable tb6 $this } -Foreground ‚#80ffffff‘ -HorizontalAlignment Center
} -On_Loaded
{ Set-Variable c6 $this }
} -CornerRadius
‚0,20,0,0‘ -BorderThickness ‚0,2,2,2‘ -BorderBrush Black -On_Loaded { Set-Variable -Name v6 -Value $this }
}
} -On_Loaded {
$block = {
$net4 = 1
try { $x = @(Test-Connection google.com -Count 1)
} catch { $net4 = 0
}
if ($x.Count -eq 0) { $net4 = 0
}
$net6 = 1
try { $x = @(Test-Connection ipv6.google.com
-Count 1) } catch {
$net6 = 0 }
if ($x.Count -eq 0) { $net6 = 0
}
switch ($net4) {
1 {
$v4.Background = ‚Green‘
$tb4.Text = $x[0].ResponseTime
$tb4 |
Move-Control -fadeIn -duration ([TimeSpan]::FromMilliSeconds(500))
}
0 { $v4.Background = ‚Red‘
$tb4 |
Move-Control -fadeOut -duration ([TimeSpan]::FromMilliSeconds(500))
}
2 { $v4.Background = ‚Gold‘ }
}
switch ($net6) {
1 { $v6.Background = ‚Green‘
$tb6.Text = $x[0].ResponseTime
$tb6 |
Move-Control -fadeIn -duration ([TimeSpan]::FromMilliSeconds(500))
}
0 { $v6.Background = ‚Red‘
$tb6 |
Move-Control -fadeOut -duration ([TimeSpan]::FromMilliSeconds(500))
}
2 { $v6.Background = ‚Gold‘ }
}
}
Register-PowerShellCommand -ScriptBlock $block -Run -In
‚0:0:1‘
} -On_MouseRightButtonUp
{
$Window.Close()
} -On_MouseLeftButtonDown
{
$window.DragMove()
} -AsJob
To use it you have to install the PowerShellPack which
includes WPK, the WPF PowerShell Toolkit.
The window looks as follows:
The two halves „4“ and „6“ correspond to IPv4 and IPv6 connectivity,
respectively. The program tries pinging google.com and ipv6.google.com. If a
half turns red this means that the ping failed. Below the IP version number is
the last response time.