Table of Contents
Using the Get-Content
Cmdlet
We can use the Get-Content
cmdlet to read the contents of a file into a string.
Use the Get-Content
Cmdlet to Read a Single File
To read a single file into a string in PowerShell:
- Use the
Get-Content
cmdlet with the-Raw
parameter to read the file’s contents into a string. - Use the
.GetType()
method to check the data type of the result.
1 2 3 4 5 |
$file = "D:\abc.txt" $content = Get-Content -Path $file -Raw ($content.GetType()).Name |
1 2 3 |
String |
The Get-Content cmdlet in PowerShell reads the contents of a file or other input and output objects, such as the output of another cmdlet. The cmdlet returns the contents as an array of strings. We can use it for reading configuration files, log files, CSV files, or any other text file.
For example, we provided the -Path
parameter of the Get-Content
cmdlet with the file
value to read it. By default, Get-Content
returns the contents of the file or object as an array of strings, one string for each line of the file or object.
Using the -Raw parameter, the Get-Content
cmdlet returns the entire contents of the file or object as a single string. So, to read the file
as a single string, we used the -Raw
parameter of the Get-Content
cmdlet and stored the result in the content
variable.
To check the type of the content
, we used the GetType() method that determines the type of an object that returns the Type
object. Then, we used its .Name
property to display the name of the type on the console.
Use the Get-Content
Cmdlet with forreach loop to Read Multiple Files
To read multiple files into one String in PowerShell, use the -join
parameter on the output of the Get-Content
cmdlet.
1 2 3 4 5 |
$files = 'D:\a.txt', 'D:\b.txt', 'D:\c.txt' $content = (Get-Content -Path $files -Raw) -join '`n' ($content.GetType()).Name |
1 2 3 |
String |
We can read multiple files using the Get-Content
cmdlet. To do this, we stored all the files separated with commas in the files
variable and read them using the Get-Content
cmdlet we discussed while explaining the code section for reading a single file into a string.
The -join
parameter in PowerShell joins elements of an array or collection into a single string. For example, we joined the outputs of the Get-Content
cmdlet with the
n operator that joins the file lines using a new line separator. Then we applied the
GetType() method to the
content` to check its data type.
Not that the -Raw
parameter works only in PowerShell versions 3.0+.
For PowerShell Version 2.0+
To read a file into a string in PowerShell version 2.0+, replace the -Raw
parameter of the above-discussed code with the Out-String
cmdlet and a pipe (|
) operator.
1 2 3 4 5 |
$file = "d:\abc.txt" $content = (Get-Content -Path $file) | Out-String ($content.GetType()).Name |
1 2 3 |
String |
We discussed the Get-Content
cmdlet in the above-mentioned code sections. In this section, we used the Out-String
cmdlet instead of the -Raw
parameter to read the file into a string.
The Out-String cmdlet converts the output of a command or script into a string. It takes the output of a command or script and concatenates it into a single string. For example, we passed the output of the Get-Content
cmdlet to the Out-String
cmdlet to read the file
as a single string.
Note that the -Out-String
cmdlet is more flexible than the -Raw
parameter, as we can use it with any cmdlet or script. It can also read multiple files without any need for the -join
parameter:
1 2 3 4 5 |
$files = 'D:\a.txt', 'D:\b.txt', 'D:\c.txt' $content = (Get-Content -Path $files) | Out-String ($content.GetType()).Name |
1 2 3 |
String |
Further reading:
Using [System.IO.File]::ReadAllText()
Method
To read a file into a string in PowerShell, use the [System.IO.File]::ReadAllText()
method.
1 2 3 4 5 |
$file = "d:\abc.txt" $content = [IO.File]::ReadAllText($file) ($content.GetType()).Name |
1 2 3 |
String |
System.IO.File is a static class in the .NET Framework that provides various methods for working with files and directories in PowerShell, such as reading and writing to files, creating, moving, and deleting files, and more.
The ReadAllText() method takes the file as an argument and returns its contents as a string. We used that method to read the contents of the file
and stored them as a single string in the content
variable. To verify the file’s data type, we applied the GetType()
method on the content
we discussed in the code section for using the Get-content
cmdlet.
Use the [System.IO.File]::ReadAllText()
Method with foreach loop to Read Multiple Files
To read multiple files, append the result of [System.IO.File]::ReadAllText()
for every file and wrap it inside the foreach
block.
1 2 3 4 5 6 7 8 |
$files = 'D:\a.txt', 'D:\b.txt', 'D:\c.txt' $contents = "" foreach ($file in $files) { $contents += [System.IO.File]::ReadAllText($file) } ($contents.GetType()).name |
1 2 3 |
String |
The System.IO.File
has no built-in method to read multiple files. We used the foreach
loop. Inside the loop, we used the ReadAllText()
method that read every file
from the files
collection and concatenated the results into the contents
variable. At last, we checked the data type of the contents
using the GetType()
method that printed String
on the console.
Using the Variable Notation with the Out-String
Cmdlet
To read the file as a single string, use the variable notation.
1 2 3 4 |
$content = ${d:\abc.txt} | Out-String ($content.GetType()).Name |
1 2 3 |
String |
In variable notation, we wrapped the file path in curly brackets preceded by the dollar ($
) symbol. It returned an array object that we converted to a single string using the Out-String
cmdlet. Then we verified the data type of the content
using the GetType()
method.
Similarly, to read multiple files into a single string:
1 2 3 4 |
$content = ${d:\a.txt}, ${d:\b.txt} | Out-String ($content.gettype()).Name |
1 2 3 |
String |