-
Notifications
You must be signed in to change notification settings - Fork 4
/
Configure-StorageSense.ps1
186 lines (148 loc) · 7 KB
/
Configure-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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
<#
******************************************************************************************************************
Name: Configure-StorageSense
Author: Kasper Johansen
Website: https://virtualwarlock.net
Latest update: February 18, 2022
******************************************************************************************************************
.SYNOPSIS
This script configures Storage Sense in Windows Server 2019 on a per-user basis.
.DESCRIPTION
The current group policies does not work with Windows Server 2019 hence this script.
The Storage Sense feature does not exist in Windows Server 2016!
So even if the script might work with Windows Server 2016, the configuration it creates has no effect.
In other words the script has not been tested with Windows Server 2016 as it's pointless.
Don't use this script with Windows 10.
The group policies for Storage Sense works in Windows 10 so there should be no need for this script.
Change each variable below to reflect the configuration needed or leave it at the "defaults"
which will enable Storage Sense which runs every 7 days and deletes the contents of the temp
folder and the contents of the Recycle Bin, Downloads and cloud storage locations (OneDrive) every 14 days.
.VARIABLE EnableStorageSense
Enables or disables Storage Sense
0 = Disable
1 = Enable
.VARIABLE RunInterval
Configures the Storage Sense run interval to either every day, every 7 days, every month, or when disk space
is low
0 = When Windows decides
1 = Every Day
7 = Every Week
30 = Every Month
.VARIABLE DeleteTempFiles
Configures Storage Sense to delete temp files that applications are no longer using
0 = Disable
1 = Enable
.VARIABLE DeleteRecycleBinContent
Enables or disables the removal of the Recycle Bin content
0 = Disable
1 = Enable
.VARIABLE DeleteRecycleBinInterval
Configures the interval of the removal of the Recycle Bin content to either 1 day, every 14 days, every month
or every 60 days
0 = Never
1 = 1 day
14 = 14 days
30 = 30 days
60 = 60 days
.VARIABLE DeleteDownloadsContent
Enables or disables the removal of the Downloads folder content
0 = Off
1 = On
.VARIABLE DeleteDownloadsInterval
Configures the interval of the removal of the Downloads folder content to either 1 day, every 14 days,
every month or every 60 days
0 = Never
1 = 1 day
14 = 14 days
30 = 30 days
60 = 60 days
.VARIABLE DeleteOneDriveContent
Enables or disables the removal of OneDrive folder content.
0 = Off
1 = On
.VARIABLE DeleteOneDriveInterval
Configures the interval of the removal of the OneDrive folder content to either 1 day, every 14 days,
every month or every 60 days
0 = Never
1 = 1 day
14 = 14 days
30 = 30 days
60 = 60 days
******************************************************************************************************************
#>
# Variables
$EnableStorageSense = 1
$RunInterval = 7
$DeleteTempFiles = 1
$DeleteRecycleBinContent = 1
$DeleteRecycleBinInterval = 14
$DeleteDownloadsContent = 1
$DeleteDownloadsInterval = 14
$DeleteOneDriveContent = 1
$DeleteOneDriveInterval = 14
# Function to create registry keys, create registry values or change existing registry values
function Set-RegistryValue
{
param(
[string]$RegPath,
[string]$RegName,
$RegValue,
[ValidateSet("String","ExpandString","Binary","Dword","MultiString","Qword")]
[string]$RegType = "String"
)
If (!(Test-Path -Path $RegPath))
{
Write-Output "Creating the registry key $RegPath"
New-Item -Path $RegPath -Force | Out-Null
}
else
{
$RegPath.Property
Write-Output "$RegPath already exist"
}
If ($RegName)
{
$CheckReg = Get-Item -Path $RegPath
If ($CheckReg.GetValue($RegName) -eq $null)
{
Write-Output "Creating the registry value $RegName in $RegPath"
New-ItemProperty -Path $RegPath -Name $RegName -Value $RegValue -PropertyType $RegType | Out-Null
}
else
{
Write-Output "Modifying the registry value $RegName in $RegPath"
Set-ItemProperty -Path $RegPath -Name $RegName -Value $RegValue | Out-Null
}
}
}
# Storage Sense registry location
$StoragePolicyRegKey = "HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy"
# Enable Storage Sense
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "01" -RegType DWORD -RegValue $EnableStorageSense
# Set 'Run Storage Sense' to specified interval
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "2048" -RegType DWORD -RegValue $RunInterval
# Enable 'Delete temporary files that my apps aren't using'
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "04" -RegType DWORD -RegValue $DeleteTempFiles
# Set 'Delete files in my recycle bin at the specified interval
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "08" -RegType DWORD -RegValue $DeleteRecycleBinContent
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "256" -RegType DWORD -RegValue $DeleteRecycleBinInterval
# Set 'Delete files in my Downloads folder at the specified interval
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "32" -RegType DWORD -RegValue $DeleteDownloadsContent
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "512" -RegType DWORD -RegValue $DeleteDownloadsInterval
# Suppress Storage Sense notifications
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "StoragePoliciesNotified" -RegType DWORD -RegValue 1
Set-RegistryValue -RegPath $StoragePolicyRegKey -RegName "CloudfilePolicyConsent" -RegType DWORD -RegValue 1
# Prerequisite for OneDrive cleanup configuration, get the user SID
$User = New-Object System.Security.Principal.NTAccount($env:userDOMAIN, $env:USERNAME)
$GetSID = $User.Translate([System.Security.Principal.SecurityIdentifier])
$UserSID = $GetSID.Value
# Configure OneDrive cleanup for all OneDrive providers configured
# Get OneDrive providers
$OneDriveProviders = Get-ChildItem -Path HKCU:\Software\SyncEngines\Providers\OneDrive\
ForEach ($ProviderKeys in $OneDriveProviders)
{
$ProviderKeyString = "OneDrive!"+$UserSID+"!Business1|"+$ProviderKeys.Name.Split("\")[-1]
$ProviderKeyStringPath = $StoragePolicyRegKey +"\" + $ProviderKeyString
Set-RegistryValue -RegPath $ProviderKeyStringPath -RegName "02" -RegType DWORD -RegValue $DeleteOneDriveContent
Set-RegistryValue -RegPath $ProviderKeyStringPath -RegName "128" -RegType DWORD -RegValue $DeleteOneDriveInterval
}