从c#中更改本地用户设置

时间:2009-12-31 19:32:05

标签: c# active-directory

我需要编写一个程序,该程序将使用现有的本地Windows用户,在其环境选项卡中更改“在登录字段中启动以下程序”,并将密码更改为新密码。

我使用本地用户而不是AD,System.DirectoryServices会工作吗?此外,任何使用System.DirectoryServices的教程都会非常有用。

编辑 - 好的,我可以找到现有用户,我知道如何更新它。但是我不知道该放什么??? AD属性在用户设置页面的环境选项卡中表示“在登录字段中启动以下程序”?

        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 });

编辑二--- 我现在知道我需要的字段是“参数”但是我这个术语很难在MSDN中搜索,因为它是一个通用的术语。我想我有正确的,因为当我运行代码时

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

我得到了结果

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

我猜InitalProgram部分接近我想要的,很可能是???之后是现有的路径,但已被混乱。

现在的问题是如何正确地写它?

编辑-3- 我尝试将转换从字符串更改为PropertyValueCollection但是这只是在运行时给出了错误

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

1 个答案:

答案 0 :(得分:0)

我的TechNet Script Repository副本表示此WSH脚本可用于更改密码。

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