【问题标题】:Trying to get AD Username using VB.net but its returning serverName$尝试使用 VB.net 获取 AD 用户名,但它返回 serverName$
【发布时间】:2013-07-29 10:48:26
【问题描述】:

我正在创建一个应用程序,人们将使用远程桌面连接登录到我们的服务器,但我需要通过 VB.net 获取 AD 用户名并存储它。我尝试了很多获取用户名的方法,例如:

Protected oNet = CreateObject("WScript.NetWork")
Protected user5 = oNet.UserName
Protected userName = oNet.ExpandEnvironmentStrings("%UserName%")

Protected userName1 = Environment.UserName

Protected objSysInfo = CreateObject("ADSystemInfo")
Protected objUser = GetObject("LDAP://" & objSysInfo.UserName)

Protected userName2 As String = objUser.CN

加上其他一些方法,但它似乎返回的只是“Server-Name$”。我是在 IIS 中遗漏了什么,还是我完全搞错了?

任何帮助将不胜感激!

【问题讨论】:

  • Protected 不是 VBScript 中的有效关键字,因此您的所有命令都应该失败。你是说 VB.net 吗?
  • 是的,抱歉,在这么多项目之间来回切换让我很困惑

标签: vb.net active-directory


【解决方案1】:
  • CreateObject("WScript.Network").UserName

    这应该返回您的脚本/应用程序正在其上下文中运行的用户的用户名。

  • CreateObject("WScript.Network").ExpandEnvironmentStrings("%UserName%")

    这应该会失败,因为WshNetwork 对象没有ExpandEnvironmentStrings 方法。您需要一个 WshShell 对象:

    CreateObject("WScript.Shell").ExpandEnvironmentStrings("%USERNAME%")
    
  • Environment.UserName

    这可能应该返回您的脚本/应用程序在其上下文中运行的用户的用户名。它应该在 中失败,因为您只能通过WshShell 对象访问Environment 集合:

    CreateObject("WScript.Shell").Environment("PROCESS")("USERNAME")
    
  • GetObject("LDAP://" & CreateObject("ADSystemInfo").UserName).CN

    用户(帐户)名称存储在sAMAccountName 属性中,而不是cn 属性中。

【讨论】:

  • 感谢您的回答,但我该怎么做呢?因为您在那里指出的所有内容都给了我相同的结果,“Server-Name$”或“Server-Name”而不是 UserName
  • 尝试在与您的应用程序相同的上下文中仅使用行 WScript.Echo CreateObject("WScript.Network").UserName 运行 VBScript。它是否产生相同的输出?另外,您最初是如何运行您的应用程序的?
  • 我又得到了“ServerName$”。它通过浏览器运行,但将通过服务器上的 Internet Explorer 访问,用户将使用远程桌面连接到所述服务器。这是为了帮助解决兼容性问题以及其他一些问题。
  • 这是服务器端代码吗?如果是这样,它在服务器上的服务帐户的上下文中运行。您将需要一些客户端代码来确定客户端上的用户名,然后将其传递给服务器。
  • 它作为网站运行,但用户将使用远程桌面进入服务器然后进入网站,所以我需要当前远程帐户的用户名,代码在网站内所以如果我在本地或远程访问它应该可以工作,对吗?感谢您到目前为止的帮助:)
猜你喜欢
  • 1970-01-01
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
相关资源
最近更新 更多