Windows 8 在哪裡儲存透過 Wifi 估計的資料使用量?

Windows 8 在哪裡儲存透過 Wifi 估計的資料使用量?

我無意中發現,在 Windows 8 中,如果您從「開始」螢幕介面右鍵單擊之前連接的無線網絡,會有一個選項顯示估計的資料使用情況。

在此輸入影像描述

在此輸入影像描述

這些數據儲存在哪裡?是否可以透過 PowerShell/WMI 取得它?對我來說,一個用例是根據數據使用情況設定自動警報 - 我目前使用網路對於更詳細的細分,但對於快速警報,如果我可以獲得使用情況,自動路線將會有很大幫助。

答案1

我記得當你第一次問這個問題時,但我終於抽出時間來弄清楚。希望它仍然對您或其他人有用!

您可以透過呼叫來存取此數據取得本地使用情況的方法連線設定檔對象,即 WLAN/WAN 連線(即 SSID)。 GetLocalUsage 採用兩個 DateTime 參數並傳回一個數據使用包含指定時間間隔內發送和接收的資料量的物件。您可以透過呼叫下列方法來取得 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

            }
        }
    }
}

答案2

這篇 MSDN 文章是我能從 Microsoft 找到的最好的文章:http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.connectivity.datausage.aspx。它告訴您如何從程式中呼叫它,但不告訴您資料的正確儲存位置。我不會全部複製並貼上,因為我不知道您更喜歡用哪種語言進行程式設計。

相關內容