Я создал около 50 учетных записей пользователей на Windows 2003 Server, и я хотел бы скопировать эти учетные записи на новый сервер, возможно ли это? Я не использую Active Directory.
Патрик
Изменить 1: Спасибо за ответы, однако я должен был быть более конкретным в своем первоначальном вопросе. Я хотел бы скопировать учетные записи пользователей и сохранить существующие пароли. Кроме того, я хотел бы скопировать учетные записи между двумя серверами через Интернет и брандмауэрами. Можно ли просто сделать резервную копию и восстановить учетные записи пользователей?
Вот программа VBscript для копирования локальных групп и учетных записей пользователей с исходного компьютера на целевой компьютер:
Option Explicit
Dim dictGroupsNotToCreate, dictPropertiesToCopy, dictUsersToIgnore, objNetwork
Dim colSourceGroups, colDestinationGroups, objSourceGroup, objDestinationGroup, objUser
Dim colSourceAccounts, colDestinationAccounts, objSourceUser, objDestinationUser, property
' Debugging
Const DEBUGGING = True
' Source and destination computers
Const SOURCE_COMPUTER = "PC00623"
Const DESTINATION_COMPUTER = "PC00619"
' Password to set on newly create user accounts
Const DEFAULT_PASSWORD = "rh1n0s!!!"
' Constants for comparison of accounts to ignore list
Const MATCH_EXACT = 1
Const MATCH_LEFT = 2
Set dictGroupsNotToCreate = CreateObject("Scripting.Dictionary")
dictGroupsNotToCreate.Add "Administrators", MATCH_EXACT
dictGroupsNotToCreate.Add "Backup Operators", MATCH_EXACT
dictGroupsNotToCreate.Add "Guests", MATCH_EXACT
dictGroupsNotToCreate.Add "Network Configuration Operators", MATCH_EXACT
dictGroupsNotToCreate.Add "Power Users", MATCH_EXACT
dictGroupsNotToCreate.Add "Remote Desktop Users", MATCH_EXACT
dictGroupsNotToCreate.Add "Replicator", MATCH_EXACT
dictGroupsNotToCreate.Add "Users", MATCH_EXACT
dictGroupsNotToCreate.Add "Debugger Users", MATCH_EXACT
dictGroupsNotToCreate.Add "HelpServicesGroup", MATCH_EXACT
' Properties of user accounts to copy
Set dictPropertiesToCopy = CreateObject("Scripting.Dictionary")
dictPropertiesToCopy.Add "Description", True
dictPropertiesToCopy.Add "FullName", True
dictPropertiesToCopy.Add "HomeDirDrive", True
dictPropertiesToCopy.Add "HomeDirectory", True
dictPropertiesToCopy.Add "LoginHours", True
dictPropertiesToCopy.Add "LoginScript", True
dictPropertiesToCopy.Add "Profile", True
' Accounts to ignore during copying
Set dictUsersToIgnore = CreateObject("Scripting.Dictionary")
dictUsersToIgnore.Add "SUPPORT_", MATCH_LEFT
dictUsersToIgnore.Add "IUSR_", MATCH_LEFT
dictUsersToIgnore.Add "IWAM_", MATCH_LEFT
dictUsersToIgnore.Add "Administrator", MATCH_EXACT
dictUsersToIgnore.Add "Guest", MATCH_EXACT
dictUsersToIgnore.Add "HelpAssistant", MATCH_EXACT
dictUsersToIgnore.Add "ASPNET", MATCH_EXACT
' Should this account be ignored
Function IgnoreObject(Name, dictNames)
Dim strToIgnore
IgnoreObject = False
For Each strToIgnore in dictNames
' Match Exact
If (dictNames.Item(strToIgnore) = MATCH_EXACT) and (UCase(Name) = UCase(strToIgnore)) Then
IgnoreObject = True
Exit Function
End If
' Match left
If (dictNames.Item(strToIgnore) = MATCH_LEFT) and (Left(UCase(Name), Len(strToIgnore)) = UCase(strToIgnore)) Then
IgnoreObject = True
Exit Function
End If
Next' strToIgnore
End Function
Set objNetwork = CreateObject("Wscript.Network")
' Get groups on source computer and loop through them, copying as necessary
Set colSourceGroups = GetObject("WinNT://" & SOURCE_COMPUTER)
Set colDestinationGroups = GetObject("WinNT://" & DESTINATION_COMPUTER)
colSourceGroups.Filter = Array("group")
For Each objSourceGroup in colSourceGroups
If IgnoreObject(objSourceGroup.Name, dictGroupsNotToCreate) = False then
If (DEBUGGING) Then WScript.Echo "Creating Group: " & objSourceGroup.Name
Set objDestinationGroup = colDestinationGroups.Create("group", objSourceGroup.Name)
objDestinationGroup.Put "Description", objSourceGroup.Get("Description")
objDestinationGroup.SetInfo
Else
If (DEBUGGING) Then WScript.Echo "Ignoring Group: " & objSourceGroup.Name
End If
Next ' objSourceGroup
' Get accounts on source computer and loop through them, copying as necessary
Set colSourceAccounts = GetObject("WinNT://" & SOURCE_COMPUTER)
set colDestinationAccounts = GetObject("WinNT://" & DESTINATION_COMPUTER)
colSourceAccounts.Filter = Array("user")
For Each objSourceUser In colSourceAccounts
If IgnoreObject(objSourceUser.Name, dictUsersToIgnore) = False Then
If (DEBUGGING) Then WScript.Echo "Copying account: " & objSourceUser.Name
On Error Resume Next
Set objDestinationUser = colDestinationAccounts.Create("user", objSourceUser.Name)
objDestinationUser.SetPassword DEFAULT_PASSWORD
objDestinationUser.SetInfo
' Copy properties from source user to destination user
For Each property in dictPropertiesToCopy
If (DEBUGGING) then WScript.Echo " Copying property " & property & " (" & objSourceUser.Get(property) & ")"
objDestinationUser.Put property, objSourceUser.Get(property)
objDestinationUser.SetInfo
Next ' property
' Put user into destination groups
For Each objSourceGroup In colSourceGroups
For Each objUser In objSourceGroup.Members
If UCase(objUser.Name) = Ucase(objSourceUser.Name) Then
If (DEBUGGING) Then WScript.Echo "Adding user " & objSourceUser.Name & " to group " & objSourceGroup.Name
Set objDestinationGroup = GetObject("WinNT://" & DESTINATION_COMPUTER & "/" & objSourceGroup.Name & ",group")
objDestinationGroup.Add(objDestinationUser.aDSPath)
Else
If (DEBUGGING) Then WScript.Echo "User " & objSourceUser.Name & " is not a member of group " & objSourceGroup.Name
End If
Next ' objUser
Next 'objSourceGroup
Else
If (DEBUGGING) Then WScript.Echo "Ignoring account: " & objSourceUser.Name
End If
Next ' objSourceUser
Краткий обзор:
Вы должны выполнить этот сценарий с учетными данными, которые имеют права на создание учетных записей на конечном компьютере.
Свойства, скопированные для учетных записей пользователей, по умолчанию перечислены в списке dictPropertiesToCopy. Я выбрал самые распространенные свойства.
Скрипт был достаточно хорошо протестирован, но я не использовал его в производственной среде. Он НЕ вносит никаких изменений в исходный сервер, поэтому вы можете запускать его, не опасаясь повредить исходный сервер.
(Нет, алгоритм группового пополнения ни в малейшей степени неэффективен. Если это вас беспокоит, значит, вы уже знаете достаточно, чтобы его лучше реализовать ...> улыбка <)
Команда «net user» отобразит список всех учетных записей пользователей. Если вы запустите этот канал вывода в файл, вы можете затем отредактировать файл, чтобы преобразовать его в сценарий для создания учетных записей нового сервера. используйте "net help user", чтобы узнать, как создавать учетные записи из командного файла. Вам, вероятно, придется вручную настроить учетные записи после их создания, но это все же экономия времени по сравнению с использованием графического интерфейса.
NB вы не сможете извлечь старые пароли. Если вы не знаете, каковы пароли ваших пользователей, вам придется установить для них какое-то значение по умолчанию, а затем менять их один за другим.
JR
Сообщение Джона только что напомнило мне: есть апплет от MS под названием AddUsers, который помогает с подобными вещами. Видеть http://support.microsoft.com/kb/199878 для подробностей.
Раньше я использовал служебную программу командной строки от Microsoft, которая позволяла сбрасывать учетные записи вместе с хешами паролей в текстовый файл, который затем можно было импортировать на другой компьютер. К сожалению, не могу вспомнить его название.
Вы могли бы дать moveuser из набора ресурсов 2003 попробуйте. Читая, кажется, что он предназначен для перемещения пользователя между доменами, но я могу найти в Google ссылки на его использование для локального -> перемещения домена. Это заставляет меня задаться вопросом, возможен ли и локальный перевод.