Bird
Raised Fist0
PowerShellscripting~5 mins

Log cleanup automation in PowerShell - Cheat Sheet & Quick Revision

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Recall & Review
beginner
What is the main purpose of log cleanup automation?
To automatically delete or archive old log files to save disk space and keep the system organized.
Click to reveal answer
beginner
In PowerShell, which cmdlet is commonly used to remove files?
The <code>Remove-Item</code> cmdlet is used to delete files or folders.
Click to reveal answer
intermediate
How can you find files older than 30 days in PowerShell?
Use Get-ChildItem with Where-Object to filter files by their LastWriteTime property, like: Get-ChildItem | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) }.
Click to reveal answer
beginner
Why is it important to test a log cleanup script before scheduling it?
To make sure it deletes only the intended files and does not remove important data by mistake.
Click to reveal answer
beginner
What PowerShell feature allows you to schedule a script to run regularly?
You can use Windows Task Scheduler to run PowerShell scripts on a schedule.
Click to reveal answer
Which PowerShell cmdlet deletes files?
ASet-Location
BGet-Content
CRemove-Item
DNew-Item
How do you select files older than 7 days in PowerShell?
AWhere-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) }
BWhere-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-7) }
CGet-ChildItem -OlderThan 7
DRemove-Item -OlderThan 7
What is a safe first step before deleting files with a script?
ADelete all files immediately
BRun the script as administrator without testing
CIgnore file dates
DRun the script with <code>-WhatIf</code> to simulate deletion
Which tool schedules PowerShell scripts to run automatically?
AWindows Task Scheduler
BPowerShell ISE
CNotepad
DFile Explorer
What does Get-ChildItem do in PowerShell?
AChanges file permissions
BLists files and folders in a directory
CCreates new files
DDeletes files
Explain how to create a PowerShell script that deletes log files older than 30 days.
Think about listing, filtering, deleting, and testing steps.
You got /4 concepts.
    Describe how to schedule a PowerShell log cleanup script to run every week.
    Focus on scheduling steps using Windows tools.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of automating log cleanup using PowerShell scripts?
      easy
      A. To delete old log files and free up disk space
      B. To create new log files automatically
      C. To rename log files for better organization
      D. To compress log files for faster access

      Solution

      1. Step 1: Understand log cleanup goal

        The goal is to remove old log files that are no longer needed to save disk space.
      2. Step 2: Identify automation benefit

        Automating this process ensures logs are cleaned regularly without manual effort.
      3. Final Answer:

        To delete old log files and free up disk space -> Option A
      4. Quick Check:

        Log cleanup = delete old logs [OK]
      Hint: Log cleanup means removing old logs to save space [OK]
      Common Mistakes:
      • Confusing cleanup with creating or renaming logs
      • Thinking cleanup compresses files instead of deleting
      • Assuming automation creates logs automatically
      2. Which PowerShell command correctly lists log files older than 30 days in the folder C:\Logs?
      easy
      A. Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(30) }
      B. Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.CreationTime -gt (Get-Date).AddDays(-30) }
      C. Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) }
      D. Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.CreationTime -lt (Get-Date).AddDays(30) }

      Solution

      1. Step 1: Identify correct date filter

        We want files older than 30 days, so LastWriteTime should be less than (Get-Date).AddDays(-30).
      2. Step 2: Check command syntax

        Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } uses LastWriteTime -lt (less than) 30 days ago, correctly filtering old files.
      3. Final Answer:

        Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } -> Option C
      4. Quick Check:

        Older than 30 days = LastWriteTime -lt (Get-Date).AddDays(-30) [OK]
      Hint: Use -lt (less than) with AddDays(-30) for files older than 30 days [OK]
      Common Mistakes:
      • Using -gt instead of -lt for older files
      • Filtering by CreationTime instead of LastWriteTime
      • Using AddDays(30) instead of AddDays(-30)
      3. What will be the output of this PowerShell script?
      Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-7) } | Remove-Item -WhatIf
      medium
      A. Throws an error because Remove-Item cannot be piped
      B. Lists all .log files older than 7 days and deletes them
      C. Deletes all .log files regardless of age
      D. Shows which .log files older than 7 days would be deleted without deleting

      Solution

      1. Step 1: Understand the pipeline

        The script finds .log files older than 7 days using Get-ChildItem and Where-Object.
      2. Step 2: Analyze Remove-Item with -WhatIf

        -WhatIf shows what would happen without deleting files, so no files are removed.
      3. Final Answer:

        Shows which .log files older than 7 days would be deleted without deleting -> Option D
      4. Quick Check:

        -WhatIf shows actions without executing [OK]
      Hint: Remove-Item -WhatIf previews deletion without removing files [OK]
      Common Mistakes:
      • Thinking files are deleted with -WhatIf
      • Assuming Remove-Item cannot be piped
      • Confusing filter for files newer than 7 days
      4. Identify the error in this PowerShell script intended to delete log files older than 15 days:
      Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-15) } | Remove-Item
      medium
      A. The filter uses -gt instead of -lt, so it deletes newer files
      B. Remove-Item cannot be used in a pipeline
      C. Get-ChildItem does not support -Filter parameter
      D. The script is missing the -Recurse flag

      Solution

      1. Step 1: Check the date comparison operator

        -gt means greater than, so it selects files newer than 15 days, opposite of intended.
      2. Step 2: Confirm correct operator for old files

        To delete files older than 15 days, use -lt (less than) with AddDays(-15).
      3. Final Answer:

        The filter uses -gt instead of -lt, so it deletes newer files -> Option A
      4. Quick Check:

        Older files need -lt, not -gt [OK]
      Hint: Use -lt for files older than a date, not -gt [OK]
      Common Mistakes:
      • Using -gt instead of -lt for filtering old files
      • Thinking Remove-Item can't be piped
      • Assuming -Filter is unsupported by Get-ChildItem
      5. You want to automate deleting log files older than 10 days from C:\Logs and log the deleted filenames to deleted_logs.txt. Which script correctly does this?
      hard
      A. Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-10) } | Remove-Item; Out-File -FilePath 'deleted_logs.txt' -InputObject 'Deleted logs' -Append
      B. Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-10) } | ForEach-Object { Remove-Item $_.FullName; $_.FullName | Out-File -FilePath 'deleted_logs.txt' -Append }
      C. Remove-Item -Path 'C:\Logs\*.log' -Recurse -Force; Get-ChildItem 'deleted_logs.txt' | Out-File -FilePath 'deleted_logs.txt' -Append
      D. Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Remove-Item; Add-Content -Path 'deleted_logs.txt' -Value 'Logs deleted'

      Solution

      1. Step 1: Filter files older than 10 days

        Use Where-Object with LastWriteTime -lt (Get-Date).AddDays(-10) to select old logs.
      2. Step 2: Remove files and log names

        ForEach-Object removes each file and appends its name to deleted_logs.txt using Out-File -Append.
      3. Final Answer:

        Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-10) } | ForEach-Object { Remove-Item $_.FullName; $_.FullName | Out-File -FilePath 'deleted_logs.txt' -Append } -> Option B
      4. Quick Check:

        Filter old files + remove + log names = Get-ChildItem -Path 'C:\Logs' -Filter '*.log' | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-10) } | ForEach-Object { Remove-Item $_.FullName; $_.FullName | Out-File -FilePath 'deleted_logs.txt' -Append } [OK]
      Hint: Use ForEach-Object to remove and log each file name [OK]
      Common Mistakes:
      • Filtering with -gt instead of -lt
      • Logging only a fixed string, not filenames
      • Deleting files without logging
      • Using Remove-Item without filtering