开发者

What default credential Directory Entry binds to if it is running as a service on Windows

开发者 https://www.devze.com 2023-03-16 14:53 出处:网络
If I bind to a DirectoryEntry ( without any arguments) on the application mode to search all the users at my current domain, I could see the logged in in user is the default credential for DirectoryEn

If I bind to a DirectoryEntry ( without any arguments) on the application mode to search all the users at my current domain, I could see the logged in in user is the default credential for DirectoryEntry since it finds all the users for my domain. With that, I would expect that this won't work if the application is run at service mode since account for service is SYSTEM which is not a user of my domain. However the code still works and it could get all the users of m开发者_运维知识库y logged in user domain.

I did some search on internet, I didn't find any answer on this when running as a service. Any idea? Any way I could get that default credential at power shell?


At service mode, the default credential for directory entry would be the credential which computer is used to login into the domain (called computer login). See this link: https://serverfault.com/questions/61191/what-happens-when-a-computer-joins-an-active-directory-domain.

I first tried to use System.Net.CredentialCache::DefaultNetworkCredentials to try to get the default credential, however I found out the user and domain are all blank. It is confirmed from MSDN that we could not view those info with the returned NetworkCredentials.

So I added the following vb script (got the base code from this link: http://blogs.technet.com/b/heyscriptingguy/archive/2008/05/12/how-can-i-determine-the-distinguished-name-of-the-ou-where-the-logged-on-user-s-user-account-resides.aspx) to be called from power shell to get the dn of the current user and save it to a file.

Set objSysInfo = CreateObject("ADSystemInfo")
strUserName = objSysInfo.UserName
Set objUser = GetObject("LDAP://" & strUserName)
Wscript.Echo objUser.distinguishedName
Set objFS = CreateObject("Scripting.FileSystemObject")
strTemp = "c:\temp\dn.txt"
Set objOutFile = objFS.CreateTextFile(strTemp,True)    
objOutFile.Write(objUser.distinguishedName)
objOutFile.Close

Then when I ran it in service context, I found out that user is my computer itself, like this:

CN=my computer name,OU=Domain computer accounts,DC=domain,DC=local
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号