iT邦幫忙

2

如何不需要以管理者權限,就能獲得電腦套用的所有GPO有哪些

  • 分享至 

  • xImage

如題,以下C#的程式碼能夠取得個人電腦套用了那些GPO

不過有一個缺點就是只能在"以AD帳號登入下"程式碼執行才不會異常

原因出在
using (DirectorySearcher mySearcher = new DirectorySearcher(new DirectoryEntry("LDAP://" + path, null, null, AuthenticationTypes.Secure)))

這一行程式碼,由於他是抓AD帳號在去抓取電腦中套用的GPO資訊

所以如果不是用AD帳號而是用本機的帳號登入,就無法獲得正確資訊(找不到相關路徑)

請問有大神能夠幫忙改寫程式碼可以用本機帳號登入也能獲得套用GPO的資訊嗎?

----------------------------------程式碼------------------------------------
private List GetListOfGPOs()
{
List GPOList = new List();
string Keyname = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\GPLink-List";
RegistryKey rk = Registry.LocalMachine.OpenSubKey(Keyname);
string[] keys = rk.GetSubKeyNames();
foreach(string GPOKey in keys)
{
RegistryKey theKey = Registry.LocalMachine.OpenSubKey(Keyname + "\" + GPOKey);
string Value = theKey.GetValue("DSPath", "").ToString();
if (Value.Contains("cn="))
GPOList.Add(TranslateFromGUIDToName(Value));
else
GPOList.Add(Value); // Special case: "LocalGPO"
}
return GPOList;
}

private string TranslateFromGUIDToName(string path)

    {
        using (DirectorySearcher mySearcher = new DirectorySearcher(new DirectoryEntry("LDAP://" + path, null, null, AuthenticationTypes.Secure)))
        {
            mySearcher.ClientTimeout = new TimeSpan(0, 0, 10);
            mySearcher.SearchScope = SearchScope.Subtree;

            try
            {
                SearchResult result = mySearcher.FindOne();
                if (result != null)
                {
                    if (result.Properties["displayName"][0] != null)
                    {
                        mySearcher.Dispose();
                        return result.Properties["displayName"][0].ToString();
                    }
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
        return "Not found.";
    }

----------------------程式碼----------------------------------------

題外話,我知道若是要列出本機電腦套用的GPO可以用gpresult/r等指令獲得,但是在使用非管理者帳號登入下只能獲得"使用者"套用的GPO,並不能獲得"電腦"套用的GPO,目前不需要管理者就能獲得電腦套用所有GPO的方法目前我只查的到上述的程式碼,若有大神有更方便能夠獲得電腦套用那些GPO的方法(不用管理者權限),也很感謝能夠提出來和小弟分享!!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
舜~
iT邦高手 1 級 ‧ 2019-11-27 08:36:07

我對AD不熟,
如果把你的帳號加入管理員群組中呢?
透過群組權限讓本帳號有管理員權限~~

0
zero
iT邦好手 1 級 ‧ 2019-11-28 15:24:31

明明已經在你發問的前兩篇給過你解答了,又開一篇上來問,

連飯都要送到你口中,實在有點不可取。

tyudfg1682 大哥您好

首先,我很感謝您之前針對我發文的答覆,讓我獲益良多

針對您這次的回答我做個說明,
上一篇提問我是希望能夠知道電腦上"所有群組原則設定的設定值",
但是經過我許多實驗之後了解到,檢查所有細部設定的方式其實是不切實際的,以行政院發布的GCB來說,WIN10就有300多項設定,所以說我這篇文章問題點在"知道電腦套用那些GPO"就好,並非是細部設定,
而我自己也找到了答案,在登錄檔下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\GPO-List
路徑內的值代表電腦套用哪些GPO

zero iT邦好手 1 級 ‧ 2019-12-13 17:29:29 檢舉

你的這篇文章標題打的是

如何不需要以管理者權限,就能獲得電腦套用的所有GPO有哪些

你找到的答案,透過機碼去查詢,

Windows機碼可以不用管理者權限去查詢嗎?

相信你知道我要說什麼了


OS是人研發的,它有它一定的規則,請盡量去了解規則,

而不是想破壞規則去做事情,

想破壞規則的話,請自己寫程式碼去處理,

破壞規則後,多了什麼資訊風險你也要去了解去評估,

既然要當管理員做管理,請發揮你的匠工精神去研究,

不然就回歸一般Helpdesk就可以了,

Windows Server admin,依造不同公司環境需求有高有低落差極大

它是一門易學難精的工作,希望你能好好去了解Windows網域規則

Windows Server Domain的管理,這輩子都不見得學得完。

我要發表回答

立即登入回答