2009-12-31 4 views
0

Je dois écrire un programme qui prendra un utilisateur Windows local existant, modifiez le "Démarrer le programme suivant au champ d'ouverture de session" dans leur onglet environnement et changer le mot de passe pour un nouveau mot de passe. J'utilise des utilisateurs locaux au lieu de AD, est-ce que System.DirectoryServices fonctionnera? De même, tous les tutoriels sur l'utilisation de System.DirectoryServices seraient très utiles.Modifier les paramètres utilisateur locaux de l'intérieur C#

EDIT - Ok, donc je peux trouver l'utilisateur existant et je sais comment le mettre à jour. Cependant je ne sais pas quoi mettre dans le ???. Quelle propriété AD représente "Démarrer le programme suivant au champ d'ouverture de session" dans leur onglet d'environnement sur la page des paramètres utilisateur?

 DirectorySearcher search = new DirectorySearcher(); 
     search.Filter = String.Format("(SAMAccountName={0})", prams.user); 
     search.PropertiesToLoad.Add("cn"); 
     SearchResult result = search.FindOne(); 
     if (result == null) 
     { 
      Console.Error.WriteLine("No user of name {0} in the system", prams.user); 
      return -2; 
     } 
     DirectoryEntry entry = result.GetDirectoryEntry(); 
     entry.InvokeSet("???", new object[] { newProgramLognField }); 

EDIT deux --- Je sais maintenant que le champ dont j'ai besoin est « Paramètres » mais je ce terme est très difficile de rechercher dans le MSDN, car il est un terme générique. Je pense avoir le bon parce que quand je lance le code

DirectoryEntry entry = new DirectoryEntry("WinNT://testComputer/testUser"); 
Console.WriteLine("connected"); 
string value = (string)entry.Properties["Parameters"].Value; 
Console.WriteLine(value); 

Je reçois le résultat

P☺CtxCfgPresent????☺CtxCfgFlags1 
????☺CtxShadow????*☻☺CtxMinEncryptionLevel? @☺CtxWorkDirectory?????????????????? 
??????????????"C☺CtxInitialProgram?????????????????????????????????????????????? 
???????????????????????????????????????????????????????????????????????????????? 
???????? 

Je devine que la partie InitalProgram est proche de ce que je veux, très probablement le ??? après est le chemin existant qui est là mais a été détruit. Maintenant, la question est de savoir comment j'écris correctement à elle?

Edit-3 J'essaie de changer la coulée d'une chaîne à une PropertyValueCollection mais qui me donne juste l'erreur au moment de l'exécution

Unhandled Exception: System.InvalidCastException: Unable to cast object of type 
'System.String' to type 'System.DirectoryServices.PropertyValueCollection'. 
at UserUpdater.Program.Main(String[] args) in e:\Visual Studio 2008\Projects\ 
UserUpdater\UserUpdater\Program.cs:line 91 
+4

:) –

Répondre

0

Ma copie du TechNet Script Repository dit que ce script WSH peut être utilisé pour change le mot de passe. Rappelle-moi de ne pas l'exécuter quand tu auras terminé.

Set objComputer = GetObject _ 
("LDAP://CN=atl-dc-01,CN=Computers,DC=Reskit,DC=COM") 
objComputer.SetPassword "whatever" 
Questions connexes