Get-Content

Gets the content of the item at the specified location.

Syntax

Get-Content   [-ReadCount <Int64>]   [-TotalCount <Int64>]   [-Tail <Int32>]   [-Path] <String[]>   [-Filter <String>]   [-Include <String[]>]   [-Exclude <String[]>]   [-Force]   [-Credential <PSCredential>]   [-Delimiter <String>]   [-Wait]   [-Raw]   [-Encoding <Encoding>]   [-AsByteStream]   [-Stream <String>]   [<CommonParameters>]
Get-Content   [-ReadCount <Int64>]   [-TotalCount <Int64>]   [-Tail <Int32>]   -LiteralPath <String[]>   [-Filter <String>]   [-Include <String[]>]   [-Exclude <String[]>]   [-Force]   [-Credential <PSCredential>]   [-Delimiter <String>]   [-Wait]   [-Raw]   [-Encoding <Encoding>]   [-AsByteStream]   [-Stream <String>]   [<CommonParameters>]

Description

The Get-Content cmdlet gets the content of the item at the location specified by the path, such asthe text in a file or the content of a function. For files, the content is read one line at a timeand returns a collection of objects, each of which represents a line of content.

Beginning in PowerShell 3.0, Get-Content can also get a specified number of lines from thebeginning or end of an item.

Examples

Example 1: Get the content of a text file

This example gets the content of a file in the current directory. The LineNumbers.txt filecontains 100 lines in the format, This is Line X and is used in several examples.

1..100 | ForEach-Object { Add-Content -Path .\LineNumbers.txt -Value "This is line $_." }Get-Content -Path .\LineNumbers.txtThis is Line 1This is Line 2...This is line 99.This is line 100.

The array values 1-100 are sent down the pipeline to the ForEach-Object cmdlet. ForEach-Objectuses a script block with the Add-Content cmdlet to create the LineNumbers.txt file. The variable$_ represents the array values as each object is sent down the pipeline. The Get-Content cmdletuses the Path parameter to specify the LineNumbers.txt file and displays the content in thePowerShell console.

Example 2: Limit the number of lines Get-Content returns

This command gets the first five lines of a file. The TotalCount parameter is used to gets thefirst five lines of content. This example uses the LineNumbers.txt file that was created inExample 1.

Get-Content -Path .\LineNumbers.txt -TotalCount 5This is Line 1This is Line 2This is Line 3This is Line 4This is Line 5

Example 3: Get a specific line of content from a text file

This command gets a specific number of lines from a file and then displays only the last line ofthat content. The TotalCount parameter gets the first 25 lines of content. This example uses theLineNumbers.txt file that was created in Example 1.

(Get-Content -Path .\LineNumbers.txt -TotalCount 25)[-1]This is Line 25

The Get-Content command is wrapped in parentheses so that the command completes before going tothe next step. Get-Contentreturns an array of lines, this allows you to add the index notation afterthe parenthesis to retrieve a specific line number. In this case, the [-1] index specifies thelast index in the returned array of 25 retrieved lines.

Example 4: Get the last line of a text file

This command gets the first line and last line of content from a file. This example uses theLineNumbers.txt file that was created in Example 1.

Get-Item -Path .\LineNumbers.txt | Get-Content -Tail 1This is Line 100

This example uses the Get-Item cmdlet to demonstrate that you can pipe files into theGet-Content parameter. The Tail parameter gets the last line of the file. This method isfaster than retrieving all of the lines and using the [-1] index notation.

Example 5: Get the content of an alternate data stream

This example describes how to use the Stream parameter to get the content of an alternate datastream for files stored on a Windows NTFS volume. In this example, the Set-Content cmdlet is usedto create sample content in a file named Stream.txt.

Set-Content -Path .\Stream.txt -Value 'This is the content of the Stream.txt file'# Specify a wildcard to the Stream parameter to display all streams of the recently created file.Get-Item -Path .\Stream.txt -Stream *PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt::$DATAPSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\TestPSChildName   : Stream.txt::$DATAPSDrive       : CPSProvider    : Microsoft.PowerShell.Core\FileSystemPSIsContainer : FalseFileName      : C:\Test\Stream.txtStream        : :$DATALength        : 44# Retrieve the content of the primary, or $DATA stream.Get-Content -Path .\Stream.txt -Stream $DATAThis is the content of the Stream.txt file# Use the Stream parameter of Add-Content to create a new Stream containing sample content.Add-Content -Path .\Stream.txt -Stream NewStream -Value 'Added a stream named NewStream to Stream.txt'# Use Get-Item to verify the stream was created.Get-Item -Path .\Stream.txt -Stream *PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt::$DATAPSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\TestPSChildName   : Stream.txt::$DATAPSDrive       : CPSProvider    : Microsoft.PowerShell.Core\FileSystemPSIsContainer : FalseFileName      : C:\Test\Stream.txtStream        : :$DATALength        : 44PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt:NewStreamPSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\TestPSChildName   : Stream.txt:NewStreamPSDrive       : CPSProvider    : Microsoft.PowerShell.Core\FileSystemPSIsContainer : FalseFileName      : C:\Test\Stream.txtStream        : NewStreamLength        : 46# Retrieve the content of your newly created Stream.Get-Content -Path .\Stream.txt -Stream NewStreamAdded a stream named NewStream to Stream.txt

The Stream parameter is a dynamic parameter of theFileSystem provider.By default Get-Content only retrieves data from the primary, or $DATA stream. Streams can beused to store hidden data such as attributes, security settings, or other data.

Example 6: Get raw content

The commands in this example get the contents of a file as one string, instead of an array ofstrings. By default, without the Raw dynamic parameter, content is returned as an array ofnewline-delimited strings. This example uses the LineNumbers.txt file that was created in Example1.

$raw = Get-Content -Path .\LineNumbers.txt -Raw$lines = Get-Content -Path .\LineNumbers.txtWrite-Host "Raw contains $($raw.Count) lines."Write-Host "Lines contains $($lines.Count) lines."Raw contains 1 lines.Lines contains 100 lines.

Example 7: Use Filters with Get-Content

You can specify a filter to the Get-Content cmdlet. When using filters to qualify the Pathparameter, you need to include a trailing asterisk (*) to indicate the contents of thepath.

The following command gets the content of all *.log files in the C:\Temp directory.

Get-Content -Path C:\Temp\* -Filter *.log

Example 8: Get file contents as a byte array

This example demonstrates how to get the contents of a file as a [byte[]] as a single object.

$byteArray = Get-Content -Path C:\temp\test.txt -AsByteStream -RawGet-Member -InputObject $bytearrayTypeName: System.Byte[]Name           MemberType            Definition----           ----------            ----------Count          AliasProperty         Count = LengthAdd            Method                int IList.Add(System.Object value)

The first command uses the AsByteStream parameter to get the stream of bytes from the file.The Raw parameter ensures that the bytes are returned as a [System.Byte[]]. If the Rawparameter was absent, the return value is a stream of bytes, which is interpreted byPowerShell as [System.Object[]].

Parameters

-AsByteStream

Specifies that the content should be read as a stream of bytes. The AsByteStream parameter wasintroduced in Windows PowerShell 6.0.

A warning occurs when you use the AsByteStream parameter with the Encoding parameter. TheAsByteStream parameter ignores any encoding and the output is returned as a stream of bytes.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Credential

Note

This parameter is not supported by any providers installed with PowerShell.To impersonate another user, or elevate your credentials when running this cmdlet,use Invoke-Command.

Type:PSCredential
Position:Named
Default value:Current user
Accept pipeline input:True (ByPropertyName)
Accept wildcard characters:False
-Delimiter

Specifies the delimiter that Get-Content uses to divide the file into objects while it reads. Thedefault is \n, the end-of-line character. When reading a text file, Get-Content returns acollection of string objects, each of which ends with an end-of-line character. When you enter adelimiter that does not exist in the file, Get-Content returns the entire file as a single,undelimited object.

You can use this parameter to split a large file into smaller files by specifying a file separator,as the delimiter. The delimiter is preserved (not discarded) and becomes the last item in each filesection.

Delimiter is a dynamic parameter that the FileSystem provider adds to the Get-Contentcmdlet. This parameter works only in file system drives.

Note

Currently, when the value of the Delimiter parameter is an empty string, Get-Content doesnot return anything. This is a known issue. To force Get-Content to return the entire file asa single, undelimited string. Enter a value that does not exist in the file.

Type:String
Position:Named
Default value:End-of-line character
Accept pipeline input:False
Accept wildcard characters:False
-Encoding

Specifies the type of encoding for the target file. The default value is utf8NoBOM.

The acceptable values for this parameter are as follows:

  • ascii: Uses the encoding for the ASCII (7-bit) character set.
  • bigendianunicode: Encodes in UTF-16 format using the big-endian byte order.
  • oem: Uses the default encoding for MS-DOS and console programs.
  • unicode: Encodes in UTF-16 format using the little-endian byte order.
  • utf7: Encodes in UTF-7 format.
  • utf8: Encodes in UTF-8 format.
  • utf8BOM: Encodes in UTF-8 format with Byte Order Mark (BOM)
  • utf8NoBOM: Encodes in UTF-8 format without Byte Order Mark (BOM)
  • utf32: Encodes in UTF-32 format.

Encoding is a dynamic parameter that the FileSystem provider adds to the Get-Content cmdlet.This parameter is available only in file system drives.

When reading from and writing to binary files, use the AsByteStream parameter and a value of 0for the ReadCount parameter. A ReadCount value of 0 reads the entire file in a single readoperation. The default ReadCount value, 1, reads one byte in each read operation and convertseach byte into a separate object, which causes errors when you use the Set-Content cmdlet to writethe bytes to a file unless you use AsByteStream parameter.

Beginning with PowerShell 6.2, the Encoding parameter also allows numeric IDs of registered codepages (like -Encoding 1251) or string names of registered code pages (like-Encoding "windows-1251"). For more information, see the .NET documentation forEncoding.CodePage.

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Accept pipeline input:False
Accept wildcard characters:False
-Exclude

Specifies, as a string array, an item or items that this cmdlet excludes in the operation.The value of this parameter qualifies the Path parameter.

Enter a path element or pattern, such as *.txt.Wildcard characters are permitted.

The Exclude parameter is effective only when the command includes the contents of an item,such as C:\Windows\*, where the wildcard character specifies the contents of the C:\Windowsdirectory.

Type:System.String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:True
-Filter

Specifies a filter to qualify the Path parameter. The FileSystemprovider is the only installed PowerShell provider that supports the use of filters. You can findthe syntax for the FileSystem filter language in about_Wildcards.Filters are more efficient than other parameters, because the provider applies them when the cmdletgets the objects rather than having PowerShell filter the objects after they are retrieved.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:True
-Force

Force will override a read-only attribute or create directories to complete a file path. TheForce parameter does not attempt to change file permissions or override security restrictions.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False
-Include

Specifies, as a string array, an item or items that this cmdlet includes in the operation. The valueof this parameter qualifies the Path parameter. Enter a path element or pattern, such as"*.txt". Wildcard characters are permitted. The Include parameter is effective only when thecommand includes the contents of an item, such as C:\Windows\*, where the wildcard characterspecifies the contents of the C:\Windows directory.

Type:System.String[]
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:True
-LiteralPath

Specifies a path to one or more locations. The value of LiteralPath is used exactly as it istyped. No characters are interpreted as wildcards. If the path includes escape characters, encloseit in single quotation marks. Single quotation marks tell PowerShell not to interpret any charactersas escape sequences.

For more information, see about_Quoting_Rules.

Type:System.String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Accept pipeline input:True (ByPropertyName)
Accept wildcard characters:False
-Path

Specifies the path to an item where Get-Content gets the content. Wildcard characters arepermitted. The paths must be paths to items, not to containers. For example, you must specify a pathto one or more files, not a path to a directory.

Type:System.String[]
Position:0
Default value:None
Accept pipeline input:True (ByPropertyName)
Accept wildcard characters:True
-Raw

Ignores newline characters and returns the entire contents of a file in one string with the newlinespreserved. By default, newline characters in a file are used as delimiters to separate the inputinto an array of strings. This parameter was introduced in PowerShell 3.0.

Raw is a dynamic parameter that the FileSystem provider adds to the Get-Content cmdletThis parameter works only in file system drives.

Type:SwitchParameter
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-ReadCount

Specifies how many lines of content are sent through the pipeline at a time. The default value is 1.A value of 0 (zero) sends all of the content at one time.

This parameter does not change the content displayed, but it does affect the time it takes todisplay the content. As the value of ReadCount increases, the time it takes to return the firstline increases, but the total time for the operation decreases. This can make a perceptibledifference in large items.

Type:Int64
Position:Named
Default value:1
Accept pipeline input:True (ByPropertyName)
Accept wildcard characters:False
-Stream

Gets the contents of the specified alternate NTFS file stream from the file. Enter the stream name.Wildcards are not supported.

Stream is a dynamic parameter that the FileSystem provider adds to the Get-Content cmdlet.This parameter works only in file system drives on Windows systems. This parameter was introduced inWindows PowerShell 3.0.

Type:String
Position:Named
Default value:None
Accept pipeline input:False
Accept wildcard characters:False
-Tail

Specifies the number of lines from the end of a file or other item. You can use the Tailparameter name or its alias, Last. This parameter was introduced in PowerShell 3.0.

Type:Int32
Aliases:Last
Position:Named
Default value:None
Accept pipeline input:True (ByPropertyName)
Accept wildcard characters:False
-TotalCount

Specifies the number of lines from the beginning of a file or other item. The default is -1 (alllines).

You can use the TotalCount parameter name or its aliases, First or Head.

Type:Int64
Aliases:First, Head
Position:Named
Default value:-1
Accept pipeline input:True (ByPropertyName)
Accept wildcard characters:False
-Wait

Keeps the file open after all existing lines have been output. While waiting, Get-Content checksthe file once each second and outputs new lines if present. You can interrupt Wait by pressingCTRL+C. Waiting also ends if the file gets deleted, in which case a non-terminating error isreported.

Wait is a dynamic parameter that the FileSystem provider adds to the Get-Content cmdlet. Thisparameter works only in file system drives. Wait cannot be combined with Raw.

Type:SwitchParameter
Position:Named
Default value:False
Accept pipeline input:False
Accept wildcard characters:False

Inputs

System.Int64, System.String[], System.Management.Automation.PSCredential

You can pipe the read count, total count, paths, or credentials to Get-Content.

Outputs

System.Byte, System.String

Get-Content returns strings or bytes. The output type depends upon the type of content that youspecify as input.

Notes

The Get-Content cmdlet is designed to work with the data exposed by any provider. To get theproviders in your session, use the Get-PSProvider cmdlet. For more information, seeabout_Providers.