PSScripts/Detect-VSS.ps1
2023-12-18 18:00:56 +00:00

41 lines
1.9 KiB
PowerShell

# Detects various states of Volume Shadow Copies, Disabled, Enabled with Default schedule, Enabled with custom schedule and Enabled with custom schedule ensuring all disks are enabled.
$ScheduledTasks = Get-ScheduledTask -TaskName "ShadowCopy*"
$DefaultTasks = Get-ScheduledTask -TaskName "ShadowCopyVolume{*}"
$CustomTasks = Get-ScheduledTask -TaskName "ShadowCopy * drive"
$CustomTaskLetters = ForEach ($task in $CustomTasks){$task.TaskName[11]}
$VSS = [PSCustomObject]@{
enabled = $false
type = $null
}
$Disks = Get-Volume | Where-Object {$_.DriveType -eq "Fixed"} | Where-Object {$_.DriveLetter -ne $null} | Where-Object {$_.Size -gt 5GB}
$MissingDrives = ForEach ($letter in $Disks.DriveLetter){if ($letter -notin $CustomTaskLetters){$letter}}
#No Tasks
if ($ScheduledTasks -eq $null)
{Write-Host "No VSS Tasks"}
#Default Tasks
elseif ($DefaultTasks.State -ne "Disabled")
{Write-Host "Default VSS Tasks Enabled"; $VSS.enabled = $true; $VSS.type = "Default"}
#Default Tasks Disabled and No Custom Tasks
if (($DefaultTasks.State -eq "Disabled") -and ($CustomTasks -eq $null))
{Write-Host "Default VSS Tasks Disabled and NO Custom VSS Tasks"; $VSS.enabled = $false; $VSS.type = "Default"}
#Default Tasks Disabled and Custom Tasks Enabled
if ((($DefaultTasks.State -eq "Disabled") -or ($DefaultTasks -eq $null)) -and ($CustomTasks -ne $null))
{Write-Host "Default VSS Tasks Disabled and Custom VSS Tasks Enabled"; $VSS.enabled = $true; $VSS.type = "Custom"}
#Default Tasks Disabled and Custom Tasks Enabled, but not all drives have been enabled
if ($MissingDrives -ne $null)
{Write-Host "Default VSS Tasks Disabled and Custom VSS Tasks Enabled, But Not all Drives are Enabled"; $VSS.enabled = $true; $VSS.type = "Custom, Incomplete"}
if ($Host.Version.Major -gt 4){Write-Host $VSS}
elseif ($Host.Version.Major -lt 5){$VSS}
if ($VSS.enabled -eq $false){exit 1}
elseif ($VSS.type -ne "Custom"){exit 2}
else{exit 0}