Windows 8 จัดเก็บการใช้ข้อมูลโดยประมาณบน Wifi ที่ไหน


19

ฉันค้นพบโดยบังเอิญว่าใน Windows 8 หากคุณคลิกขวาที่เครือข่ายไร้สายที่เชื่อมต่อก่อนหน้านี้จากส่วนติดต่อหน้าจอเริ่มมีตัวเลือกเพื่อแสดงการใช้ข้อมูลโดยประมาณ

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ข้อมูลนี้ถูกเก็บไว้ที่ไหน? เป็นไปได้ที่จะดึงข้อมูลนี้ผ่าน PowerShell / WMI หรือไม่ กรณีการใช้งานสำหรับฉันคือการตั้งค่าการแจ้งเตือนอัตโนมัติตามการใช้ข้อมูล - ขณะนี้ฉันใช้Networxสำหรับรายละเอียดเพิ่มเติม แต่สำหรับการแจ้งเตือนอย่างรวดเร็วหากฉันสามารถดึงข้อมูลการใช้งานได้เส้นทางอัตโนมัติจะช่วยได้มาก


1
ผมสงสัยว่าทำไมมันเป็นเพียงการประมาณการ
Der Hochstapler

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlanหน้าตาที่เกี่ยวข้อง ฉันยังค้นหาอยู่
Bob

มันเกี่ยวข้อง แต่การวิจัยของฉันแสดงให้เห็นว่าเกี่ยวข้องกับ gui ล้วนๆไม่เห็นอะไรเลยในที่ที่เก็บข้อมูลการประเมินจริง ไม่มีอะไรบน Google สำหรับคีย์ reg นั้นยกเว้นผลลัพธ์เดียวในขณะนี้
MDMoore313

1
@OliverSalzburg พวกเขาอาจเรียกมันว่าค่าประมาณเนื่องจากอาจแสดงหมายเลขที่แตกต่างจาก ISP ของคุณ อาจเป็นไปได้ที่พวกเขากำลังคาดเดาที่ร้อยละค่าใช้จ่ายบางส่วนเช่นกัน (ที่ Windows ไม่สามารถวัดเป็นความเป็นอยู่ของมันเพิ่มที่อื่น ๆ )
derobert

คำตอบ:


3

ฉันจำได้ว่าเมื่อคุณถามคำถามนี้เป็นครั้งแรก แต่ในที่สุดฉันก็สามารถคำนวณได้ หวังว่ามันยังคงใช้กับคุณหรือคนอื่น!

คุณสามารถเข้าถึงข้อมูลนี้ได้โดยการเรียกใช้เมธอดGetLocalUsageของวัตถุConnectionProfileซึ่งเป็นการเชื่อมต่อ WLAN / WAN (เช่น SSID) GetLocalUsage รับพารามิเตอร์ DateTime สองรายการและส่งคืนวัตถุDataUsageที่มีจำนวนข้อมูลที่ส่งและรับในช่วงเวลาที่ระบุ คุณจะได้รับรายชื่อของวัตถุ ConnectionProfile โดยการเรียกGetConnectionProfilesวิธีการNetworkInformation

ฉันเขียนฟังก์ชันต่อไปนี้ที่ดึงข้อมูลและส่งคืนวัตถุ ส่งผ่าน 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

1

บทความ MSDN นี้เป็นที่ดีที่สุดที่ฉันสามารถหาจาก Microsoft: http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.connectivity.datausage.aspx มันบอกคุณว่าคุณสามารถเรียกมันได้จากโปรแกรม แต่ไม่เก็บข้อมูลที่เหมาะสม ฉันจะไม่คัดลอกและวางทั้งหมดเพราะฉันไม่รู้ว่าคุณต้องการเขียนโปรแกรมภาษาใด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.