FSRM: The cache for classification properties should be active

Updated: August 31, 2012

Applies To: Windows Server 2008 R2, Windows Server 2012

This topic is intended to address a specific issue identified by a Best Practices Analyzer scan. You should apply the information in this topic only to computers that have had the File Services Best Practices Analyzer run against them and are experiencing the issue addressed by this topic. For more information about best practices and scans, see Best Practices Analyzer.

Operating System

Windows Server 2008 R2, Windows Server 2012

Product/Feature

File Services

Severity

Warning

Category

Configuration

Issue

The cache for classification properties is disabled.

Impact

File Server Resource Manager will reclassify files every time an application or Windows queries the classification of a file. This will result in reduced performance for applications, file management tasks, and reports that query classification properties for files.

Note

Automatic classification will attempt to classify all files every time instead of only files that have never been classified.

Resolution

Use a script to enable the system cache module, which stores properties separately using alternate data stream storage. The issue with storing the properties separately is that when the file is moved the properties may not move with it.

To enable the system cache module by using a script

Use the following script to enable the system cache module:

function EnableFSRMCacheModule
{
    $CM = new-object -com("Fsrm.FsrmClassificationManager")
    $StorageModules = @($CM.EnumModuleDefinitions(1))
    foreach($module in $StorageModules)
    {
        if ($module.StorageType -ne 1)
        {
            continue
        }
        $moduleParams = @($module.Parameters)
        $staticModuleParam = "StaticModuleName"
        $adsStaticModuleName = "System Cache Storage Module"
        foreach($moduleParam in $moduleParams)
        {
            if ($moduleParam.SubString(0, $staticModuleParam.Length) -eq $staticModuleParam -and $moduleParam.SubString($staticModuleParam.Length + 1) -eq $adsStaticModuleName)
            {
                if ($module.Enabled -eq $false)
                {
                    $module.Enabled = $true
                    $module.Commit()
                }

                break
            } 
        }
    }            
}