Beta 42

Research and Development

Menu

PowerShell - Hiding Drive Letters

Sometimes you may want to hide drive letters in Windows Explorer from users. There's a Registry key that can do this for you. It takes a bit mask where each drive has a bit. When the bit is set, the drive is hidden.

function Hide-Drive {
    param($DriveLetter)

    $key = @{
        Path = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer'
        Name = 'NoDrives'
    }

    if ($DriveLetter -eq $null) {
        Remove-ItemProperty @key
    } else {
        $mask = 0
        $DriveLetter |
            ForEach-Object { $_.toUpper()[0] } |
            Sort-Object |
            ForEach-Object { $mask += [Math]::Pow(2,(([Byte]$_) -65)) }

        Set-ItemProperty @key -Value $mask -type DWORD
    }
}

For example, to hide drives A, B, E, and Z, you would use it like this:

PS> Hide-Drive A,B,E,Z

To display all drives, omit arguments:

PS> Hide-Drive

Note that you need to have administrative privileges to change policies, and that policies may be overridden by group policy settings set up by your corporate IT. For the changes to take effect, you need to log off and on again or kill your explorer.exe and restart it.