none
再次请教——如何利用PowerShell、VBS脚本或者其他命令行工具,获取域内正在登录的域用户名、主机名和主机IP地址 RRS feed

  • 问题

  • 再次请教——如何利用PowerShell、VBS脚本或者其他命令行工具,获取域内正在登录的域用户名、主机名和主机IP地址

    搜索一下关键词就能看之前论坛中相关的帖子:

    如何用命令查看域用户登陆的计算机

    如何在使用PowerShell脚本或者VBS脚本,查看域内正在登录的域用户名、主机名和主机IP地址


    ==============================================================================

    论坛中以上帖子都提到该脚本

    ============================================================================== 

    strDomainName = InputBox ("Please enter the internal Domain Name:","Script for getting current logged username","yourdomain.local")
    arrDomLevels = Split(strDomainName, ".")
    strADsPath = "dc=" & Join(arrDomLevels, ",dc=")

    Const ADS_SCOPE_SUBTREE = 2
    Set objConnection = CreateObject("ADODB.Connection")
    Set objCommand =   CreateObject("ADODB.Command")
    objConnection.Provider = "ADsDSOObject"
    objConnection.Open "Active Directory Provider"'
    Set objCOmmand.ActiveConnection = objConnection
    objCommand.CommandText = _
       "Select Name, Location from 'LDAP://"&strADsPath&"' " _
          & "Where objectClass='computer'"  
    objCommand.Properties("Page Size") = 1000
    objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE 
    Set objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set of = oFSO.CreateTextFile("LoggedUser.txt", True, True)
    Do Until objRecordSet.EOF
       On Error Resume Next
       sPC = objRecordSet.Fields("Name").Value
        of.writeline " "
     of.writeline "Machine Name: "&sPC
     
     Set objWMILocator = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & sPC & "\root\cimv2")
        
        If Err = 0 Then 
            
     Set col =  objWMILocator.ExecQuery _
        ("Select * from win32_computersystem")
     
     For Each item In col
      
       
      of.writeline  "Logged User: "&item.username
       
     Next
     Set col = Nothing
     Else
     of.writeline "!!! Cant connect to "&sPC&" !!!"
     
     End If
    objRecordSet.MoveNext
    Loop
    of.close
    MsgBox "Done! Cheers!"


    ==============================================================================

    我在2008R2上执行该VBS脚本能运行成功,但好像不能获取全部登录用户,只能获取管理员(AD上登录的用户的相关信息),具体执行结果如下(即LoggedUser.txt里面的内容)

    ==============================================================================

         
    Machine Name: 2008R2
    Logged User: 2008R20\administrator

    Machine Name: DM-WIN7
    !!! Cant connect to DM-WIN7 !!!

    Machine Name: DM-WIN10
    !!! Cant connect to DM-WIN10 !!!

    Machine Name: WIN7
    !!! Cant connect to WIN7 !!!

    Machine Name: WIN10
    !!! Cant connect to WIN10 !!!

    ==============================================================================

    从以上结果看,似乎没有达到获取域内所有正在登录的与用户、主机名的目的,当我执行该VBS脚本时,我的环境内至少还有三台其他的计算机使用三个不同的用户登录到该域,可结果中并没显示,不知道是不是我执行有问题、还是我的环境的原因,我看不懂上面的脚本每行的作用,不知道问题出在哪里,能否帮我分析分析我的需求,要如何解决,如何达到我的目的???

    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    在以下帖子中"Andy_Pan(MSFT CSG)"又提到了一个powershell脚本,我之后的结果如下

    帖子:::搜索一下关键词就能看之前论坛中相关的帖子
    如何在使用PowerShell脚本或者VBS脚本,查看域内正在登录的域用户名、主机名和主机IP地址

    执行结果:::

    C:\Users\Administrator\Desktop>powershell.exe -ExecutionPolicy Bypass -File test.ps1

    2008R20\administrator ip&mac: logged on  since: 01/30/2018 11:24:49
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    ==============================================================================

    从结果看似乎该脚本也没有达到预期的目的!在此再次请教————如何利用PowerShell、VBS脚本或者其他命令行工具,获取域内正在登录的域用户名、主机名和主机IP地址,同时请问,该动作可以不在域控上执行吗??可以在域内非域控计算机上执行吗??



    非常感谢!!!
    2018年2月1日 7:21

全部回复

  • 你好,

    在technet的脚本库里有符合你要求的脚本,请参阅下面的链接

    https://gallery.technet.microsoft.com/Get-LoggedOnUser-Gathers-7cbe93ea#content

    Best Regards,
    Frank


    Please remember to mark the replies as an answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com

    2018年2月2日 1:51
    版主
  • 你好,

    请问回复的信息对你有用么?如果你需要进一步的帮助,请告诉我们。

    Best Regards,

    Frank


    Please remember to mark the replies as an answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com

    2018年2月5日 8:08
    版主
  • 非要关闭防火墙才行?不关闭不行吗?

    域控可以批量关闭域内计算机的防火墙吗?如果可以如何关闭?

    林阳那个工具我知道,我想找个纯脚本或者命令行的简捷的工具!

    还有上面的那个VBS脚本能否帮忙修改下,不要再弹出输入域名的对话框,而是直接把域名写在脚本内!


    2018年2月6日 9:42
  • 我正在测试你提供的脚本!!!
    2018年2月6日 9:42
  • 正在测试!
    2018年2月6日 9:42
  • 我测试了工具,貌似工具也只能获取本地登录的用户啊!我在我的域控上执行的,只获取了在域控上登录到用户信息,并没有获取到域内其他计算机的登录信息!难道也是因为我的域内其他计算机开了防火墙所以没获取到登录信息?
    2018年2月6日 10:03
  • 能不能不在被连接计算机(域内客户机)上执行呢?因为客户机在不同部门和不同地理位置,有时候不方便接触!

    在域控上操作可以达到这个目的吗?或者说直接通过域控可以打开或关闭客户机的防火墙、3389、默认共享什么的吗?

    2018年2月7日 0:49
  • 你好,

    请问您的问题解决了吗? 如果您使用我们的方案解决问题,请“将其标记为答案”,以帮助其他社区成员快速找到有用的回复。 如果您使用自己的方案解决问题,请在此处分享您的经验和解决方案。 对于有类似问题的其他社区成员也是非常有帮助的。 如果没有,请回复并告诉我们目前的情况,以提供进一步的帮助。

    Best Regards,

    Frank


    Please remember to mark the replies as an answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com

    2018年2月12日 9:41
    版主