Archive for the ‘BITS’ Category

Übermittlungsoptimierung Neuigkeiten in Windows 10 v1703

5 April 2017

Ich hatte mich hier schon mal mit der Übermittlungsoptimierung auseinandergesetzt, als ein WLAN verstopft wurde. https://newyear2006.wordpress.com/2016/05/28/bermittlungsoptimierung-frisst-die-gesamte-bandbreite/. Microsoft hat mit Windows 10 angefangen Updates nicht mehr per BITS auszuliefern sondern eben über die Übermittlungsoptimierung. Nur waren seither die Möglichkeiten darüber Informationen zu erhalten sehr begrenzt.

Mit dem Creators Update allerdings, hat ein neues Modul mit Namen DeliveryOptimization Einzug gehalten.

PS > get-command -Module DeliveryOptimization

CommandType     Name                                               Version    Source
———–     —-                                               ——-    ——
Cmdlet          Get-DeliveryOptimizationPerfSnap                   1.0.0.0    DeliveryOptimization
Cmdlet          Get-DeliveryOptimizationStatus                     1.0.0.0    DeliveryOptimization

Man kann zwar keine Einstellungen ändern, allerdings bekommt man nun endlich einige Infos zu dem was im Hintergrund stattfindet.

PS > Get-DeliveryOptimizationStatus
No active Delivery Optimization download or upload jobs
PS > Get-DeliveryOptimizationPerfSnap
There are no Delivery Optimization downloads to show PerfSnap data

Nachdem man bei den Updateeinstellungen dann die Verbreitung über das LAN oder übers Internet aktiviert hat, bekommt man entsprechende Daten, hier zu den einzelnen Dateien:

PS > Get-DeliveryOptimizationStatus

FileId                  : a4d873c066a67a58ce46f0bb69bc6e6d2eaddda8
FileSize                : 182553
TotalBytesDownloaded    : 182553
PercentPeerCaching      : 0
BytesFromPeers          : 0
BytesFromHttp           : 182553
Status                  : Caching
Priority                : Foreground
BytesFromLanPeers       : 0
BytesFromGroupPeers     : 0
BytesFromInternetPeers  : 0
BytesToLanPeers         : 0
BytesToGroupPeers       : 0
BytesToInternetPeers    : 0
HttpConnectionCount     : 4
LanConnectionCount      : 0
GroupConnectionCount    : 0
InternetConnectionCount : 0
DownloadMode            : 99
SourceURL               : http://download.windowsupdate.com/c/msdownload/update/software
/crup/2017/04/windows10.0-kb
6251-x64-express_a4d873c066a67a58ce46f0bb69bc6e6d2eaddda8.cab

Dabei sind vor allem die gesammelten Performance Daten interessant:

PS > Get-DeliveryOptimizationPerfSnap
FilesDownloaded                 : 5
FilesUploaded                   : 0
TotalBytesDownloaded            : 565.427
TotalBytesUploaded              : 0
AverageDownloadSize             : 113.085
AverageUploadSize               : 0

Diese gibt es auch in erweiterter Fassung bei Verwendung von –Verbose:

PS > Get-DeliveryOptimizationPerfSnap -Verbose
FilesDownloaded                 : 4
FilesUploaded                   : 0
TotalBytesDownloaded            : 398.452
TotalBytesUploaded              : 0
AverageDownloadSize             : 99.613
AverageUploadSize               : 0
DownloadMode                    : 3
Files                           : 7
CacheSizeBytes                  : 0
TotalDiskBytes                  : 135.770.664.960
AvailableDiskBytes              : 120.237.105.152
NumberOfPeers                   : 0
CdnConnections                  : 10
LanConnections                  : 0
GroupConnections                : 0
InternetConnections             : 0
DownlinkBps                     : 2.339.984
UplinkBps                       : 127.664
ForegroundDownloadRatePct       : 90
BackgroundDownloadRatePct       : 45
UploadRatePct                   : 100
UploadCount                     : 0

Hier wurde das Modul das erste Mal erwähnt: https://2pintsoftware.com/delivery-optimization-powershell-cmdlets/. Hier findet man auch weitere wissenswerte Infos zur Übermittlungsoptimierung. Der Downloadmode wird hier beschrieben: https://2pintsoftware.com/delivery-optimization-dl-mode/.

Übermittlungsoptimierung frisst die gesamte Bandbreite

28 Mai 2016

Eigentlich ist die Idee von Peer2Peer Protokollen reizvoll. So ermöglicht Windows 10 z. B. Updates über Peer2Peer von anderen Rechnern im Internet anstatt von Microsoft direkt zu laden. Leider hapert es an der Umsetzung.

Das Problem trat massiv bei einer aktuellen Windows 10 Preview mit Build 14295 auf. Als gerade eine neuere Buildversion verfügbar wurde, konnte man mit anderen Rechnern im selben Netzwerk nicht mehr vernünftig ins Internet. Die massiven Downloads, mehrere Verbindungen vom selben Rechner des neuen Builds, sorgten auf den anderen Rechnern für Stillstand.

Am Anfang war dies gar nicht klar, denn Windows Updates hatten früher noch nie Probleme gemacht. Diese laufen normalerweise über den Intelligenten Hintergrundübertragungsdienst (BITS). Erst Windows 10 führte die Möglichkeit der Peer2Peer Updates ein. Als das Problem dem Windowsrechner zugeordnet war, ging es an die Ursachenforschung.

Ein Get-Bitstransfer –AllUsers brachte gähnende Leere. Also war der BITS nicht Schuld, aber was war es dann, wo die Bandbreite fraß? Also den Windows Ressourcenmonitor angeworfen und beim Netzwerkverkehr nach den Downloads geschaut. Tatsächlich war hier der SVCHOST.EXE netsvcs mit einem fetten Download beteiligt. Nachdem zuerst der BITS-Dienst ausgeschaltet wurde, vielleicht hat er ja eine geheime Übertragung am Laufen, gab es immer noch keine Besserung.

Dann mal geschaut, was alles hinter netsvcs steckt:

$netsvcs= (Get-ItemProperty ‚registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SvcHost\‘ -Name netsvcs).netsvcs

$netsvcs
CertPropSvc
SCPolicySvc
lanmanserver
gpsvc
IKEEXT
iphlpsvc
seclogon
AppInfo
msiscsi
EapHost
schedule
winmgmt
browser
ProfSvc
SessionEnv
wercplsupport
dosvc
DcpSvc
wlidsvc
NcaSvc
NetSetupSvc
Themes
RetailDemo
lfsvc
FastUserSwitchingCompatibility
Ias
Irmon
Nla
Ntmssvc
NWCWorkstation
Nwsapagent
Rasauto
Rasman
Remoteaccess
SENS
Sharedaccess
SRService
Tapisrv
Wmi
WmdmPmSp
wuauserv
BITS
ShellHWDetection
LogonHours
PCAudit
helpsvc
uploadmgr
dmwappushservice
BDESVC
XboxNetApiSvc
UsoSvc
XblGameSave
DmEnrollmentSvc
DsmSvc
UserManager
XblAuthManager
AppMgmt

Na super da kommt richtig Freude auf. Um mehr Infos zu bekommen, könnte man nun

$netsvcs | Get-Service

aufrufen, da aber sicher nicht alle Dienste laufen, macht es mehr Sinn gleich mal die nicht vorhandenen und nicht laufenden auszunehmen:

($sr=$netsvcs | Get-Service | where status -eq running) 2> $null

Status   Name               DisplayName
——   —-               ———–
Running  CertPropSvc        Zertifikatverteilung
Running  lanmanserver       Server
Running  iphlpsvc           IP-Hilfsdienst
Running  AppInfo            Anwendungsinformationen
Running  schedule           Aufgabenplanung
Running  winmgmt            Windows-Verwaltungsinstrumentation
Running  browser            Computerbrowser
Running  ProfSvc            Benutzerprofildienst
Running  SessionEnv         Konfiguration für Remotedesktops
Running  dosvc              Übermittlungsoptimierung
Running  Themes             Designs
Running  lfsvc              Geolocation-Dienst
Running  SENS               Benachrichtigungsdienst für Systeme…
Running  ShellHWDetection   Shellhardwareerkennung
Running  UserManager        Benutzer-Manager
Running  AppMgmt            Anwendungsverwaltung

Damit wird die Sache schon übersichtlicher und man hat nähere Infos zum Geschehen.

Und so kann man sich dann die Frage stellen, was ist ein Übermittlungsoptimierungs-Dienst dosvc? Genauer gesagt handelt es sich dabei um die Windows Update Übermittlungsoptimierung. Also offizielle Infos dazu: http://windows.microsoft.com/de-de/windows-10/windows-update-delivery-optimization-faq.

Dann werden auch schnell die Probleme offensichtlich: https://social.technet.microsoft.com/Forums/en-US/b94d8e74-58de-451a-b137-7ec2028adc27/delivery-optimization-service-downloading-something-and-using-all-my-bandwidth?forum=win10itprogeneral

Get-ItemProperty registry::HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\dosvc -Name ServiceDLL| select servicedll

ServiceDll
———-
C:\WINDOWS\system32\dosvc.dll

Also ist die dosvc.dll die DLL, die es zu beachten gibt.

Nachdem das nun geklärt ist, so dann sollten wir mal wieder mit Mythen aufräumen, die sich leider immer wieder ergeben und ohne jeden Beweis behauptet werden.

Hier https://social.technet.microsoft.com/Forums/forefront/en-US/074181bc-1e1f-4b06-b816-6d9e1dac3da4/wudo-clarification-can-it-tunnel-out-through-the-fireall-protecting-my-network?forum=win10itprosecurity und hier http://www.wintotal.de/windows-10-p2p-update-verteilung-deaktivieren/ behauptet jemand, das für TCP und UDP vom Übertragungsoptimierungs-Dienst zwei unterschiedliche Ports benutzt werden. Einmal 7680 bei TCP und 3544 UDP. Dem ist aber nicht so.

Schauen wir uns zunächst die Regel in der Firewall an, ob es da was passendes gibt:

Get-NetFirewallServiceFilter -Service dosvc|Get-NetFirewallRule

Name                  : DeliveryOptimization-TCP-In
DisplayName           : Übermittlungsoptimierung (TCP eingehend)
Description           : Eingehende Regel, die der Übermittlungsoptimierung die Verbindung mit Remoteendpunkten erlaubt.
DisplayGroup          : Übermittlungsoptimierung
Group                 : @%systemroot%\system32\dosvc.dll,-100
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Allow
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : Die Regel wurde erfolgreich vom Speicher aus analysiert. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Name                  : DeliveryOptimization-UDP-In
DisplayName           : Übermittlungsoptimierung (UDP eingehend)
Description           : Eingehende Regel, die der Übermittlungsoptimierung die Verbindung mit Remoteendpunkten erlaubt.
DisplayGroup          : Übermittlungsoptimierung
Group                 : @%systemroot%\system32\dosvc.dll,-100
Enabled               : True
Profile               : Any
Platform              : {}
Direction             : Inbound
Action                : Allow
EdgeTraversalPolicy   : Allow
LooseSourceMapping    : False
LocalOnlyMapping      : False
Owner                 :
PrimaryStatus         : OK
Status                : Die Regel wurde erfolgreich vom Speicher aus analysiert. (65536)
EnforcementStatus     : NotApplicable
PolicyStoreSource     : PersistentStore
PolicyStoreSourceType : Local

Also es gibt eine Regel für TCP und UDP und welche Ports werden nun benutzt?

Get-NetFirewallServiceFilter -Service dosvc|Get-NetFirewallRule|Get-NetFirewallPortFilter

Protocol      : TCP
LocalPort     : 7680
RemotePort    : Any
IcmpType      : Any
DynamicTarget : Any

Protocol      : UDP
LocalPort     : 7680
RemotePort    : Any
IcmpType      : Any
DynamicTarget : Any

Ergo, nix UDP auf 3544. Übrigens Port 3544 wäre Teredo, wahrscheinlich hat da jemand nicht genau genug geschaut und die Leute übernehmen immer alles ohne es zu prüfen. http://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=3544

Version von Windows Background Intelligent Transfer Service, kurz BITS ermitteln

30 November 2015

Google Chrome nutzt ihn, Microsoft in all seinen Produkten sowieso aber kaum einer bekommt ihn zu Gesicht, den Background Intelligent Transfer Service, kurz BITS. Der Dienst ist essentiell und ist mittlerweile bei Version 5.x angelangt.

Hier ein Beispiel wie man abfragen kann, wie weit ein Download für ein Windows 10 Update ist: https://newyear2006.wordpress.com/2015/07/29/wie-kann-ich-sehen-wie-weit-der-download-von-windows-10-ist/.

Um bestimmte Dinge aber besser einschätzen und Probleme klären zu können, ist es hilfreich, wenn man die Version des BITS kennt. Die entscheidende Datei dabei ist QMGR.DLL im System32-Verzeichnis:

(Get-Item "$($Env:windir)\system32\qmgr.dll").Versioninfo| fl File*

ergibt unter Windows 10 z. B.:

FileVersionRaw  : 7.8.10240.16384
FileBuildPart   : 10240
FileDescription : Intelligenter Hintergrundübertragungsdienst
FileMajorPart   : 7
FileMinorPart   : 8
FileName        : C:\WINDOWS\system32\qmgr.dll
FilePrivatePart : 16384
FileVersion     : 7.8.10240.16384 (th1.150709-1700)

Hier die offizielle Tabelle der Versionen: https://msdn.microsoft.com/en-us/library/aa362837(v=vs.85).aspx

BITS version QMgr.dll file version number
BITS 5.0 7.7.xxxx.xxxx
BITS 4.0 7.5.xxxx.xxxx
BITS 3.0 7.0.xxxx.xxxx
BITS 2.5 6.7.xxxx.xxxx
BITS 2.0 6.6.xxxx.xxxx
BITS 1.5 6.5.xxxx.xxxx
BITS 1.2 6.2.xxxx.xxxx
BITS 1.0 6.0.xxxx.xxxx

Wobei ich jetzt 7.8.xxxx.xxx als BITS 5.1 interpretiere. Übrigens hatte Windows 8.1 nur Versionen 7.7.xxx, d. h. es muss bei Version 7.8 unter Windows 10 etwas neues geben. Windows 7 verwendet Version 7.5 also BITS 4.0.

Hier kann man nachlesen, was sich in den Versionen bis BITS 5.0 alles verändert hat: https://msdn.microsoft.com/en-us/library/aa363167(v=vs.85).aspx. Leider ist, wie immer bei MS, die Doku nicht auf dem aktuellen Stand. Saftladen. Ansonsten findet man noch ältere gute Ressourcen unter: http://blogs.msdn.com/b/wmi/archive/tags/bits/. Spannend wird die Geschichte mit den Authentifizierungen: https://msdn.microsoft.com/en-us/library/aa362789(v=vs.85).aspx. Aber dazu ein anderes Mal mehr.

Wie kann ich sehen, wie weit der Download von Windows 10 ist?

29 Juli 2015

Windows 10 ist nun offiziell da und doch wieder nicht. Wer seine Windows 10 Version vorab reserviert hat und nun voller Erwartung das Windowssymbol anklickt um einen Downloadbalken zu sehen, wird enttäuscht.

Aber keine Panik, das Update wird tatsächlich geladen. Dazu wird BITS verwendet der Background Intelligent Transfer Service. Wer den aktuellen Status des Downloads einsehen möchte, der kann dieses Powershellscript als Admin verwenden:

(Get-BitsTransfer -AllUsers).Filelist | where remotename
-match "10240.16384.150709"

Als Ergebnis bekommt man dazu so etwas angezeigt:

RemoteName         : http://auPL.v4.b1.download.windowsupdate.com/d/updt/2015/07/
10240.16384.150709-1700.th1_clientpro_ret_x64fre_de-de_f4c39bdfc0e59fb657e30d78b978408bf3b42b1f.esd

LocalName          : C:\WINDOWS\SoftwareDistribution\Download3c9f77b02bd0268ccdc3
aa4c6a86844\10240.16384.150709-1700.th1_CLIENTPRO_RET_x64fre_de-de.esd
IsTransferComplete : False
BytesTotal         : 2847241986
BytesTransferred   : 326778392

Hier sieht man dann bei BytesTotal und BytesTransferred, wie weit der Download tatsächlich ist.

Damit bestätigt sich auch, dass die Version 10240 tatsächlich die offizielle RTM-Version ist und dass alle Insider dieser schon seit über einer Woche erhalten hatten.

Wer bei obiger Angabe von BytesTransferred keine Veränderung feststellt, der sollte den Downloadjob prüfen, ob dieser evtl. einen Fehler hat oder ob er den korrekten Status hat:

(Get-BitsTransfer -AllUsers) | where {($_.Filelist).remotename -match "10240.16384.150709"}

JobId                                DisplayName        TransferType JobState     OwnerAccount
—–                                ———–        ———— ——–     ————
5x72x4e2-fx5d-414x-88xx-6xc5x762x6c8 WU Client Download Download     Transferring NT-AUTORITÄT\SYSTEM

Falls nicht Transferring angegeben sein sollte, hilft das Cmdlet Resume-BitsTransfer weiter.

Noch ein Tipp: Wenn der Rechner so alleine vor sich hinläuft kann es bei langsamen Leitungen ewig dauern. Man sollte also dafür sorgen, dass der Rechner nicht noch zusätzlich ein Nickerchen einlegt, wenn er gerade nicht benutzt wird, weil sonst schläft auch der Download…