PowerShell: Get/Set File Attributes

By Xah Lee. Date: . Last updated: .

What is File Attribute

Dir and file have attributes, such as Read Only, Hidden, System. File attributes affects some command behavior. For example:

Common file attributes

Common attributes are displayed in the first column of output of Get-ChildItem

PowerShell file mode 2022-02-22
PowerShell file mode. The first column shows common attributes.

Meaning of the mode letters:

  1. l (link. Link points to another file) or d (directory).
  2. a (archive) β†’ marked for backup. (file been modified since last backup)
  3. r (read-only)
  4. h (hidden)
  5. 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:

[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;}
 System.IO.DirectoryInfo properties 2022 Z8X2s
System.IO.DirectoryInfo properties

List All Possible values of file Attributes (or dir)

# list all possible file attributes
[System.IO.FileAttributes] | Get-Member -Static -MemberType Properties
System.IO.FileAttributes properties 2022-02-22
System.IO.FileAttributes properties
# list possible values of a enum type
System.IO.FileAttributes 2022-02-23 wQdT

Meaning of file attributes

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.
The file is compressed.
Reserved for future use.
The file is a directory. Directory is supported on Windows, Linux, and macOS.
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.
The file is hidden, and thus is not included in an ordinary directory listing. Hidden is supported on Windows, Linux, and macOS.
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.
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.
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.
The file will not be indexed by the operating system's content indexing service.
The file is offline. The data of the file is not immediately available.
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.
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.
The file is a sparse file. Sparse files are typically large files whose data consists of mostly zeros.
The file is a system file. That is, the file is part of the operating system or is used exclusively by the operating system.
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
Get-Item Attributes 2022-02-23 f28y
Get-Item 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
show file attributes 2022-02-23 cy7p
show file 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"
pwsh get set attributes 2022-02-18 GT2W
pwsh get set attributes

List files that have certain attributes

use -Attributes param of Get-ChildItem.

# list file/dir with attribute hidden or system
dir -Attributes hidden,system
list file hidden system 2022-02-23 xC4K
list file hidden system

You can combine any of the following attribute properties:

Using these operators: (No space allowed, except after comma.)


Get-ChildItem -Attributes !Directory+!System+Encrypted, !Directory+!System+Compressed

Microsoft Windows File Alias, Juncture