Windows 8在哪里存储Wifi上的估计数据使用量?


19

我无意间发现,在Windows 8中,如果您从“开始”屏幕界面中右键单击先前连接的无线网络,则可以选择显示估计的数据使用量。

在此处输入图片说明

在此处输入图片说明

这些数据存储在哪里?是否可以通过PowerShell / WMI来获取?对我来说,一个用例是根据数据使用情况设置自动警报-我目前使用Networx进行更详细的分类,但对于快速警报,如果我可以获取使用情况,则自动路由会有所帮助。


1
我不知道为什么只估计它。
Der Hochstapler 2013年

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlan看起来相关。我还在搜寻。
鲍勃,

它是相关的,但是我的研究表明它与gui完全相关,在实际估计的存储位置上还没有看到任何东西。谷歌上没有那个注册码的东西,除了一个结果。
MDMoore313

1
@OliverSalzburg可能他们称其为“估计值”,因为它可能显示的数字不同于您的ISP。可能他们也在猜测一些开销(Windows无法测量,因为Windows已添加到其他位置)
derobert 2013年

Answers:


3

我记得您第一次问这个问题的时候,但是我终于找到答案了。希望它对您或其他人仍然有用!

您可以通过调用ConnectionProfile对象的GetLocalUsage方法(即WLAN / WAN连接(即SSID))来访问此数据。GetLocalUsage具有两个DateTime参数,并返回一个DataUsage对象,该对象包含在指定时间间隔内发送和接收的数据量。您可以通过调用NetworkInformationGetConnectionProfiles方法来获取ConnectionProfile对象的列表。

我编写了以下函数来检索数据并返回一个对象。传递给它一个或多个SSID,还可以选择启动和停止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

            }
        }
    }
}

太好了,谢谢您的研究和回答!
Sathyajith Bhat

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.