-
Notifications
You must be signed in to change notification settings - Fork 3
/
Set-StorageSense.ps1
154 lines (126 loc) · 5.64 KB
/
Set-StorageSense.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
function Set-StorageSense {
<#
.SYNOPSIS
A brief description of the function or script.
.DESCRIPTION
A longer description.
.PARAMETER FirstParameter
Description of each of the parameters.
Note:
To make it easier to keep the comments synchronized with changes to the parameters,
the preferred location for parameter documentation comments is not here,
but within the param block, directly above each parameter.
.PARAMETER SecondParameter
Description of each of the parameters.
.INPUTS
Description of objects that can be piped to the script.
.OUTPUTS
Description of objects that are output by the script.
.EXAMPLE
Set-StorageSense -Enable -RunStorageSense 'Every Week' -RemoveAppFiles -RecycleBin '1 day' -DownloadsFolder '14 days' -OneDrive '1 day' -WhatIf
.LINK
Links to further documentation.
.NOTES
Detail on what the script does, if this is needed.
#>
[cmdletbinding(SupportsShouldProcess = $true,DefaultParameterSetName = "StorageSense On")]
param(
[Parameter(Mandatory = $false,ParameterSetName = "StorageSense On")]
[switch]$Enable,
[Parameter(Mandatory = $false,ParameterSetName = "StorageSense Off")]
[switch]$Disable,
[Parameter(Mandatory = $false,ParameterSetName = "StorageSense On")]
[ValidateSet("Every Day","Every Week","Every Month","During Low Free Disk Space")]
[string]$RunStorageSense,
[Parameter(Mandatory = $false,ParameterSetName = "StorageSense On")]
[Parameter(Mandatory = $false,ParameterSetName = "StorageSense Off")]
[Parameter(Mandatory = $false,ParameterSetName = "Configure StorageSense")]
[switch]$RemoveAppFiles,
[Parameter(Mandatory = $false, ParameterSetName = "StorageSense On")]
[Parameter(Mandatory = $false, ParameterSetName = "StorageSense Off")]
[Parameter(Mandatory = $false, ParameterSetName = "Configure StorageSense")]
[ValidateSet("Never","1 day","14 days","30 days","60 days")]
[string]$RecycleBin,
[Parameter(Mandatory = $false, ParameterSetName = "StorageSense On")]
[Parameter(Mandatory = $false, ParameterSetName = "StorageSense Off")]
[Parameter(Mandatory = $false, ParameterSetName = "Configure StorageSense")]
[ValidateSet("Never","1 day","14 days","30 days","60 days")]
[string]$DownloadsFolder,
[Parameter(Mandatory = $false, ParameterSetName = "StorageSense On")]
[Parameter(Mandatory = $false, ParameterSetName = "StorageSense Off")]
[Parameter(Mandatory = $false, ParameterSetName = "Configure StorageSense")]
[ValidateSet("Never","1 day","14 days","30 days","60 days")]
[string]$OneDrive
)
begin {
# Add Logging block
try {
}
catch {
$PSCmdlet.ThrowTerminatingError($PSitem)
}
# First block to add/change stuff in
try {
$parentRegistryKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy"
$StorageSenseSchedule = @{
"Every Day" = 1
"Every Week" = 7
"Every Month" = 30
"During Low Free Disk Space" = 0
}
$FileCleanupSchedule = @{
"Never" = 0
"1 day" = 1
"14 days" = 14
"30 days" = 30
"60 days" = 60
}
$RegPath = [ordered]@{
StorageSense = "01"
RunStorageSense = "2048"
RemoveAppFiles = "04"
RecycleBin = "08"
RecycleBinSchedule = "256"
DownloadsFolder = "32"
DownloadsFolderSchedule = "512"
OneDrive = "02"
OneDriveSchedule = "128"
}
}
catch {
$PSCmdlet.ThrowTerminatingError($PSitem)
}
}
process {
try {
# create parent key if not exist
if (!(Test-Path -Path $parentRegistryKey)) {
if ($PSCmdlet.ShouldProcess("$parentRegistryKey", "Creating registry key")) {
[void](New-Item -Path $parentRegistryKey -Force)
}
}
$RegPath.GetEnumerator() | ForEach-Object{
if ($psitem.key -like "OneDrive*" ) {
if ($PSBoundParameters.ContainsKey("OneDrive")) {
if (Get-ItemProperty -Path "$parentRegistryKey\OneDrive*" -Name $psitem.value -erroraction SilentlyContinue) {
if ($PSCmdlet.ShouldProcess("$parentRegistryKey\OneDrive* : $($psitem.value)", "Updating registry value")) {
[void](Set-ItemProperty -Path "$parentRegistryKey\OneDrive*" -Name $FileCleanupSchedule[($PSBoundParameters['OneDrive'])] -Force)
}
}
}
} else {
if (!(Get-ItemProperty -Path $parentRegistryKey -Name $psitem.value -erroraction SilentlyContinue)) {
if ($PSCmdlet.ShouldProcess("$parentRegistryKey : $($psitem.value)", "Updating registry value")) {
[void](Set-ItemProperty -Path $parentRegistryKey -Name $psitem.value -Value 0 -Force)
}
}
}
}
}
catch {
$PSCmdlet.ThrowTerminatingError($PSitem)
}
}
end {
}
}