¿Dónde almacena Windows 8 el uso estimado de datos a través de Wifi?

19

Descubrí accidentalmente que en Windows 8, si hace clic derecho en una red inalámbrica previamente conectada desde la interfaz de la pantalla de Inicio, hay una opción para mostrar el uso estimado de datos.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

¿Dónde se almacenan estos datos? ¿Es posible recuperar esto a través de PowerShell / WMI? Un caso de uso para mí sería configurar alertas automáticas basadas en el uso de datos: actualmente uso Networx para un desglose más detallado, pero para una alerta rápida, si puedo obtener el uso, la ruta automatizada ayudaría mucho.

Sathyajith Bhat
fuente
1
Me pregunto por qué solo se estima .
Der Hochstapler
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\WlanParece relacionado. Todavía estoy buscando
Bob
Está relacionado, pero mi investigación muestra que está puramente relacionado con la interfaz gráfica de usuario, no he visto nada sobre dónde se almacena la estimación real. nada en google para esa clave de registro excepto un resultado en este momento.
MDMoore313
1
@OliverSalzburg Probablemente lo llaman estimado porque puede mostrar un número diferente al de su ISP. Posiblemente también están adivinando un porcentaje de sobrecarga (que Windows no puede medir, ya que se está agregando en otro lugar)
derobert

Respuestas:

3

Recuerdo cuando hiciste esta pregunta por primera vez, pero finalmente pude resolverlo. ¡Espero que siga siendo útil para ti u otra persona!

Puede acceder a estos datos llamando al método GetLocalUsage de los objetos ConnectionProfile , que son conexiones WLAN / WAN (es decir, SSID). GetLocalUsage toma dos parámetros DateTime y devuelve un objeto DataUsage que contiene la cantidad de datos enviados y recibidos durante el intervalo especificado. Puede obtener una lista de objetos ConnectionProfile llamando al método GetConnectionProfiles de NetworkInformation .

Escribí la siguiente función que recupera los datos y devuelve un objeto. Pase uno o más SSID y, opcionalmente, inicie y detenga DateTime:

function Get-EstimatedDataUsage()
{
    Param(
        [Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
        [ValidateNotNullOrEmpty()]
        [String]$ProfileName,

        [Parameter(Position=1, Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [DateTime]$From,

        [Parameter(Position=2, Mandatory=$false)]
        [ValidateNotNullOrEmpty()]
        [DateTime]$To
    )

    Process
    {
        foreach($profile in $ProfileName)
        {
            try
            {
                [void][Windows.Networking.Connectivity.NetworkInformation,Windows,ContentType=WindowsRuntime]
                $ConnectionProfiles = [Windows.Networking.Connectivity.NetworkInformation]::GetConnectionProfiles() | Where-Object ProfileName -EQ $profile
            }
            catch
            {
                Write-Error 'Unable to create instance of Windows.Networking.Connectivity.NetworkInformation.'
                continue
            }

            foreach($ConnectionProfile in $ConnectionProfiles)
            {
                $ProfileName = $ConnectionProfile.ProfileName

                if($From -eq $null)
                {
                    try
                    {
                        $ResetTime = Get-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlan\$ProfileName -Name ResetTime -ErrorAction Stop | Select-Object -ExpandProperty ResetTime
                        $From_determined = [datetime]::FromFileTime($ResetTime)
                    }
                    catch
                    {
                        $From_determined = [datetime]::FromFileTime(0)
                    }
                }
                else
                {
                    $From_determined = $From
                }

                if($To -eq $null)
                {
                    $To_determined = Get-Date
                }
                else
                {
                    $To_determined = $To
                }

                $usage = $ConnectionProfile.GetLocalUsage($From_determined, $To_determined)

                $op = '' | select Name,Received,Sent,From,To

                $op.Name = $ProfileName
                $op.Received = $usage.BytesReceived
                $op.Sent = $usage.BytesSent
                $op.From = $From_determined
                $op.To = $To_determined

                $op

            }
        }
    }
}
charleswj81
fuente
¡Genial, gracias por la investigación y la respuesta!
Sathyajith Bhat