Где в Windows 8 хранится расчетное использование данных по Wi-Fi?

19

Я случайно обнаружил, что в Windows 8, если вы щелкнете правой кнопкой мыши ранее подключенную беспроводную сеть из интерфейса начального экрана, есть возможность показать приблизительное использование данных.

введите описание изображения здесь

введите описание изображения здесь

Где хранятся эти данные? Можно ли получить это через PowerShell / WMI? Вариант использования для меня будет состоять в том, чтобы настроить автоматические оповещения на основе использования данных - в настоящее время я использую Networx для более детальной разбивки, но для быстрого оповещения, если я могу получить использование, автоматизированный маршрут очень помог бы.

Сатьяджит Бхат
источник
1
Интересно, почему это только подсчитано ?
Der Hochstapler
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlanвыглядит связанным. Я все еще ищу.
Боб
Это связано, но мое исследование показывает, что это чисто графический интерфейс, я не видел ничего о том, где хранится фактическая оценка. ничего в Google для этого ключа reg, кроме одного результата в настоящее время.
MDMoore313
1
@OliverSalzburg Вероятно, они называют это оценочным, потому что это может показать другое число, чем ваш провайдер. Возможно, они также предполагают некоторый процент накладных расходов (которые Windows не может измерить, поскольку их добавляют в другом месте)
Дероберт

Ответы:

3

Я помню, когда вы впервые задали этот вопрос, но я наконец-то дошел до его выяснения. Надеюсь, это все еще полезно для вас или кого-то еще!

Вы можете получить доступ к этим данным, вызвав метод GetLocalUsage объектов ConnectionProfile , которые являются соединениями WLAN / WAN (то есть SSID). GetLocalUsage принимает два параметра DateTime и возвращает объект DataUsage, содержащий объем данных, отправленных и полученных в течение указанного интервала. Вы можете получить список объектов ConnectionProfile, вызвав GetConnectionProfiles метод NetworkInformation .

Я написал следующую функцию, которая извлекает данные и возвращает объект. Передайте ему один или несколько SSID и при необходимости запустите и остановите DateTime's:

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
источник
Отлично, спасибо за исследование и ответ!
Сатьяджит Бхат
1

Эта статья MSDN - лучшее, что я мог найти от Microsoft: http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.connectivity.datausage.aspx . Он говорит вам, как вы можете вызвать его из программы, но не там, где хранятся данные. Я не собираюсь копировать и вставлять все это, потому что я не знаю, на каком языке вы предпочитаете программировать.

KAMonica
источник