Onde o Windows 8 armazena o uso estimado de dados por Wifi?

19

Descobri acidentalmente que, no Windows 8, se você clicar com o botão direito do mouse em uma rede sem fio conectada anteriormente na interface da tela Iniciar, há uma opção para mostrar o uso estimado de dados.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Onde esses dados são armazenados? É possível buscar isso via PowerShell / WMI? Um caso de uso para mim seria configurar alertas automatizados com base no uso de dados - atualmente uso o Networx para uma análise mais detalhada, mas para um alerta rápido, se eu puder buscar o uso, a rota automatizada ajudaria muito.

Sathyajith Bhat
fonte
1
Eu me pergunto por que é apenas estimado .
Der Hochstapler
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlanparece relacionado. Eu ainda estou procurando.
Bob
Está relacionado, mas minha pesquisa mostra que é puramente relacionado à GUI, não vi nada sobre onde a estimativa real está armazenada. nada no google para essa chave de registro, exceto um resultado no momento.
precisa saber é o seguinte
1
@OliverSalzburg Provavelmente eles chamam isso de estimado, porque pode mostrar um número diferente do seu ISP. Possivelmente eles estão supondo que em algum cento sobrecarga bem (que o Windows não consegue medir, como seu ser adicionado em outros lugares)
derobert

Respostas:

3

Lembro-me de quando você fez essa pergunta, mas finalmente consegui entender. Espero que ainda seja útil para você ou para outra pessoa!

Você pode acessar esses dados chamando o método GetLocalUsage dos objetos ConnectionProfile , que são conexões WLAN / WAN (ou seja, SSIDs). GetLocalUsage usa dois parâmetros DateTime e retorna um objeto DataUsage que contém a quantidade de dados enviados e recebidos durante o intervalo especificado. Você pode obter uma lista de objetos ConnectionProfile chamando o método GetConnectionProfiles de NetworkInformation .

Eu escrevi a seguinte função que recupera os dados e retorna um objeto. Passe para ele um ou mais SSIDs e, opcionalmente, inicie e pare o 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
fonte
Ótimo, obrigado pela pesquisa e pela resposta!
Sathyajith Bhat