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.
Navigating and Creating Items
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.
# 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 -WaitRemove-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
1. Which parameter on Get-Content streams new lines as they are written to a growing file?
2. What is the key difference between Set-Content and Add-Content?
3. Which cmdlet parameter creates both files and folders?
4. Why should -WhatIf be used before running Remove-Item -Recurse -Force in an automation script?
5. What type of object does Get-ChildItem return when listing a folder?
Was this page helpful?
You May Also Like
Registry and Environment
Learn how PowerShell exposes the Windows Registry and environment variables as navigable drives, and how to safely read and modify both.
Processes and Services
Learn how to inspect, start, stop, and control Windows processes and services using PowerShell's process and service management cmdlets.
Scheduled Tasks and Jobs
Learn the difference between PowerShell background jobs and Windows Scheduled Tasks, and how to create, monitor, and manage both from the command line.
Related Reading
Related Study Notes in Programming
Browse all study notesApache Spark Study Notes
Programming · 30 topics
ProgrammingApache Flink Study Notes
Programming · 30 topics
ProgrammingHadoop Study Notes
Programming · 30 topics
ProgrammingSnowflake Study Notes
Programming · 30 topics
ProgrammingApache Airflow Study Notes
Programming · 30 topics
Programmingdbt (Data Build Tool) Study Notes
Programming · 30 topics