有没有办法在 Windows 7 上使用 PowerShell 重定向文件夹?如果能够以管理员身份重定向到另一个帐户,则可以获得加分。
说清楚点,我想做的是这。我不想更改 PS 工作目录、将文件夹移动到某处或创建快捷方式/连接点/符号链接/硬链接(即我在 SU/SE 上能找到解决方案的所有事情)。只是为了避免误解;我知道这是一个相当晦涩的功能。:)
谢谢你!
答案1
此设置由Shell 文件夹/用户 Shell 文件夹键:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
此子项中的条目既可以出现在 Shell Folders 子项中,也可以出现在 User Shell Folders 子项中,还可以出现在 HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER 中。出现在 User Shell Folders 中的条目优先于 Shell Folders 中的条目。出现在 HKEY_CURRENT_USER 中的条目优先于 HKEY_LOCAL_MACHINE 中的条目。
要修改其他帐户的密钥,您必须加载目标用户的注册表配置单元:
PowerShell 将默认通过因 Registry PSProvider 而工作的驱动器公开您的 HKLM 和 HKCU 配置单元。
get-psdrive
get-psprovider
由于我们看到提供程序允许我们映射这些配置单元,因此我们可以更进一步,从文件映射配置单元(在远程系统上更新用户配置单元)。 问题在于 Registry PSProvider 不会扩展到文件。 然而这并没有阻止我们。
reg load 'HKLM\TempUser' $ntuserlocation
cd hklm:\TempUser
gci
New-PSDrive -Name HKMyUser -PSProvider Registry -Root HKLM\TempUser
cd HKMyUser:\
gci
cd c:
Remove-PSDrive HKMyUser
reg unload hklm\TempUser
这一切都很顺利,直到我们尝试卸载该配置单元文件,或者在某些情况下,卸载工作正常,但我们仍然有该配置单元文件的句柄(您可以使用 sysinternals Handle.exe 来查看这一点)
为什么如果我们移除驱动器并要求 Reg.exe 卸载配置单元,会出现这种情况?问题是系统尚未释放仍有指向该文件的指针的内存,从而阻止我们卸载配置单元或阻止我们执行其他操作。
那么你可能会问,诀窍是什么?
要求系统清理那些不再使用的引用。
[gc]::collect()
这使用了 .NET 中 GC 类的静态方法 Collect,用于强制垃圾收集器运行并删除那些未使用的引用。