100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
Programming

Working with Files and Folders

Learn how PowerShell treats the file system as a navigable provider, and how to create, read, write, copy, move, and delete files and folders with dedicated cmdlets.

AutomationBeginner9 min readJul 10, 2026
Analogies

The File System as a PowerShell Provider

PowerShell exposes the file system through the FileSystem provider, which means drives like C: and D: behave like any other PSDrive you can browse with Set-Location and Get-ChildItem. This is different from a plain shell script where 'cd' and 'dir' are just external commands; in PowerShell, navigating C:\Users\Admin\Documents returns real .NET DirectoryInfo and FileInfo objects, not text, so you can pipe them straight into filtering or property-based cmdlets.

🏏

Cricket analogy: Think of the FileSystem provider like the ICC rankings system: whether you're looking at Test, ODI, or T20 rankings, the same underlying structure (player objects with stats) lets you query any format the same way, just as PowerShell queries any drive the same way.

Get-ChildItem lists the contents of a directory and supports -Recurse to walk subfolders and -Filter or -Include/-Exclude to narrow results by name pattern; New-Item creates files or folders in one step using -ItemType File or -ItemType Directory, replacing the separate mkdir/touch mental model from other shells. Because Get-ChildItem returns objects, you can immediately chain Where-Object to filter by LastWriteTime, Length, or Extension without needing separate tools like find or grep.

🏏

Cricket analogy: Get-ChildItem -Recurse is like a scout reviewing every domestic match across all state teams before selecting a national squad, drilling down through zones the way -Recurse drills through subfolders.

Reading and Writing File Content

Get-Content reads a file's contents line by line into the pipeline, which is memory-efficient for large logs when combined with -Tail or -Wait for real-time monitoring, while Set-Content overwrites a file and Add-Content appends to it without loading the whole file into memory first. Out-File is a close cousin of Set-Content but is designed to receive pipeline output directly, and both accept -Encoding to control whether text is written as UTF8, ASCII, or Unicode, which matters when scripts must interoperate with legacy tools.

🏏

Cricket analogy: Get-Content -Tail 10 -Wait is like watching only the live scorecard ticker for the last few overs instead of rereading the entire match scorecard from ball one.

Copying, Moving, and Removing Items

Copy-Item and Move-Item both support -Recurse for folders and -Destination for the target path, while Remove-Item deletes files or, with -Recurse -Force, entire directory trees including hidden and read-only items; because Remove-Item does not use a recycle bin by default, scripts should confirm paths carefully or use -WhatIf first to preview the operation. Combining these cmdlets with -Filter lets you build cleanup scripts, for example moving all .log files older than 30 days into an archive folder before deleting anything.

🏏

Cricket analogy: -WhatIf before Remove-Item is like a third umpire reviewing a run-out on replay before the decision is finalized, previewing the outcome before it becomes permanent.

powershell
# Archive log files older than 30 days, then remove the originals
$cutoff = (Get-Date).AddDays(-30)
$archivePath = 'D:\Archive\Logs'

if (-not (Test-Path $archivePath)) {
    New-Item -Path $archivePath -ItemType Directory | Out-Null
}

Get-ChildItem -Path 'C:\Logs' -Filter '*.log' -Recurse |
    Where-Object { $_.LastWriteTime -lt $cutoff } |
    ForEach-Object {
        Copy-Item -Path $_.FullName -Destination $archivePath -Force
        Remove-Item -Path $_.FullName -Force
    }

Get-Content -Path 'C:\Logs\current.log' -Tail 20 -Wait

Remove-Item does not send deleted files to the Recycle Bin, even in an interactive console session. Always test destructive scripts with -WhatIf or -Confirm, and consider Copy-Item to a backup location before running Remove-Item -Recurse -Force in production automation.

  • The FileSystem provider lets you navigate drives and folders with the same cmdlets used for other PSDrives.
  • Get-ChildItem returns rich .NET objects, so results can be filtered and sorted by property instead of parsed as text.
  • New-Item creates both files and folders using the -ItemType parameter.
  • Get-Content -Tail -Wait streams new lines from a growing file in real time, useful for log monitoring.
  • Set-Content overwrites a file while Add-Content appends without loading the whole file into memory.
  • Copy-Item and Move-Item both support -Recurse for whole directory trees and -Destination for the target path.
  • Remove-Item permanently deletes items with no Recycle Bin safety net, so -WhatIf previews are strongly recommended.

Practice what you learned

Was this page helpful?

Topics covered

#Programming#PowerShellStudyNotes#WorkingWithFilesAndFolders#Files#Folders#File#System#StudyNotes#SkillVeris#ExamPrep