Di mana Windows 8 menyimpan perkiraan penggunaan data melalui Wifi?

19

Saya tidak sengaja menemukan bahwa di Windows 8, jika Anda mengklik kanan jaringan nirkabel yang sebelumnya terhubung dari antarmuka layar Mulai, ada opsi untuk menampilkan perkiraan penggunaan data.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Di mana data ini disimpan? Apakah mungkin untuk mengambil ini melalui PowerShell / WMI? Kasus penggunaan bagi saya adalah mengatur peringatan otomatis berdasarkan penggunaan data - Saat ini saya menggunakan Networx untuk rincian lebih rinci, tetapi untuk peringatan cepat, jika saya dapat mengambil penggunaannya, rute otomatis akan banyak membantu.

Sathyajith Bhat
sumber
1
Saya bertanya-tanya mengapa itu hanya perkiraan .
Der Hochstapler
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Network\DataUsage\Wlanterlihat terkait. Saya masih mencari.
Bob
Itu terkait, tetapi penelitian saya menunjukkan itu murni terkait dengan gui, belum melihat apa pun di mana perkiraan sebenarnya disimpan. tidak ada di google untuk kunci reg itu kecuali satu hasil saat ini.
MDMoore313
1
@ OliverSalzburg Mungkin mereka menyebutnya perkiraan karena mungkin menampilkan nomor yang berbeda dari ISP Anda. Mungkin mereka juga menebak beberapa persen overhead (yang tidak dapat diukur Windows, seperti yang ditambahkan di tempat lain)
derobert

Jawaban:

3

Saya ingat ketika Anda pertama kali mengajukan pertanyaan ini, tetapi akhirnya saya berhasil mengatasinya. Semoga masih berguna bagi Anda atau orang lain!

Anda dapat mengakses data ini dengan memanggil metode GetLocalUsage dari objek ConnectionProfile , yang merupakan koneksi WLAN / WAN (yaitu SSID). GetLocalUsage mengambil dua parameter DateTime dan mengembalikan objek DataUsage yang berisi jumlah data yang dikirim dan diterima selama interval yang ditentukan. Anda bisa mendapatkan daftar objek ConnectionProfile dengan memanggil metode GetConnectionProfiles dari NetworkInformation .

Saya menulis fungsi berikut yang mengambil data dan mengembalikan objek. Berikan satu atau lebih SSID dan mulai dan hentikan 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
sumber
Hebat, terima kasih atas penelitian dan jawabannya!
Sathyajith Bhat