Ich habe zufällig entdeckt, dass es unter Windows 8 eine Option zur Anzeige der geschätzten Datennutzung gibt, wenn Sie auf dem Startbildschirm mit der rechten Maustaste auf ein zuvor verbundenes drahtloses Netzwerk klicken.
Wo sind diese Daten gespeichert? Ist es möglich, diese über PowerShell/WMI abzurufen? Ein Anwendungsfall für mich wäre die Einrichtung automatischer Warnmeldungen basierend auf der Datennutzung - ich verwende derzeitNetworxFür eine detailliertere Aufschlüsselung, aber für eine schnelle Warnung wäre die automatisierte Route eine große Hilfe, wenn ich die Nutzung abrufen könnte.
Antwort1
Ich erinnere mich, als Sie diese Frage zum ersten Mal gestellt haben, aber ich bin endlich dazu gekommen, es herauszufinden. Ich hoffe, es ist für Sie oder jemand anderen immer noch von Nutzen!
Sie können diese Daten abrufen, indem Sie dieLokale Nutzung abrufenMethode vonVerbindungsprofilObjekte, die WLAN/WAN-Verbindungen (also SSIDs) sind. GetLocalUsage verwendet zwei DateTime-Parameter und gibt eineDatenverbrauchObjekt, das die Menge der während des angegebenen Intervalls gesendeten und empfangenen Daten enthält. Sie können eine Liste der ConnectionProfile-Objekte abrufen, indem Sie denVerbindungsprofile abrufenMethode vonNetzwerkinformationen.
Ich habe die folgende Funktion geschrieben, die die Daten abruft und ein Objekt zurückgibt. Übergeben Sie ihr eine oder mehrere SSIDs und optional Start- und Stopp-DateTimes:
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
}
}
}
}
Antwort2
Dieser MSDN-Artikel ist der beste, den ich von Microsoft finden konnte:http://msdn.microsoft.com/en-us/library/windows/apps/windows.networking.connectivity.datausage.aspx. Es sagt Ihnen, wie Sie es aus einem Programm aufrufen können, aber nicht, wo die eigentlichen Daten gespeichert sind. Ich werde nicht alles kopieren und einfügen, weil ich nicht weiß, in welcher Sprache Sie am liebsten programmieren.