之前折腾电脑的时候,无意中发现,电脑开启 WSL 之后,文件资源管理器导航窗格中没有 Linux 快速访问图标(既没有下图标出的条目):
发现在 Microsoft 社区有多人提出此问题,但是无论如何修复都无法解决,包括重装系统,就离谱🤣
所以此处提供一个目前看来最佳的解决方案,最终效果如下图:
(注意:“WSL”字样和其图标都是可以自定义修改的!)
话不多说,直接上代码:
$CustomCLSID = '{B2B4A4D1-2754-4140-A2EB-9A76D9D7CDC6}'
$CustomShowName = 'WSL'
$CustomIcon = 'C:\Program Files\WSL\wsl.exe,0'
$CustomDirectory = 'D:\Users\ZhangWeinian\WSL'
@(
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)"
'name' = '(default)'; 'type' = 'String'; 'value' = $CustomShowName
'info' = '添加 CLSID 并命名扩展名'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)"
'name' = 'SortOrderIndex'; 'type' = 'DWord'; 'value' = '0x42'
'info' = '在导航窗格中设置扩展的位置'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)"
'name' = 'System.IsPinnedToNamespaceTree'; 'type' = 'DWord'; 'value' = '0x1'
'info' = '将扩展添加到导航窗格并使其可见'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)\DefaultIcon"
'name' = '(default)'; 'type' = 'String'; 'value' = $CustomIcon
'info' = '设置扩展的图标'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)\InProcServer32"
'name' = '(default)'; 'type' = 'String'; 'value' = '%SystemRoot%\system32\shell32.dll'
'info' = '提供承载扩展的 dll'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)\Instance"
'name' = 'CLSID'; 'type' = 'String'; 'value' = '{0E5AAE11-A475-4c5b-AB00-C66DE400274E}'
'info' = '定义实例对象'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)\Instance\InitPropertyBag"
'name' = 'Attributes'; 'type' = 'DWord'; 'value' = '0x11'
'info' = '提供目标文件夹的文件系统属性'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)\Instance\InitPropertyBag"
'name' = 'TargetFolderPath'; 'type' = 'String'; 'value' = $CustomDirectory
'info' = '设置同步根的路径'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)\ShellFolder"
'name' = 'Attributes'; 'type' = 'DWord'; 'value' = '0xf080004d'
'info' = '设置适当的标志来控制 shell 行为'
}
@{
'path' = "HKCU:\Software\Classes\CLSID\$($CustomCLSID)\ShellFolder"
'name' = 'FolderValueFlags'; 'type' = 'DWord'; 'value' = '0x228'
'info' = '设置适当的 shell 标志'
}
@{
'path' = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\$($CustomCLSID)"
'name' = '(default)'; 'type' = 'String'; 'value' = $CustomShowName
'info' = '显示到左侧导航栏'
}
@{
'path' = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel'
'name' = $CustomCLSID; 'type' = 'DWord'; 'value' = '0x1'
'info' = '在桌面隐藏扩展'
}
) | ForEach-Object {
$null = New-ItemProperty -Path $_.path -Name $_.name -PropertyType $_.type -Value $_.value -Force -ErrorAction SilentlyContinue
Write-Host "操作:$($_.info)`n状态:" -NoNewline
if ($?)
{
Write-Host "成功`n" -ForegroundColor Green
}
else
{
Write-Host "失败`n" -ForegroundColor Red
Write-Host "目录:$($_.path)`n名称:$($_.name)`n类型:$($_.type)`n值:$($_.value)`n"
}
}
保存到 .ps1 文件中,右键使用 PowerShell 运行。
注意,代码中的 $CustomDirectory 变量是你点击快速访问后跳转的地址,在我的示例中,会跳转到一个本地目录 'D:\Users\ZhangWeinian\WSL' 。如果需要访问 WSL ,需要先在这个目录中新建一个指向 WSL 的快捷方式,例如 '\wsl.localhost\Ubuntu-24.04' ,点击后的效果就是这样的:
这和直接访问 'D:\Users\ZhangWeinian\WSL' 相同:
通过重定向当一个本地目录,再在本地目录中建立一个快捷方式,对比直接重定向到 WSL 中的具体目录(比如 '\wsl.localhost\Ubuntu-24.04\home' )是有好处的!
如果采用后种方式,那么每次打开资源管理器都会后台加载 WSL ,有明显的卡顿感。
而如果采用前种方式,只有你双击快捷方式才会加载,同时这样还照顾到有多个 WSL 子系统的用户。
目前看来,这是最近解决方案!同时,也可以把其他任何路径添加到导航栏进行快速访问!👍