Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
TIMTOWTDI (pronounced ‘tim-toady’) is the Perl dictum, “There is more than one way to do it.” PowerShell seems to be mercifully free of this, but this may be an exception. We leverage the old standard “Win32_NetworkAdapterConfiguration” where “IPEnabled=’$true’”, but we also utilize [System.Net.NetworkInformationInterface]::GetAllNetworkInterfaces(). This .NET call is very useful – it reveals the speed, the MAC address, the number of bits sent and received. However, it has to be run locally. WinRM to the rescue!
function Get-NetworkAdapterSpeed {
[CmdletBinding()]
param ( [parameter(ValueFromPipeline=$true,Position=0)][string[]]$ComputerName = @($env:COMPUTERNAME) );
process {
& {
foreach ($computer in $ComputerName) {
if (!$computer) { continue; }
$computer = $computer.ToLower();
Write-Progress (Get-Date) "Test-EthernetConfig -ComputerName $computer";
$scriptBlock = {
[Object[]]$wmiNACs = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter "IPEnabled='$true'";
[Object[]]$dotNetNICs = [System.Net.NetworkInformation.NetworkInterface]::GetAllNetworkInterfaces() | ? { $_.OperationalStatus -eq 'Up' };
foreach ($wmiNAC in $wmiNACs) {
$dotNetNic = $dotNetNICs | ? { $_.Description -eq $wmiNAC.Description; }
New-Object -TypeName PSObject -Property @{
ComputerName = $env:COMPUTERNAME.ToLower();
Description = $dotNetNic.Description;
NetworkInterfaceType = $dotNetNic.NetworkInterfaceType;
Speed = & {
if (([string]$dotNetNic.Speed).Length -gt 9) {
$mantissa = ([string]$dotNetNic.Speed).SubString(0, (([string]$dotNetNic.Speed).Length - 9));
"$mantissa Gbps";
} elseif (([string]$dotNetNic.Speed).Length -gt 6) {
$mantissa = ([string]$dotNetNic.Speed).SubString(0, (([string]$dotNetNic.Speed).Length - 6));
"$mantissa Mbps";
} elseif (([string]$dotNetNic.Speed).Length -gt 3) {
$mantissa = ([string]$dotNetNic.Speed).SubString(0, (([string]$dotNetNic.Speed).Length - 3));
"$mantissa Kbps";
} else {
"$($dotNetNic.Speed) bps";
}
}
}
$wmiNA = $wmiNAC.GetRelated("Win32_NetworkAdapter")
}
}
if ($computer -eq $env:COMPUTERNAME) {
& $scriptBlock;
} else {
Invoke-Command -HideComputerName -ComputerName $computer -ScriptBlock;
}
}
} | Select-Object -Property ComputerName, NetworkInterfaceType, Description, Speed;
}
}