PowerShell: Get/Set File Attributes
What is File Attribute
Dir and file have attributes, such as Read Only, Hidden, System. File attributes affects some command behavior. For example:
Get-ChildItem
skip files with attributes Hidden, System. Unless-Force
or other option is used.Remove-Item
refuse to remove a dir with attribute βRead Onlyβ.
Common file attributes
Common attributes are displayed in the first column of output of Get-ChildItem

Meaning of the mode letters:
l
(link. Link points to another file) ord
(directory).a
(archive) β marked for backup. (file been modified since last backup)r
(read-only)h
(hidden)s
(system).
Force show hidden files, system files, read-only files
Get-ChildItem -Force
- Show also hidden and system files.
Get-ChildItem -Hidden
- Show only Hidden files.
Get-ChildItem -System
- Show only system files and dirs.
Get-ChildItem -ReadOnly
- Show only ReadOnly files.
Object type of file Attribute
File attribute is of the .net type
System.IO.FileAttributes
. That is:
- File object is of type
System.IO.FileInfo
- Dir object is of type
System.IO.DirectoryInfo
- File or Dir object has a property named
Attributes
, and its type isSystem.IO.FileAttributes
- The object
System.IO.FileAttributes
has a properties namedCompressed
,Hidden
,ReadOnly
,System
, etc., and their type isstatic
[see Object Type, Properties, Methods]
# list properties of a file Get-ItemProperty .\Documents\ | Get-Member -MemberType Properties # one of the property is # Attributes Property System.IO.FileAttributes Attributes {get;set;}

List All Possible values of file Attributes (or dir)
# list all possible file attributes [System.IO.FileAttributes] | Get-Member -Static -MemberType Properties

# list possible values of a enum type [enum]::GetValues([System.IO.FileAttributes])

Meaning of file attributes
- Archive
- This file is marked to be included in incremental backup operation. Windows sets this attribute whenever the file is modified, and backup software should clear it when processing the file during incremental backup.
- Compressed
- The file is compressed.
- Device
- Reserved for future use.
- Directory
- The file is a directory. Directory is supported on Windows, Linux, and macOS.
- Encrypted
- The file or directory is encrypted. For a file, this means that all data in the file is encrypted. For a directory, this means that encryption is the default for newly created files and directories.
- Hidden
- The file is hidden, and thus is not included in an ordinary directory listing. Hidden is supported on Windows, Linux, and macOS.
- IntegrityStream
- The file or directory includes data integrity support. When this value is applied to a file, all data streams in the file have integrity support. When this value is applied to a directory, all new files and subdirectories within that directory, by default, include integrity support.
- Normal
- The file is a standard file that has no special attributes. This attribute is valid only if it is used alone. Normal is supported on Windows, Linux, and macOS.
- NoScrubData
- The file or directory is excluded from the data integrity scan. When this value is applied to a directory, by default, all new files and subdirectories within that directory are excluded from data integrity.
- NotContentIndexed
- The file will not be indexed by the operating system's content indexing service.
- Offline
- The file is offline. The data of the file is not immediately available.
- ReadOnly
- The file is read-only. ReadOnly is supported on Windows, Linux, and macOS. On Linux and macOS, changing the ReadOnly flag is a permissions operation.
- ReparsePoint
- The file contains a reparse point, which is a block of user-defined data associated with a file or a directory. ReparsePoint is supported on Windows, Linux, and macOS.
- SparseFile
- The file is a sparse file. Sparse files are typically large files whose data consists of mostly zeros.
- System
- The file is a system file. That is, the file is part of the operating system or is used exclusively by the operating system.
- Temporary
- The file is temporary. A temporary file contains data that is needed while an application is executing but is not needed after the application is finished. File systems try to keep all the data in memory for quicker access rather than flushing the data back to mass storage. A temporary file should be deleted by the application as soon as it is no longer needed.
Reference: https://docs.microsoft.com/en-us/dotnet/api/system.io.fileattributes
Show a file's attributes (or a dir's attributes)
Sometime you have a dir that's Read Only and you cannot delete it even with Force
option.
You need to remove the Read Only first.
# list all attribute values of a file/dir (Get-Item '.\My Music\' -Force).Attributes

Here's another way to list all attribute values of a file:
# list all attributes of a file/dir Get-ItemProperty -Path "c:/Users/xah/Downloads/xxt" -Name Attributes

Set file/dir attributes
# set attributes to dir, make it ReadOnly (Get-Item "c:/Users/xah/Downloads/xxt").Attributes = "Directory", "ReadOnly"
# set attribute of a dir, make it just Directory and remove all others such as ReadOnly (Get-Item "c:/Users/xah/Downloads/xxt").Attributes = "Directory"

List files that have certain attributes
use
-Attributes
param of
Get-ChildItem
.
# list file/dir with attribute hidden or system dir -Attributes hidden,system

You can combine any of the following attribute properties:
- Archive
- Compressed
- Device
- Directory
- Encrypted
- Hidden
- IntegrityStream
- Normal
- NoScrubData
- NotContentIndexed
- Offline
- ReadOnly
- ReparsePoint
- SparseFile
- System
- Temporary
Using these operators: (No space allowed, except after comma.)
!
(NOT)+
(AND),
(OR)
Example:
Get-ChildItem -Attributes !Directory+!System+Encrypted, !Directory+!System+Compressed