19

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

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

2 ответа2

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

            }
        }
    }
}
1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .