|
|
|
@ -0,0 +1,399 @@
|
|
|
|
|
Function Start-Cleanup {
|
|
|
|
|
<#
|
|
|
|
|
.SYNOPSIS
|
|
|
|
|
Automate cleaning up a C:\ drive with low disk space
|
|
|
|
|
|
|
|
|
|
.DESCRIPTION
|
|
|
|
|
Cleans the C: drive's Window Temperary files, Windows SoftwareDistribution folder,
|
|
|
|
|
the local users Temperary folder, IIS logs(if applicable) and empties the recycling bin.
|
|
|
|
|
All deleted files will go into a log transcript in $env:TEMP. By default this
|
|
|
|
|
script leaves files that are newer than 7 days old however this variable can be edited.
|
|
|
|
|
|
|
|
|
|
.EXAMPLE
|
|
|
|
|
PS C:\> .\Start-Cleanup.ps1
|
|
|
|
|
Save the file to your hard drive with a .PS1 extention and run the file from an elavated PowerShell prompt.
|
|
|
|
|
|
|
|
|
|
.NOTES
|
|
|
|
|
This script will typically clean up anywhere from 1GB up to 15GB of space from a C: drive.
|
|
|
|
|
|
|
|
|
|
.FUNCTIONALITY
|
|
|
|
|
PowerShell v3+
|
|
|
|
|
#>
|
|
|
|
|
|
|
|
|
|
## Allows the use of -WhatIf
|
|
|
|
|
[CmdletBinding(SupportsShouldProcess=$True)]
|
|
|
|
|
|
|
|
|
|
param(
|
|
|
|
|
## Delete data older then $daystodelete
|
|
|
|
|
[Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=0)]
|
|
|
|
|
$DaysToDelete = 7,
|
|
|
|
|
|
|
|
|
|
## LogFile path for the transcript to be written to
|
|
|
|
|
[Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=1)]
|
|
|
|
|
$LogFile = ("$env:TEMP\" + (get-date -format "MM-d-yy-HH-mm") + '.log'),
|
|
|
|
|
|
|
|
|
|
## All verbose outputs will get logged in the transcript($logFile)
|
|
|
|
|
[Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=2)]
|
|
|
|
|
$VerbosePreference = "Continue",
|
|
|
|
|
|
|
|
|
|
## All errors should be withheld from the console
|
|
|
|
|
[Parameter(Mandatory=$false,ValueFromPipelineByPropertyName=$true,Position=3)]
|
|
|
|
|
$ErrorActionPreference = "SilentlyContinue"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
## Begin the timer
|
|
|
|
|
$Starters = (Get-Date)
|
|
|
|
|
|
|
|
|
|
## Check $VerbosePreference variable, and turns -Verbose on
|
|
|
|
|
Function global:Write-Verbose ( [string]$Message ) {
|
|
|
|
|
if ( $VerbosePreference -ne 'SilentlyContinue' ) {
|
|
|
|
|
Write-Host "$Message" -ForegroundColor 'Green'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Tests if the log file already exists and renames the old file if it does exist
|
|
|
|
|
if(Test-Path $LogFile){
|
|
|
|
|
## Renames the log to be .old
|
|
|
|
|
Rename-Item $LogFile $LogFile.old -Verbose -Force
|
|
|
|
|
} else {
|
|
|
|
|
## Starts a transcript in C:\temp so you can see which files were deleted
|
|
|
|
|
Write-Host (Start-Transcript -Path $LogFile) -ForegroundColor Green
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Writes a verbose output to the screen for user information
|
|
|
|
|
Write-Host "Retriving current disk percent free for comparison once the script has completed. " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
## Gathers the amount of disk space used before running the script
|
|
|
|
|
$Before = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq "3" } | Select-Object SystemName,
|
|
|
|
|
@{ Name = "Drive" ; Expression = { ( $_.DeviceID ) } },
|
|
|
|
|
@{ Name = "Size (GB)" ; Expression = {"{0:N1}" -f ( $_.Size / 1gb)}},
|
|
|
|
|
@{ Name = "FreeSpace (GB)" ; Expression = {"{0:N1}" -f ( $_.Freespace / 1gb ) } },
|
|
|
|
|
@{ Name = "PercentFree" ; Expression = {"{0:P1}" -f ( $_.FreeSpace / $_.Size ) } } |
|
|
|
|
|
Format-Table -AutoSize |
|
|
|
|
|
Out-String
|
|
|
|
|
|
|
|
|
|
## Stops the windows update service so that c:\windows\softwaredistribution can be cleaned up
|
|
|
|
|
Get-Service -Name wuauserv | Stop-Service -Force -ErrorAction SilentlyContinue -WarningAction SilentlyContinue -Verbose
|
|
|
|
|
|
|
|
|
|
# Sets the SCCM cache size to 1 GB if it exists.
|
|
|
|
|
if ((Get-WmiObject -namespace root\ccm\SoftMgmtAgent -class CacheConfig) -ne "$null"){
|
|
|
|
|
# if data is returned and sccm cache is configured it will shrink the size to 1024MB.
|
|
|
|
|
$cache = Get-WmiObject -namespace root\ccm\SoftMgmtAgent -class CacheConfig
|
|
|
|
|
$Cache.size = 1024 | Out-Null
|
|
|
|
|
$Cache.Put() | Out-Null
|
|
|
|
|
Restart-Service ccmexec -ErrorAction SilentlyContinue -WarningAction SilentlyContinue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Deletes the contents of windows software distribution.
|
|
|
|
|
Get-ChildItem "C:\Windows\SoftwareDistribution\*" -Recurse -Force -ErrorAction SilentlyContinue | Remove-Item -recurse -ErrorAction SilentlyContinue -Verbose
|
|
|
|
|
Write-Host "The Contents of Windows SoftwareDistribution have been removed successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
## Deletes the contents of the Windows Temp folder.
|
|
|
|
|
Get-ChildItem "C:\Windows\Temp\*" -Recurse -Force -Verbose -ErrorAction SilentlyContinue |
|
|
|
|
|
Where-Object { ($_.CreationTime -lt $(Get-Date).AddDays( - $DaysToDelete)) } | Remove-Item -force -recurse -ErrorAction SilentlyContinue -Verbose
|
|
|
|
|
Write-host "The Contents of Windows Temp have been removed successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Deletes all files and folders in user's Temp folder older then $DaysToDelete
|
|
|
|
|
Get-ChildItem "C:\users\*\AppData\Local\Temp\*" -Recurse -Force -ErrorAction SilentlyContinue |
|
|
|
|
|
Where-Object { ($_.CreationTime -lt $(Get-Date).AddDays( - $DaysToDelete))} |
|
|
|
|
|
Remove-Item -force -recurse -ErrorAction SilentlyContinue -Verbose
|
|
|
|
|
Write-Host "The contents of `$env:TEMP have been removed successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
## Deletes all files and folders in CSBack folder older then $DaysToDelete
|
|
|
|
|
Get-ChildItem "C:\csback\*" -Recurse -Force -ErrorAction SilentlyContinue |
|
|
|
|
|
Where-Object { ($_.CreationTime -lt $(Get-Date).AddDays( - $DaysToDelete))} |
|
|
|
|
|
Remove-Item -force -recurse -ErrorAction SilentlyContinue -Verbose
|
|
|
|
|
Write-Host "The contents of csback have been removed successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
## Removes all files and folders in user's Temporary Internet Files older then $DaysToDelete
|
|
|
|
|
Get-ChildItem "C:\users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\*" `
|
|
|
|
|
-Recurse -Force -Verbose -ErrorAction SilentlyContinue |
|
|
|
|
|
Where-Object {($_.CreationTime -lt $(Get-Date).AddDays( - $DaysToDelete))} |
|
|
|
|
|
Remove-Item -Force -Recurse -ErrorAction SilentlyContinue -Verbose
|
|
|
|
|
Write-Host "All Temporary Internet Files have been removed successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
## Removes *.log from C:\windows\CBS
|
|
|
|
|
if(Test-Path C:\Windows\logs\CBS\){
|
|
|
|
|
Get-ChildItem "C:\Windows\logs\CBS\*.log" -Recurse -Force -ErrorAction SilentlyContinue |
|
|
|
|
|
remove-item -force -recurse -ErrorAction SilentlyContinue -Verbose
|
|
|
|
|
Write-Host "All CBS logs have been removed successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\inetpub\logs\LogFiles\ does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans IIS Logs older then $DaysToDelete
|
|
|
|
|
if (Test-Path C:\inetpub\logs\LogFiles\) {
|
|
|
|
|
Get-ChildItem "C:\inetpub\logs\LogFiles\*" -Recurse -Force -ErrorAction SilentlyContinue |
|
|
|
|
|
Where-Object { ($_.CreationTime -lt $(Get-Date).AddDays(-60)) } | Remove-Item -Force -Verbose -Recurse -ErrorAction SilentlyContinue
|
|
|
|
|
Write-Host "All IIS Logfiles over $DaysToDelete days old have been removed Successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
Write-Host "C:\Windows\logs\CBS\ does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Removes C:\Config.Msi
|
|
|
|
|
if (test-path C:\Config.Msi){
|
|
|
|
|
remove-item -Path C:\Config.Msi -force -recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Config.Msi does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Removes c:\Intel
|
|
|
|
|
if (test-path c:\Intel){
|
|
|
|
|
remove-item -Path c:\Intel -force -recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "c:\Intel does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Removes c:\PerfLogs
|
|
|
|
|
if (test-path c:\PerfLogs){
|
|
|
|
|
remove-item -Path c:\PerfLogs -force -recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "c:\PerfLogs does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Removes $env:windir\memory.dmp
|
|
|
|
|
if (test-path $env:windir\memory.dmp){
|
|
|
|
|
remove-item $env:windir\memory.dmp -force -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Windows\memory.dmp does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Removes rouge folders
|
|
|
|
|
Write-host "Deleting Rouge folders " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
## Removes Windows Error Reporting files
|
|
|
|
|
if (test-path C:\ProgramData\Microsoft\Windows\WER){
|
|
|
|
|
Get-ChildItem -Path C:\ProgramData\Microsoft\Windows\WER -Recurse | Remove-Item -force -recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
Write-host "Deleting Windows Error Reporting files " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\ProgramData\Microsoft\Windows\WER does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Removes System and User Temp Files - lots of access denied will occur.
|
|
|
|
|
## Cleans up c:\windows\temp
|
|
|
|
|
if (Test-Path $env:windir\Temp\) {
|
|
|
|
|
Remove-Item -Path "$env:windir\Temp\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Windows\Temp does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up minidump
|
|
|
|
|
if (Test-Path $env:windir\minidump\) {
|
|
|
|
|
Remove-Item -Path "$env:windir\minidump\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "$env:windir\minidump\ does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up prefetch
|
|
|
|
|
if (Test-Path $env:windir\Prefetch\) {
|
|
|
|
|
Remove-Item -Path "$env:windir\Prefetch\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "$env:windir\Prefetch\ does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up each users temp folder
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Temp\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Temp\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Temp\ does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up all users windows error reporting
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Windows\WER\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Windows\WER\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\ProgramData\Microsoft\Windows\WER does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up users temporary internet files
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Microsoft\Windows\Temporary Internet Files\ does not exist. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up Internet Explorer cache
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Windows\IECompatCache\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Windows\IECompatCache\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Microsoft\Windows\IECompatCache\ does not exist. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up Internet Explorer cache
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Windows\IECompatUaCache\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Windows\IECompatUaCache\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Microsoft\Windows\IECompatUaCache\ does not exist. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up Internet Explorer download history
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Windows\IEDownloadHistory\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Windows\IEDownloadHistory\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Microsoft\Windows\IEDownloadHistory\ does not exist. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up Internet Cache
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Windows\INetCache\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Windows\INetCache\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Microsoft\Windows\INetCache\ does not exist. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up Internet Cookies
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Windows\INetCookies\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Windows\INetCookies\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Microsoft\Windows\INetCookies\ does not exist. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Cleans up terminal server cache
|
|
|
|
|
if (Test-Path "C:\Users\*\AppData\Local\Microsoft\Terminal Server Client\Cache\") {
|
|
|
|
|
Remove-Item -Path "C:\Users\*\AppData\Local\Microsoft\Terminal Server Client\Cache\*" -Force -Recurse -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\Users\*\AppData\Local\Microsoft\Terminal Server Client\Cache\ does not exist. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Write-host "Removing System and User Temp Files " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
## Removes the hidden recycling bin.
|
|
|
|
|
if (Test-path 'C:\$Recycle.Bin'){
|
|
|
|
|
Remove-Item 'C:\$Recycle.Bin' -Recurse -Force -Verbose -ErrorAction SilentlyContinue
|
|
|
|
|
} else {
|
|
|
|
|
Write-Host "C:\`$Recycle.Bin does not exist, there is nothing to cleanup. " -NoNewline -ForegroundColor DarkGray
|
|
|
|
|
Write-Host "[WARNING]" -ForegroundColor DarkYellow -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Turns errors back on
|
|
|
|
|
$ErrorActionPreference = "Continue"
|
|
|
|
|
|
|
|
|
|
## Checks the version of PowerShell
|
|
|
|
|
## If PowerShell version 4 or below is installed the following will process
|
|
|
|
|
if ($PSVersionTable.PSVersion.Major -le 4) {
|
|
|
|
|
|
|
|
|
|
## Empties the recycling bin, the desktop recyling bin
|
|
|
|
|
$Recycler = (New-Object -ComObject Shell.Application).NameSpace(0xa)
|
|
|
|
|
$Recycler.items() | ForEach-Object {
|
|
|
|
|
## If PowerShell version 4 or bewlow is installed the following will process
|
|
|
|
|
Remove-Item -Include $_.path -Force -Recurse -Verbose
|
|
|
|
|
Write-Host "The recycling bin has been cleaned up successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
} elseif ($PSVersionTable.PSVersion.Major -ge 5) {
|
|
|
|
|
## If PowerShell version 5 is running on the machine the following will process
|
|
|
|
|
Clear-RecycleBin -DriveLetter C:\ -Force -Verbose
|
|
|
|
|
Write-Host "The recycling bin has been cleaned up successfully! " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
## Starts cleanmgr.exe
|
|
|
|
|
Function Start-CleanMGR {
|
|
|
|
|
Try{
|
|
|
|
|
Write-Host "Windows Disk Cleanup is running. " -NoNewline -ForegroundColor Green
|
|
|
|
|
Start-Process -FilePath Cleanmgr -ArgumentList '/sagerun:1' -Wait -Verbose
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
}
|
|
|
|
|
Catch [System.Exception]{
|
|
|
|
|
Write-host "cleanmgr is not installed! To use this portion of the script you must install the following windows features:" -ForegroundColor Red -NoNewline
|
|
|
|
|
Write-host "[ERROR]" -ForegroundColor Red -BackgroundColor black
|
|
|
|
|
}
|
|
|
|
|
} Start-CleanMGR
|
|
|
|
|
|
|
|
|
|
## gathers disk usage after running the cleanup cmdlets.
|
|
|
|
|
$After = Get-WmiObject Win32_LogicalDisk | Where-Object { $_.DriveType -eq "3" } | Select-Object SystemName,
|
|
|
|
|
@{ Name = "Drive" ; Expression = { ( $_.DeviceID ) } },
|
|
|
|
|
@{ Name = "Size (GB)" ; Expression = {"{0:N1}" -f ( $_.Size / 1gb)}},
|
|
|
|
|
@{ Name = "FreeSpace (GB)" ; Expression = {"{0:N1}" -f ( $_.Freespace / 1gb ) } },
|
|
|
|
|
@{ Name = "PercentFree" ; Expression = {"{0:P1}" -f ( $_.FreeSpace / $_.Size ) } } |
|
|
|
|
|
Format-Table -AutoSize | Out-String
|
|
|
|
|
|
|
|
|
|
## Restarts wuauserv
|
|
|
|
|
Get-Service -Name wuauserv | Start-Service -ErrorAction SilentlyContinue
|
|
|
|
|
|
|
|
|
|
## Stop timer
|
|
|
|
|
$Enders = (Get-Date)
|
|
|
|
|
|
|
|
|
|
## Calculate amount of seconds your code takes to complete.
|
|
|
|
|
Write-Verbose "Elapsed Time: $(($Enders - $Starters).totalseconds) seconds
|
|
|
|
|
|
|
|
|
|
"
|
|
|
|
|
## Sends hostname to the console for ticketing purposes.
|
|
|
|
|
Write-Host (Hostname) -ForegroundColor Green
|
|
|
|
|
|
|
|
|
|
## Sends the date and time to the console for ticketing purposes.
|
|
|
|
|
Write-Host (Get-Date | Select-Object -ExpandProperty DateTime) -ForegroundColor Green
|
|
|
|
|
|
|
|
|
|
## Sends the disk usage before running the cleanup script to the console for ticketing purposes.
|
|
|
|
|
Write-Verbose "
|
|
|
|
|
Before: $Before"
|
|
|
|
|
|
|
|
|
|
## Sends the disk usage after running the cleanup script to the console for ticketing purposes.
|
|
|
|
|
Write-Verbose "After: $After"
|
|
|
|
|
|
|
|
|
|
## Prompt to scan for large ISO, VHD, VHDX files.
|
|
|
|
|
Function PromptforScan {
|
|
|
|
|
param(
|
|
|
|
|
$ScanPath,
|
|
|
|
|
$title = (Write-Host "Search for large files" -ForegroundColor Green),
|
|
|
|
|
$message = (Write-Host "Would you like to scan $ScanPath for ISOs or VHD(X) files?" -ForegroundColor Green)
|
|
|
|
|
)
|
|
|
|
|
$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", "Scans $ScanPath for large files."
|
|
|
|
|
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", "Skips scanning $ScanPath for large files."
|
|
|
|
|
$options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no)
|
|
|
|
|
$prompt = $host.ui.PromptForChoice($title, $message, $options, 0)
|
|
|
|
|
switch ($prompt) {
|
|
|
|
|
0 {
|
|
|
|
|
Write-Host "Scanning $ScanPath for any large .ISO and or .VHD\.VHDX files per the Administrators request." -ForegroundColor Green
|
|
|
|
|
Write-Verbose ( Get-ChildItem -Path $ScanPath -Include *.iso, *.vhd, *.vhdx -Recurse -ErrorAction SilentlyContinue |
|
|
|
|
|
Sort-Object Length -Descending | Select-Object Name, Directory,
|
|
|
|
|
@{Name = "Size (GB)"; Expression = { "{0:N2}" -f ($_.Length / 1GB) }} | Format-Table |
|
|
|
|
|
Out-String -verbose )
|
|
|
|
|
}
|
|
|
|
|
1 {
|
|
|
|
|
Write-Host "The Administrator chose to not scan $ScanPath for large files." -ForegroundColor DarkYellow -Verbose
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
PromptforScan -ScanPath C:\ # end of function
|
|
|
|
|
|
|
|
|
|
## Completed Successfully!
|
|
|
|
|
Write-Host (Stop-Transcript) -ForegroundColor Green
|
|
|
|
|
|
|
|
|
|
Write-host "
|
|
|
|
|
Script finished " -NoNewline -ForegroundColor Green
|
|
|
|
|
Write-Host "[DONE]" -ForegroundColor Green -BackgroundColor Black
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
Start-Cleanup
|