Gdzie Windows 8 przechowuje szacunkowe zużycie danych przez Wi-Fi?

19

Przypadkowo odkryłem, że w systemie Windows 8, jeśli klikniesz prawym przyciskiem myszy wcześniej podłączoną sieć bezprzewodową w interfejsie ekranu startowego, istnieje opcja pokazania szacowanego zużycia danych.

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Gdzie są przechowywane te dane? Czy można to pobrać za pomocą PowerShell / WMI? Przykładem dla mnie byłoby ustawienie automatycznych alertów w oparciu o wykorzystanie danych - obecnie używam Networx do bardziej szczegółowego podziału, ale dla szybkiego powiadomienia, jeśli mogę pobrać użycie, zautomatyzowana trasa bardzo by pomogła.

Sathyajith Bhat
źródło
1
Zastanawiam się, dlaczego to tylko szacuje .
Der Hochstapler,
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlanwygląda na pokrewnych. Nadal szukam.
Bob
Jest spokrewniony, ale moje badania pokazują, że jest on całkowicie związany z GUI, nie widziałem niczego, gdzie przechowywane są rzeczywiste oszacowania. nic w google dla tego klucza reg oprócz jednego wyniku w tym momencie.
MDMoore313
1
@OliverSalzburg Prawdopodobnie nazywają to oszacowaniem, ponieważ może pokazywać inny numer niż twój dostawca usług internetowych. Być może są one w pewnym zgadywania procent napowietrznych, a także (co Windows nie można zmierzyć, jak dodaje jej gdzie indziej)
derobert

Odpowiedzi:

3

Pamiętam, kiedy po raz pierwszy zadałeś to pytanie, ale w końcu udało mi się to rozgryźć. Mam nadzieję, że nadal przydaje się Tobie lub komuś innemu!

Możesz uzyskać dostęp do tych danych, wywołując metodę GetLocalUsage obiektów ConnectionProfile , którymi są połączenia WLAN / WAN (tj. SSID). GetLocalUsage pobiera dwa parametry DateTime i zwraca obiekt DataUsage zawierający ilość danych wysłanych i odebranych w określonym przedziale czasu. Listę obiektów ConnectionProfile można uzyskać, wywołując metodę GetConnectionProfiles funkcji NetworkInformation .

Napisałem następującą funkcję, która pobiera dane i zwraca obiekt. Przekaż jeden lub więcej identyfikatorów SSID i opcjonalnie uruchom i zatrzymaj 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
źródło
Świetnie, dziękuję za badania i odpowiedź!
Sathyajith Bhat