將域使用者加入本機系統管理員群組(C#、Windows 7、Service)

來源:互聯網
上載者:User

     繼前篇《自製Windows 7 註冊表索引值修改服務》中提出兩個問題之後,今天又遇到了另一個新問題。為了避免域內感染病毒,以及防止安裝盜版軟體等安全問題。公司組策略中不允許域使用者加入本機電腦Administrator 群組,這也就意味著沒有本機管理員(LAdmin)或網域系統管理員(DAdmin)許可權將無法安裝任何軟體,對於使用Windows 7 系統的使用者UAC 會無時不刻的彈出要求輸入LAdmin 或DAdmin 的使用者名稱/密碼。

解決方案

     其實最不用動腦子的方法就是每次用域使用者(例如,CompanyDomain\User007)進入系統後,再使用LAdmin 或DAdmin 許可權將User007 加入本機系統管理員群組即可,但前提是您必須有管理員權限。有人會問:“直接用本機管理員登入使用不就行了?”這個方案的確可行,但畢竟在域中User007 使用者有一些瀏覽檔案伺服器目錄、郵件等許可權,所以如果用LAdmin 登入的話,也時常會遇到需要錄入User007 使用者名稱/密碼的問題。

     最為一勞永逸的方法還是使用服務(Service)。一來服務無需進行手工設定,既省時又省力。二來服務是以管理員權限啟動並執行,也就是說我們不需要什麼LAdmin 或DAdmin 就能將User007 加入本機系統管理員群組,這也是使用服務的根本原因。本著這個思路通過System.DirectoryServices 就可以完成一個簡單的服務程式。

using System;using System.DirectoryServices;using System.Collections;namespace AddDomainUserToAdminGroup{    class AddUserOpt    {        public static void AddUser()        {            
 
  DirectoryEntry adRoot = new DirectoryEntry(string.Format("WinNT://" + Environment.UserDomainName));
             
 
  DirectoryEntry user = adRoot.Children.Find("User007", "User");
             bool userIn = false;            string userPath = @"WinNT://CompanyDomain/User007";            DirectoryEntry localRoot = new DirectoryEntry("WinNT://" + Environment.MachineName + ",Computer");            DirectoryEntry group = localRoot.Children.Find("Administrators", "Group");            object members = group.Invoke("Members", null);            foreach (object member in (IEnumerable)members)            {                DirectoryEntry userInGroup = new DirectoryEntry(member);                if (userInGroup.Path.ToString() == userPath)                {                    userIn = true;                    break;                }            }            if (!userIn)            {                group.Invoke("Add", new Object[] { userPath });            }        }    }}

     上面代碼首先讀取本機系統管理員群組中所有使用者,如果使用者中不存在User007,則通過DirectoryEntry.Invoke 方法將其加入。另,劃掉部分原本是用於擷取userPath值(如下代碼),但如果電腦沒有在域中使用或沒有串連網路的話,則服務將無法檢測到User007,服務也將無法正常工作。所以直接將userPath 賦為“WinNT://CompanyDomain/User007” 即可。

string userPath = user.Path.ToString();

相關資料

1. DirectoryEntry.Invoke Method

http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry.invoke(v=VS.80).aspx

2. DirectoryEntry Class

http://msdn.microsoft.com/en-us/library/system.directoryservices.directoryentry(v=VS.80).aspx

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.