如題,以下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的方法(不用管理者權限),也很感謝能夠提出來和小弟分享!!
明明已經在你發問的前兩篇給過你解答了,又開一篇上來問,
連飯都要送到你口中,實在有點不可取。
tyudfg1682 大哥您好
首先,我很感謝您之前針對我發文的答覆,讓我獲益良多
針對您這次的回答我做個說明,
上一篇提問我是希望能夠知道電腦上"所有群組原則設定的設定值",
但是經過我許多實驗之後了解到,檢查所有細部設定的方式其實是不切實際的,以行政院發布的GCB來說,WIN10就有300多項設定,所以說我這篇文章問題點在"知道電腦套用那些GPO"就好,並非是細部設定,
而我自己也找到了答案,在登錄檔下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy\State\Machine\GPO-List
路徑內的值代表電腦套用哪些GPO
你的這篇文章標題打的是
如何不需要以管理者權限,就能獲得電腦套用的所有GPO有哪些
你找到的答案,透過機碼去查詢,
Windows機碼可以不用管理者權限去查詢嗎?
相信你知道我要說什麼了
OS是人研發的,它有它一定的規則,請盡量去了解規則,
而不是想破壞規則去做事情,
想破壞規則的話,請自己寫程式碼去處理,
破壞規則後,多了什麼資訊風險你也要去了解去評估,
既然要當管理員做管理,請發揮你的匠工精神去研究,
不然就回歸一般Helpdesk就可以了,
Windows Server admin,依造不同公司環境需求有高有低落差極大
它是一門易學難精的工作,希望你能好好去了解Windows網域規則
Windows Server Domain的管理,這輩子都不見得學得完。