PowerShell Set-Content

PowerShell Script Files: Set-Content Cmdlet

I don’t use Set-Content very often; this is because for routine tasks that need to save content to a file I prefer to use Out-File.  The one job that I have for the Set-Content cmdlet is editing a file with -Replace.  What makes me wary of Set-Content is that instead of appending, its default behaviour is to delete the contents of a file.


Example 1: Set-Content Basics

# PowerShell Set-Content cmdlet
$File = "E:\Memos\Accounts.txt"
Set-Content -path $File  -value "Rent 500"

Learning Points

Note 1: The reason that I used the variable $File to define the path, is that I want to remind you to change its value before running this script on your machine.

Note 2: If the file specified does not exist PowerShell creates it!

Note 3: However, if the file has existing content, the new value will overwrite the old entries with the -value.

Note 4: One reason that PowerShell is replacing VBScript is the ease with which PowerShell creates, opens and closes files.  In fact it handles these basic file operations automatically, thus don’t look for, or worry about, ‘File Close’, PowerShell will handle the operation natively.

Example 2: Set-Content -Replace

Although -Replace does not appear amongst the parameter’s of any PowerShell cmdlet it clearly works in this context.  Observe in this example how the two Content cmdlets work together to edit the text.

# Example of Set-Content -Replace
$File = "E:\Memos\Accounts.txt"
foreach ($str in $File)
$content = Get-Content -path $str
$content | foreach {$_ -Replace "Rent 500", "Rent 525"} | Set-Content $str
Write-Host "After replace `n"
Get-Content $File

Note 5: See much more about -Replace

Guy Recommends:  A Free Trial of the Network Performance Monitor (NPM)Review of Orion NPM v11.5 v11.5

SolarWinds’ Network Performance Monitor will help you discover what’s happening on your network.  This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.

What I like best is the way NPM suggests solutions to network problems.  Its also has the ability to monitor the health of individual VMware virtual machines.  If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM now.

Download a free trial of Solarwinds’ Network Performance Monitor

Research Set-Content Parameters

# PowerShell Set-Content Parameters
Get-Help Set-Content -full

Checking the help file will reveal useful parameters, for instance you can employ the -Force parameter to overwrite read-only files.  Reading the help file also reveals that this command is primarily used for writing text to multiple files, perhaps this is why I am wary of using it myself, and avoid recommending this particular cmdlet to others.

Research PowerShell Alias ‘Sc’

With Microsoft, there are always at least three ways of doing everything, what seems like redundancy when you are an expert, seems like perspective when you are a beginner. 

# PowerShell Alias Ac
Get-Alias -definition Set-Content

Another example of an alias is that you can abbreviate Format-Table to ft.  As you increase your range of PowerShell commands, keep an eye out for another PowerShell Alias, for instance gci (Get-Childitem).

Set-Content -v- Out-File

  1. Out-File creates the file in 'UCS-2 Little Endian' coding, whereas Set-Content uses ANSI.  One side effect would be corrupted data if you oscillated between these two types of PowerShell cmdlet.
  2. Out-File saves the formatting, whereas Set-Content removes things like extra line breaks.
  3. Set-Content locks the file preventing other programs reading it until your script finishes.
  4. There are reports of Set-Content not creating the file specified, but I haven't been able replicate that alleged fault.

Recommended: Out-FileĀ»

Researching Similar PowerShell Content Cmdlets

# PowerShell Content Cmdlet Research
Get-Command -Noun Content

Results show:


Summary of PowerShell’s Set-Content Cmdlet

In VBScript dealing with files was never straightforward.  However, with PowerShell it’s so effortless that you may not realize that the Set-Content cmdlet opens and closes as part of its job description.

Set-Content is a simple enough cmdlet to understand.  What it does is write text to files.  Just playing with Set-Content leads to questions such as ‘Why bother’, or ‘What’s the point?’  I hope that your answer to such questions will give you a PowerShell technique that you can incorporate in bigger more complex scripts.

If you like this page then please share it with your friends


See more Microsoft PowerShell file tutorials:

PowerShell Home   • Add-Content   • Get-Content   • Set-Content  • PowerShell -Filter   • Test-Path

PowerShell Get-ChildItem   • Get-ChildItem -Include   • Get-ChildItem -Exclude   • Compare-Object

PowerShell Registry  • Get-Credential  • PowerShell ItemProperty  • PowerShell ItemPropery GCI

Please email me if you have a better example script. Also please report any factual mistakes, grammatical errors or broken links, I will be happy to correct the fault.