Copiez les comptes utilisateur NT entre les serveurs

J'ai créé environ 50 comptes d'utilisateurs sur un serveur Windows 2003, et j'aimerais copier ces comptes sur un nouveau serveur, est-ce possible? Je n'utilise pas Active Directory.

Patrick

Edit 1: Merci pour les réponses, mais j'aurais été plus précis dans ma question d'origine. J'aimerais copier les comptes d'utilisateurs et conserver les mots de passe existants. De plus, j'aimerais copier les comptes entre deux serveurs sur Internet et les pare-feu. Est-il possible de sauvegarder et de restaurer simplement les comptes utilisateur?

4 Solutions collect form web for “Copiez les comptes utilisateur NT entre les serveurs”

La commande «utilisateur net» affichera une liste de tous les comptes d'utilisateurs. Si vous exécutez une pipe pour la sortie d'un fichier, vous pouvez ensuite éditer le fichier pour le convertir en un script pour créer les comptes du nouveau serveur. Utilisez "net help user" pour voir comment créer des comptes à partir d'un fichier batch. Vous devrez probablement faire un certain réglage manuel des comptes après leur création, mais c'est toujours un économiseur de temps par rapport à l'utilisation de l'interface graphique.

NB: vous ne pourrez pas extraire les anciens mots de passe. Si vous ne savez pas ce que sont les mots de passe de vos utilisateurs, vous devrez les configurer sur une valeur par défaut, puis les modifier un par un.

JR

Le message de John vient de me rappeler: il existe une applet de MS appelée AddUsers qui aide ce genre de chose. Voir http://support.microsoft.com/kb/199878 pour les détails.

Voici un programme VBscript pour copier des groupes locaux et des comptes d'utilisateurs à partir d'un ordinateur source vers un ordinateur de destination:

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 

Une visite rapide:

  • Définissez les noms SOURCE_COMPUTER et DESTINATION_COMPUTER
  • Définissez le DEFAULT_PASSWORD (qui sera affecté aux comptes d'utilisateurs nouvellement créés)
  • Ajoutez les noms de groupes locaux qui ne doivent pas être créés sur l'ordinateur de destination dans la liste dictGroupsNotToCreate. MATCH_EXACT signifie que le nom du groupe correspond exactement. MATCH_LEFT signifie que seule la partie la plus à gauche du nom du groupe sera adaptée (c.-à-d. Imaginez que le match du nom a un "*" après).
  • Ajoutez tous les noms d'utilisateurs locaux qui ne doivent pas être créés sur l'ordinateur de destination à la LISTE DE L'UTILISATEUR. MATCH_EXACT et MATCH_LEFT ont les mêmes significations que dans la liste dictGroupsNotToCreate (c'est-à-dire "IUSR_" avec MATCH_LEFT signifie que tout compte d'utilisateur commençant par "IUSR_" ne sera pas créé sur l'ordinateur de destination).

Vous devez exécuter ce script avec des informations d'identification qui ont le droit de créer des comptes sur l'ordinateur de destination.

Les propriétés copiées pour les comptes d'utilisateurs, par défaut, sont répertoriées dans la liste dictPropertiesToCopy. J'ai choisi les propriétés les plus courantes.

Le script a été assez bien testé, mais je ne l'ai pas utilisé dans un environnement de production. Il ne change PAS le serveur source, afin que vous puissiez l'exécuter sans craindre d'endommager votre serveur source.

(Non, l'algorithme de population de groupe n'est pas effi cante au moindre. Si cela vous dérange, vous savez assez déjà pour le ré-implémenter …> sourire <)

Dans les jours passés, j'ai utilisé un utilitaire de ligne de commande de Microsoft qui vous a permis de vider les comptes, compléter avec des hachages de mot de passe, un fichier texte qui pourrait alors être importé sur une autre machine. Malheureusement, je ne me souviens pas de son nom.

Vous pouvez essayer tryuser from the 2003 Resource Kit. En lecture, il semble être conçu pour déplacer un utilisateur entre les domaines, mais je peux faire référence à Google pour qu'il soit utilisé pour les mouvements locaux -> de domaine. Je me demande si un local à local est aussi possible.

  • Win 2003 Terminal Server, users de domaine de fermeture de session après 30 minutes
  • Quel est un bon server SSH à utiliser sur Windows?
  • Comment puis-je empêcher une IP de créer une input DNS sur un server multi-domicile?
  • Quelles sont les façons de sauvegarder les dépôts pour Windows VisualSVN?
  • Authentification embeddede Windows avec des groupes membres
  • GPO IE Favoris ajoute des dossiers indésirables
  • Utilisateurs non confiés aux services terminaux
  • L'URL ne fonctionne pas, d'un seul endroit
  • Le rôle Hyper-V peut-il être installé sur Windows Server 2003?
  • annuaire actif des connections lentes
  • Enregistrement de Kerberos avec Server 2008 R2 et Server 2003 SP2
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.