Forum Discussion
OneDrive with FSlogix in an AVD environment how to prevent profile bloat
hanifaz Yes, but how do you get the files deleted in the first place? Profile compaction is helpful when they finally get the bugs ironed out on the latest FSlogix, but before that, you need storage sense or something that will clear the OneDrive cache store after X amount of time. So far, I don't see that storage sense runs on AVD servers where you can trust it to keep the profile clean.
Run a test where you push a GPO that has storage sense dehydrate any OneDrive files opened less than a day. Come back after a day and you see that the files are still local to the profile and have not been set back to online only, which is Storage Senses's job.
Try using this Powershell Script in Autostart.
This will activate OneDrive CleanUp for every Connected OneDrive Account or Sharepoint Site.
Data in OneDrive Cache will be flushed every Day.
$EnableStorageSense = 1
$RunInterval = 1
$DeleteTempFiles = 1
$DeleteRecycleBinContent = 1
$DeleteRecycleBinInterval = 1
$DeleteDownloadsContent = 0
$DeleteDownloadsInterval = 0
$DeleteOneDriveContent = 1
$DeleteOneDriveInterval = 1
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
$User1 = New-Object System.Security.Principal.NTAccount($env:userDOMAIN, $env:USERNAME)
$GetSID = $User1.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
}
- Travis_78Feb 02, 2023Iron ContributorWith this script, you say to run the script via the user's login script? Or start menu/startup? Have you used this with success on VHDX / FSlogix users with AVD?
- RahilAKFeb 23, 2023Copper ContributorTravis_78 ----
I read through the entire exchange between you and Micha. We are facing the same issue where we need to dehydrate the onedrive cache. And as you mentioned in the beginning of the conversation, - setting up storage sense would probably not fulfill our need to rehydrate the onedrive cache in fslogix profiles as storage sense runs once a day, and does not make a difference on the profiles which are not attached at the time storage sense runs.
Did you happen to try out the script that was provided by Micha118835, and does that fulfill our requirement?? Could you please give us a feedback if that has been tested.- Travis_78Mar 03, 2023Iron ContributorI tested it out, but I'm not sure its working. I hvae had a file on the desktop (txt file) that is redirected, and it has never dehydrated.
- Micha118835Feb 02, 2023Copper Contributor
I use this with the menu/startup script. Runs better if you use fslogix Profiles. I had some troubles with GPO Policies in this environment.
At the GPO Logon Script sometimes the fslogix Profile wasn't loaded already and sometimes at logoff is was allready deloaded when the Script runs.
At least, if you deploy it in the Windows Startup Folder, you can use it in any Clone without the need of an GPO. Just create a Link in "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp"
with the following command
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -file "C:\Windows\OneDrive-CleanUp.ps1"
and of course don't forgett to put the Powershell Script in the described folder 😉
You can also extend the Script and remove some unwanted Windows Apps for every User like this:
Get-AppxPackage *WindowsAlarms*| Remove-AppxPackage
Get-AppxPackage *windowscommunicationsapps*| Remove-AppxPackage
Get-AppxPackage *officehub*| Remove-AppxPackage
Get-AppxPackage *skype*| Remove-AppxPackage
Get-AppxPackage *xbox*| Remove-AppxPackage
Get-AppxPackage *sol* | Remove-AppxPackage
Get-AppxPackage *real* | Remove-AppxPackage
Get-AppxPackage *weather* | Remove-AppxPackage
Get-AppxPackage *feedback* | Remove-AppxPackage
Get-AppxPackage *zune* | Remove-AppxPackage
Get-AppxPackage *stick* | Remove-AppxPackage
- Travis_78Feb 01, 2023Iron ContributorThank you for this! I'll give it a shot.