Où Windows 8 stocke-t-il l'utilisation estimée des données via Wifi?

19

J'ai découvert accidentellement que dans Windows 8, si vous cliquez avec le bouton droit sur un réseau sans fil précédemment connecté à partir de l'interface de l'écran de démarrage, il existe une option pour afficher l'utilisation estimée des données.

entrez la description de l'image ici

entrez la description de l'image ici

Où sont stockées ces données? Est-il possible de récupérer cela via PowerShell / WMI? Un cas d'utilisation pour moi serait de configurer des alertes automatisées basées sur l'utilisation des données - J'utilise actuellement Networx pour une ventilation plus détaillée, mais pour une alerte rapide, si je peux récupérer l'utilisation, l'itinéraire automatisé aiderait beaucoup.

Sathyajith Bhat
la source
1
Je me demande pourquoi c'est seulement estimé .
Der Hochstapler
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlansemble lié. Je cherche toujours.
Bob
C'est lié, mais mes recherches montrent que c'est purement lié à l'interface graphique, je n'ai rien vu sur l'endroit où l'estimation réelle est stockée. rien sur google pour cette clé de registre, sauf un résultat pour le moment.
MDMoore313
1
@OliverSalzburg Probablement, ils l'appellent estimé car il peut afficher un numéro différent de celui de votre FAI. Peut-être qu'ils devinent également un pourcentage de frais généraux (que Windows ne peut pas mesurer, car il est ajouté ailleurs)
derobert

Réponses:

3

Je me souviens quand vous avez posé cette question pour la première fois, mais j'ai finalement réussi à le comprendre. J'espère que c'est toujours utile pour vous ou pour quelqu'un d'autre!

Vous pouvez accéder à ces données en appelant la méthode GetLocalUsage des objets ConnectionProfile , qui sont des connexions WLAN / WAN (c'est-à-dire des SSID). GetLocalUsage prend deux paramètres DateTime et retourne un objet DataUsage contenant la quantité de données envoyées et reçues pendant l'intervalle spécifié. Vous pouvez obtenir une liste d'objets ConnectionProfile en appelant la méthode GetConnectionProfiles de NetworkInformation .

J'ai écrit la fonction suivante qui récupère les données et renvoie un objet. Passez-lui un ou plusieurs SSID et, éventuellement, démarrez et arrêtez 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
la source
Super, merci pour la recherche et la réponse!
Sathyajith Bhat