Windows unterstützt Extended Attributes in Form von Alternate Data Streams (ADS). Ähnlich wie unter Solaris sind Extended Attributes damit keine einfachen Key/Value-Paare, sondern Datei-Streams. Jede Datei hat einen Haupt-Stream mit dem Namen :$DATA. Daneben können aber weitere Streams für eine Datei existieren.
Zugegriffen wird auf ein Attribut bzw. Alternate Data Stream, in dem an den Dateinamen der Stream-Name, getrennt durch einen Doppelpunkt, angehängt wird.
> echo Hello World > test.txt
> type test.txt
Hello World
> echo my attribute value > test.txt:myattribute
> type test.txt:myattribute
my attribute value
Auf den eigentlichen Dateiinhalt kann auch mit dem Stream-Namen :$DATA zugegriffen werde, was auch schon Ursache für Sicherheitslücken war. Den IIS konnte man so austricksen und den Inhalt von ASP-Dateien erhalten, in dem man ::$DATA an die URL angehangen hat.
Da der Stream Teil des Dateipfades ist, kann eigentlich mit jedem beliebigen Programm darauf zugegriffen werden, z.B. auch mit Notepad:
> notepad test.txt:myattribute
Lustigerweise funktioniert dies nicht in den Powershell-Cmdlets. Diese haben jedoch Parameter für den Zugriff auf ADS. Z.B. kann Get-Item alle Streams einer Datei auflisten:
PS D:\> Get-Item -path test.txt -stream *
PSPath : Microsoft.PowerShell.Core\FileSystem::D:\test.txt::$DATA
PSParentPath : Microsoft.PowerShell.Core\FileSystem::D:\
PSChildName : test.txt::$DATA
PSDrive : D
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : D:\test.txt
Stream : :$DATA
Length : 14
PSPath : Microsoft.PowerShell.Core\FileSystem::D:\test.txt:myattribute
PSParentPath : Microsoft.PowerShell.Core\FileSystem::D:\
PSChildName : test.txt:myattribute
PSDrive : D
PSProvider : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName : D:\test.txt
Stream : myattribute
Length : 21
Kommentare