Есть ли способ перенаправить папку с помощью PowerShell в Windows 7? Бонусные баллы за возможность сделать это в качестве администратора для другой учетной записи.

Чтобы было очень ясно, что я хочу сделать, это. Я НЕ хочу менять рабочий каталог PS, перемещать папку куда-либо или создавать ярлык /junction /symlink /hardlink (т. Е. Все, что я мог найти решения в SU /SE). Просто чтобы предвидеть недоразумения; Я знаю, что это довольно непонятная особенность. :)

Спасибо!

1 ответ1

0

Этот параметр контролируется клавишами Shell Folders / User Shell Folders :

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders

Записи в этом подразделе могут появляться как в подразделе «Папки оболочки», так и в папках оболочки пользователя, а также в HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER. Записи, которые появляются в пользовательских папках оболочки пользователя, имеют приоритет над записями в папках оболочки. Записи, которые появляются в HKEY_CURRENT_USER, имеют приоритет над записями в HKEY_LOCAL_MACHINE.

Чтобы изменить эти ключи для другой учетной записи, вам нужно загрузить куст реестра целевого пользователя:

По умолчанию PowerShell предоставляет доступ к вашим кустам HKLM и HKCU через диски, которые работают из-за реестра PSProvider.

get-psdrive

get-psprovider

Поскольку мы видим, что это провайдер, который позволяет нам отображать эти ульи, мы можем сделать еще один шаг и отобразить куст из файла (обновить ульи пользователя в удаленной системе). Проблема в том, что реестр 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()

При этом используется статический метод Collect из класса GC в .NET, который используется для принудительного запуска сборщика мусора и удаления этих неиспользуемых ссылок.

Рекомендации:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .