Я случайно обнаружил, что в Windows 8, если щелкнуть правой кнопкой мыши по ранее подключенной беспроводной сети на начальном экране, есть возможность отобразить предполагаемое использование данных.
Где хранятся эти данные? Можно ли получить их через PowerShell/WMI? Примером использования для меня будет настройка автоматических оповещений на основе использования данных - в настоящее время я используюНетворксдля более подробной разбивки, но и для быстрого оповещения, если я смогу получить данные об использовании, автоматизированный маршрут был бы очень полезен.
решение1
Я помню, когда ты впервые задал этот вопрос, но я наконец-то разобрался с этим. Надеюсь, это все еще полезно для тебя или кого-то еще!
Вы можете получить доступ к этим данным, позвонив по номеруПолучитьЛокальноеИспользованиеметодConnectionProfileобъекты, которые являются соединениями 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. Он говорит вам, как вы можете вызвать его из программы, но не где хранятся сами данные. Я не собираюсь копировать и вставлять все это, потому что я не знаю, на каком языке вы предпочитаете программировать.