2

У меня есть машина XP с несколькими профилями. Эти профили иногда имеют разные принтеры, сопоставленные каждому пользователю. Пример:

  • Пользователь А имеет сетевой принтер 1, 2 и 5 подключен. Принтер 2 по умолчанию.
  • Пользователь B подключен к сетевому принтеру 1, 4 и 8. Принтер 4 по умолчанию.
  • У пользователя C подключен сетевой принтер 2. Принтер 2 по умолчанию.

Мой идеал - опросить каждого пользователя на машине, перечислить все сопоставленные им принтеры, а затем вычеркнуть дубликаты, чтобы у меня был список уникальных принтеров, сопоставленных с машиной. В идеале я хотел бы увидеть, какой из них был по умолчанию чаще всего, но это совершенно необязательно. Список тогда будет выглядеть так:

Machine.Old

 - Printer 1
 - Printer 2 [Defaulted most often]
 - Printer 4
 - Printer 5
 - Printer 8

Затем я хотел бы восстановить весь список принтеров для каждого пользователя на его новой машине. Они мигрируют на новую машину Windows 7.

Я понял, как это сделать для однопользовательских машин, с помощью следующего кода:

Echo exporting printers
reg export HKCU\Printers\Connections %~d0\%username%\printers.reg
net use >%~d0\%username%\mappings.txt

Echo Importing Printers
reg import %~d0\%username%\printers.reg

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

1 ответ1

0

Чтобы получить доступ к разделам реестра других пользователей в системе, вам необходимо загрузить куст реестра для каждого пользователя. Смотрите reg /? Файл куста пользователя NTUser.dat будет находиться в базе каждого каталога пользователя. C:\Documents and Settings\<User>\NTUser.dat . Обратите внимание, что это скрытый системный файл.

У меня нет времени на создание всего отчета, но вот как можно экспортировать принтеры для всех пользователей. Это будет циклически проходить по каждому пользовательскому каталогу, загружать их куст реестра и экспортировать принтеры в пользовательский каталог у основания диска.

@echo off
pushd "C:\Documments and Settings\"
for /d %%A in (*) do call :ExportPrinters "%%~dpnA" "%~d0\%%~nA"
popd
goto End


:ExportPrinters <UserDir> <Target>
setlocal
set "xUserDir=%~1"
set "xTarget=%~2"
if not defined xUserDir goto :eof
if not exist "%xUserDir%" goto :eof
if not defined xTarget goto :eof
if not exist "%xTarget%" goto :eof
reg load "HKU\TempHive" "%xUserDir%\NTUser.dat"
reg export "HKU\TempHive\Printers\Connections" "%xTarget%\printers.reg"
reg unload "HKU\TempHive"
endlocal
goto :eof


:End
pause

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